Код |
---|
Sub test() Dim a() With Sheets("Лист1") a = .Range("A1:J1").Value MsgBox UBound(a) End With End Sub |
Все ячейки заполнены в этом диапазоне, пустых нет.
04.11.2014 14:20:12
Согласие есть продукт при полном непротивлении сторон
|
|||
|
|
04.11.2014 14:20:42
Потому что в массиве одна строка.
|
|
|
|
04.11.2014 14:22:34
я хочу чтобы он занес поочередно ячейки A1, B1, C1, ..., J1 в массив a
|
|
|
|
04.11.2014 14:24:36
Если хотите узнать ширину массива (к-во столбцов), то нужно
|
|||
|
|
04.11.2014 14:28:24
|
|||
|
|
04.11.2014 14:40:42
Тогда
Ubound ведь возвращает информацию о верхней границе массива (номер последнего имеющегося значения), по идее 10 (диапазон же из 10 ячеек). Просветите пожалуйста, весь день гуглю, у всех эти примеры работают, у меня нет. Даже в моей старой теме Hugo |
|||
|
|
04.11.2014 14:44:27
Вы хотите теперь из массива во вторую строку на лист выгрузить циклом данные? Тогда так:
|
|||
|
|
04.11.2014 14:47:59
sinus, Ваш массив имеет вид: а(строк с 1 по 1, столбцов с 1 по 10), как я понял.
|
|
|
|
04.11.2014 14:52:59
Таааак, я могу спороть чушь, но я правильно понял что этот массив получился не (1 to 10), а (10, 1) ??? Ладно, всем спасибо!!! Направление "копания" понял, хотя бы понял что гуглить
Изменено: |
|||
|
|
04.11.2014 15:07:34
Ubound(a) (то же самое что UBound(a, 1)) выдает скажем так к-во строк, а UBound(a, 2) к-во столбцов.
Изменено: |
|||||
|
|
04.11.2014 15:16:43
Читаю тут: И не понимаю какой у меня массив получился...(1 to 1, 1 to 1, 1 to 1, ...) и так 10 раз? Пример из ссылки:
UBound(a, 2) возвращает 5 UBound(a, 3) соответственно 4 Я тут и не могу разобраться, у меня какой массив получился ))) |
|||||
|
|
04.11.2014 15:22:26
sinus, трёхмерный массив.
|
|
|
|
04.11.2014 15:24:04
этот пример для вашего случая больше подходит для понимания, только учтите пример для трехмерного массива у вас же двухмерный. см. строчку выше.
|
|||||
|
|
04.11.2014 15:25:12
Представьте его, как диапазон на листе: A1:J1 - это будет (1 to 1, 1 to 10) - 1 строка, 10 столбцов. A1:A10 - это будет (1 to 10, 1 to 1) - 10 строк, один столбец. Сначала, как и для ячейки (Cells(1,4) указываются строки, затем столбцы. |
|||
|
|
04.11.2014 15:35:51
Спасибо всем большое!
Понял что массив из диапазона ячеек оказывается двухмерным. Думал просто а(1 to 10) вот же ж как )))) думал двумерные начинаются когда 2 или больше строк/столбцов. |
|
|
|
04.11.2014 15:37:25
sinus, любой массив минимально двумерный: 1х1.
|
|
|
|
04.11.2014 15:52:54
Если бы тормознули код после заполнения массива и заглянули в Locals - думаю всё стало бы понятно.
|
|
|
|
04.11.2014 15:57:43
Чтобы, возможно, настало полное понимание: когда Вы создаете массив "на лету" из диапазона ячеек(как у Вас), то массив всегда будет иметь размер и направление ровно как и в диапазоне, из которого его создали.
Вид его типа: Массив(кол-во строк, кол-во столбцов) И всегда начинается с 1(несмотря на Option Base) Т.е. если Вы заносите в массив столбец(A1:J1) - то и массив тоже расширится только по столбцам: 1 до 1, 1 до 10. Как у Вас в примере. Если заносите в массив строку(A1:A10) - то массив расширится по строкам: 1 до 10, 1 до 1. Если занесете в массив диапазон A1:C10 - то массив будет размера: 1 до 10, 1 до 3.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
|
|
|
|
04.11.2014 15:59:37
Любой, созданный из диапазона ячеек на лету. Так будет вернее. Ибо массив, созданный через ту же Split - одномерный. Имеет размерность от 0 до кол-ва элементов. Второй размерности нет и не будет.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
|
|||
|
|
04.11.2014 16:11:20
The_Prist, да, Вы правы.
|
|
|
|
04.11.2014 19:21:43
Еще раз спасибо, много прояснили. |
|||
|
|
04.11.2014 19:29:22
В редакторе.
|
|
|
|
04.11.2014 19:49:15
Ага, включил отображение окна, View - Locals Window
Понаблюдаю что это такое )) до этого без него писал код |
|
|
|
04.11.2014 19:53:41
Незаменимое окошко: прогоняете по F8 код и смотрите состояние)
|
|
|
|
11.09.2018 23:47:37
Добрый день. Старенькая тема форума, но надеюсь я по теме.
Если в ячейку, имеющую формат даты, ввести число большее 2958465 (эквивалентно дате 31.12.9999), то ячейка выдаст "ошибку" типа "########" (оно и понятно, даты больше указанной в экселе нет). Если попытаться "загнать" в массив значения из диапазона ячеек, содержащей ячейку с вышеупомянутой "ошибкой" например, arrData = Sheets("Лист1").Range("a1:c10").Value, то массив это не проглотит, выдаст ошибку Run-time error 6, Overflow. Хотя другого типа ошибки (#ДЕЛ/0!, #ССЫЛКА!, и прочее, и прочее) - массив глотает. Интересно, что с ячейкой, имеющей формат даты, но с отрицательным числом и имеющую такую же (визуально) ошибку "#########", ситуация немного другая. Строка типа arrData = Sheets("Лист1").Range("a1:c10").Value ошибку не выдает, но вот обратно загнать значения из массива на лист не получится: строка Sheets("Лист1").Range("a21:c30").Value = arrData выдаст ошибку Run-time error 1004. Ради творческого и профессионального интереса, скажите почему это происходит? Есть ли и другие ограничения подобного рода? Кто-нибудь знает? Спасибо. |
|
|
|
11.09.2018 23:56:24
IAdmireExcel, А какая связь вашего вопроса с темой?
По вопросам из тем форума, личку не читаю.
|
|
|
|
12.09.2018 01:09:05
Создайте отдельную тему с названием, отражающим суть вопроса.
|
||||
|
|
|||