Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
1 / 1 / 0
Регистрация: 04.04.2015
Сообщений: 36
1

Сделать выборку значений из массива типа Range

03.07.2015, 15:19. Показов 2999. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствсуйте! Помогите доделать функцию, которая принимает массив ячеек, выбирает из него только непустые ячейки и возвращает их.

Пробовал так:

Visual Basic
1
2
3
4
5
6
7
8
9
10
Private Function IgnorEmptyCell(a As Range) As Range
Dim j As Integer, aa As Range
    For i = 1 To a.Count
        If IsEmpty(a(i)) Then GoTo end1
        j = j + 1
        Set aa(j) = a(i)
end1:
    Next
    Set IgnorEmptyCell = aa
End Function
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.07.2015, 15:19
Ответы с готовыми решениями:

Как сделать выборку по полю типа smalldatetime?
est table xxx v nej field yyy,datatype ego smalldatetime. neobhodimo vibrat stroki dopustim s...

Как сделать выборку из таблицы каждые 10 или n-ое кол-во значений
Как сделать выборку из таблицы каждые 10 или n-ое кол-во значений, в таблице есть timestamp, может...

Как сделать выборку с проводок и выгрузить в таблицу значений в 1с77?
Добрый день, в 1с программировании начинаю, так что строго не судите, коллеги. Задача заключается в...

Помогите с функциями в Excel.... Есть набор значений нужно сделать выборку
Есть столбец значений. 1000 1100 1110 1111 1112 1113 1114 1115 1120

9
15 / 15 / 5
Регистрация: 01.12.2014
Сообщений: 117
03.07.2015, 15:24 2
Visual Basic
1
2
3
Next
    IgnorEmptyCell = aa
End Function
зачем Set ?

Цитата Сообщение от werwolf_999 Посмотреть сообщение
Здравствсуйте
0
1 / 1 / 0
Регистрация: 04.04.2015
Сообщений: 36
03.07.2015, 15:43  [ТС] 3
ошибка возникает уже при заполнении массива aa, как правильно заполнить массив типа Range?

Добавлено через 14 минут
set м.б. и не надо, пока не знаю, т.к. ошибка возникает раньше, при заполнении массива aa. Как правильно заполнить массив ячеек?
0
15 / 15 / 5
Регистрация: 01.12.2014
Сообщений: 117
03.07.2015, 15:48 4
Цитата Сообщение от werwolf_999 Посмотреть сообщение
set м.б. и не надо
Если мне очень не изменяет память, то Set к Array() не применяется, по крайней мере к необьявленному, безразмерному массиву.
0
15151 / 6424 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
03.07.2015, 16:18 5
werwolf_999, как Вы собираетесь использовать эту функцию - на листе Excel или в коде?
В первом случае функция должна возвращать массив, по размеру равный диапазону, в который введена функция.
0
2785 / 717 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
03.07.2015, 16:20 6
А тут по ходу и нет массивов - явно вижу объекты Range. Хотел прредложить сделать через .SpecialCells, но пока не додумал, как добиться результата с xlCellTypeConstants и xlCellTypeFormulas, если того или иного вдруг не окажется в диапазоне.
0
1 / 1 / 0
Регистрация: 04.04.2015
Сообщений: 36
04.07.2015, 08:34  [ТС] 7
в коде


Цитата Сообщение от Казанский Посмотреть сообщение
использовать эту функцию - на листе Excel или в коде?
Есть макрос, который строит график по введённым пользователем значениям. Чтобы график не обрывался на пустых значениях, я хочу их исключить, использую эту функцию.


Цитата Сообщение от mc-black Посмотреть сообщение
А тут по ходу и нет массивов - явно вижу объекты Range
Range - это же массив ячеек? может я его так называю... В общем, функция принимает диапазон ячеек, а потом возвращает этот диапазон только без пустых ячеек. Причем, скорее всего она должна возвращать ссылки на непустые значения из входного диапазона (иначе это будет диапазон других ячеек со значениями из входного). Пример: на входе "Лист1!A1:A10", ячейка A3 пустая. Тогда функция должна возвращать "Лист1!A1:A2;Лист1!A4:A10".
0
3920 / 2317 / 785
Регистрация: 02.11.2012
Сообщений: 6,162
04.07.2015, 09:58 8
1. вам хотят сказать что функция не может менять диапазоны, соответственно вам нужна не функция а обычный макрос.
2. "aa As Range" массив так не объявляется, нужно так aa().
0
4135 / 2239 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
04.07.2015, 10:32 9
Лучший ответ Сообщение было отмечено werwolf_999 как решение

Решение

Цитата Сообщение от werwolf_999 Посмотреть сообщение
Пример: на входе "Лист1!A1:A10", ячейка A3 пустая. Тогда функция должна возвращать "Лист1!A1:A2;Лист1!A4:A10"
Тогда, формально, так :

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub Test()
    If Application.Count([Лист1!A1:A10]) > 0 Then
       MsgBox IgnorEmptyCell([Лист1!A1:A10]).Address '(False, False, , True)
    Else
       MsgBox "Все ячейки диапазона - пустые"
    End If
End Sub
 
Private Function IgnorEmptyCell(iSource As Range) As Range
    Dim iCell As Range
    For Each iCell In iSource
        If Not IsEmpty(iCell) Then
           If Not IgnorEmptyCell Is Nothing Then
              Set IgnorEmptyCell = Union(IgnorEmptyCell, iCell)
           Else
              Set IgnorEmptyCell = iCell
           End If
        End If
    Next
End Function
1
2785 / 717 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
11.07.2015, 09:53 10
Цитата Сообщение от werwolf_999 Посмотреть сообщение
Range - это же массив ячеек?
Строго говоря - нет, здесь Вы заблуждаетесь. Так можете думать, если вам так удобней воспринимать, но на форуме фокусы с терминологией вносят путаницу. Range - это сложный объект, который, в отличие от массивов имеет кучу методов и свойств, в том числе свойств, возвращающих другие объекты, коллекции. А массив - это структура данных, присущая языку, не привязанная строго к Excel. И да, массив может содержать объекты Range (Variant), но не наоборот.
0
11.07.2015, 09:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.07.2015, 09:53
Помогаю со студенческими работами здесь

SLQ. Как сделать выборку значений из одного столбца в каждый отдельно?
У меня есть скрипт который вытягивает данные с таблицы rl - reservation_log c поля reason. Там...

Как сделать выборку из массива?
был запрос mysql извлеченные данные помещены в массив.Как сделать выборку из массива? я читал с...

Как сделать выборку элементов из массива?
Задан массив A, состоящий из M элементов. Необходимо сгенерировать новый массив B, некой...

Как сделать выборку из массива по длине строк и отсортировать ее по алфавиту?
Третий день ломаю голову что уже имею на сейчас ниже исходник а так же сама задача! То что в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru