Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Хочу разобраться в массивах. Из песочницы... - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Хочу разобраться в массивах. Из песочницы... (Макросы/Sub)
Хочу разобраться в массивах. Из песочницы...
Railord Дата: Суббота, 27.09.2014, 22:10 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 45
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый вечер.

Уже два дня бьюсь над этим, и литературу прочел, и на сайте много топиков просмотрел, но ни как не могу вникнуть в тему массивов и их применения...
Объявил массив.
[vba]
Код
Sub Учусь()
Dim x() As String
End Sub
[/vba]
Как в него залить столбец А с текстовыми данными?
Вот пример, выложенный пользователем nilem(считывание диапазона в массив):
[vba]
Код
Sub example_2() 'одномерный массив (на выбор)    
Dim x    
With Range("A1", Cells(Rows.Count, 1).End(xlUp)) 'из столбца    
   x = WorksheetFunction.Transpose(.Value)    
End With  
[/vba]
Непонятки:
1) Разве не нужно после объявления массива ставить две скобки, независимо от того определено число элементов или нет?
2) Вроде бы сделал все тоже самое, но выдает type missmatch...
3) Есть ячейка С1 с текстовым значением, как найти это значение в массиве и вернуть ячейку в которой оно находится?
Быть может есть более простой, менее продвинутый, но более понятный путь для добавления элементов в массив??
К сообщению приложен файл: 4204691.xlsm (13.5 Kb)


Nil novi sub luna, так что - век живи, век учись!)

Сообщение отредактировал Railord - Суббота, 27.09.2014, 22:11
 
Ответить
СообщениеДобрый вечер.

Уже два дня бьюсь над этим, и литературу прочел, и на сайте много топиков просмотрел, но ни как не могу вникнуть в тему массивов и их применения...
Объявил массив.
[vba]
Код
Sub Учусь()
Dim x() As String
End Sub
[/vba]
Как в него залить столбец А с текстовыми данными?
Вот пример, выложенный пользователем nilem(считывание диапазона в массив):
[vba]
Код
Sub example_2() 'одномерный массив (на выбор)    
Dim x    
With Range("A1", Cells(Rows.Count, 1).End(xlUp)) 'из столбца    
   x = WorksheetFunction.Transpose(.Value)    
End With  
[/vba]
Непонятки:
1) Разве не нужно после объявления массива ставить две скобки, независимо от того определено число элементов или нет?
2) Вроде бы сделал все тоже самое, но выдает type missmatch...
3) Есть ячейка С1 с текстовым значением, как найти это значение в массиве и вернуть ячейку в которой оно находится?
Быть может есть более простой, менее продвинутый, но более понятный путь для добавления элементов в массив??

Автор - Railord
Дата добавления - 27.09.2014 в 22:10
alex1248 Дата: Суббота, 27.09.2014, 22:28 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 384
Репутация: 71 ±
Замечаний: 0% ±

Excel 2007, 2010
Быть может есть более простой, менее продвинутый, но более понятный путь для добавления элементов в массив??

Почему не пройтись циклом по диапазону с данными?


skype alex12481632
Qiwi +79276708519
 
Ответить
Сообщение
Быть может есть более простой, менее продвинутый, но более понятный путь для добавления элементов в массив??

Почему не пройтись циклом по диапазону с данными?

Автор - alex1248
Дата добавления - 27.09.2014 в 22:28
Railord Дата: Суббота, 27.09.2014, 22:46 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 45
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
На данном примере хотелось бы понять и научиться применять массив...
Хотя я и циклы пока не освоил...


Nil novi sub luna, так что - век живи, век учись!)
 
Ответить
СообщениеНа данном примере хотелось бы понять и научиться применять массив...
Хотя я и циклы пока не освоил...

Автор - Railord
Дата добавления - 27.09.2014 в 22:46
alex1248 Дата: Суббота, 27.09.2014, 22:52 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 384
Репутация: 71 ±
Замечаний: 0% ±

Excel 2007, 2010
На данном примере хотелось бы понять и научиться применять массив...
Хотя я и циклы пока не освоил...

Я никогда не пользовался массивами. А циклы бывают необходимы.
ИМХО, лучше начать с циклов. Есть же довольно простые ситуации, можно начать с цикла For-Next с известным количеством элементов.


skype alex12481632
Qiwi +79276708519
 
Ответить
Сообщение
На данном примере хотелось бы понять и научиться применять массив...
Хотя я и циклы пока не освоил...

Я никогда не пользовался массивами. А циклы бывают необходимы.
ИМХО, лучше начать с циклов. Есть же довольно простые ситуации, можно начать с цикла For-Next с известным количеством элементов.

Автор - alex1248
Дата добавления - 27.09.2014 в 22:52
AndreTM Дата: Воскресенье, 28.09.2014, 08:49 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
Скобки ставить желательно, но необязательно.
Определять типизированный массив для закачки данных с листа - нежелательно, мало ли что там будет на листе.
Транспонировать тоже необязательно - вы просто должны понимать, как происходит копирование диапазона в массив (и обратно)
[vba]
Код
Dim m()

' Определяем диапазон A1:A25, массив будет содержать 25 элементов
With Range("A1", Cells(Rows.Count, 1).End(xlUp))
     m = .Value
End With

' Переопределяем диапазон на A7:A25, массив будет содержать 19 элементов
Dim oRng As Range
Set oRng = Range([a1].End(xlDown), Cells(Rows.Count, 1).End(xlUp))
m = oRng.Value
[/vba]При чтении диапазона, размер массива будет динамически переопределен. При этом создается двумерный массив, нумерация индексов начинается с единицы, аналогично такому: ReDim m(1 To oRng.Rows.Count, 1 To oRng.Columns.Count). Далее, зная это, вы просто можете работать с этим массивом через циклы. Попробуем найти первое совпадение с C1:
[vba]
Код
Dim i, cToFind
cToFind = UCase(Trim([c1]))
For i = 1 To UBound(m, 1)
     If InStr(1, UCase(m(i, 1)), cToFind) Then
     'If UCase(m(i, 1)) Like "*" & cToFind & "*" Then
         MsgBox "Найдено: M(" & i & ") = " & m(i, 1)
         Exit For
     End If
Next
If i > UBound(m, 1) Then MsgBox "Не найдено"
[/vba]Получаем ответ - M(14). Обратите внимание, что мы искали не просто совпадение, а вхождение одной строки в другую, при этом без учета регистра (кстати, символьное сравнение можно было бы провести не поиском подстроки, а через Like). Ну и можно было искать не первое совпадение, а любое (или все) - достаточно не прерывать цикл.
С другой стороны, мы находим значения - но не ячейки на листе. Поэтому и ответ - "14-й элемент массива", а не "ячейка A20". Хотя, зная то, как мы считывали массив - получить адрес ячейки (или её значение) тоже можно - это будет [a1].End(xlDown).Offset(i - 1).Value.
Ну и если бы нужно было просто найти совпадения в массиве строк, то можно было бы воспользоваться функцией Filter. Нужно только учитывать, что параметр этой функции - одномерный массив, так что наш массив пришлось бы преобразовать:
[vba]
Код
ReDim a(1 To UBound(m, 1)) As String
Dim f
For i = 1 To UBound(m, 1)
     a(i) = m(i, 1)
Next
f = Filter(a, [c1])
If UBound(f) >= 0 Then MsgBox f(0)
[/vba]

А в целом, нужно понимать, что сами по себе ячейки (листы, книги) - это уже коллекции объектов, т.е. перечислимые множества. Т.е. с ними можно напрямую работать как с массивами. Кроме того, для ваших задач, сразу можно задействовать как имеющиеся свойства и методы модели, так и функции листа. Например, в нашем случае можно было бы просто найти нужную ячейку:
[vba]
Код
Dim oCell As Range
Set oCell = oRng.Find([c1], , , xlPart)
If oCell Is Nothing Then MsgBox "Не найдено" Else MsgBox oCell.Value
[/vba]
К сообщению приложен файл: 10-13212-1.xls (38.5 Kb)


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеСкобки ставить желательно, но необязательно.
Определять типизированный массив для закачки данных с листа - нежелательно, мало ли что там будет на листе.
Транспонировать тоже необязательно - вы просто должны понимать, как происходит копирование диапазона в массив (и обратно)
[vba]
Код
Dim m()

' Определяем диапазон A1:A25, массив будет содержать 25 элементов
With Range("A1", Cells(Rows.Count, 1).End(xlUp))
     m = .Value
End With

' Переопределяем диапазон на A7:A25, массив будет содержать 19 элементов
Dim oRng As Range
Set oRng = Range([a1].End(xlDown), Cells(Rows.Count, 1).End(xlUp))
m = oRng.Value
[/vba]При чтении диапазона, размер массива будет динамически переопределен. При этом создается двумерный массив, нумерация индексов начинается с единицы, аналогично такому: ReDim m(1 To oRng.Rows.Count, 1 To oRng.Columns.Count). Далее, зная это, вы просто можете работать с этим массивом через циклы. Попробуем найти первое совпадение с C1:
[vba]
Код
Dim i, cToFind
cToFind = UCase(Trim([c1]))
For i = 1 To UBound(m, 1)
     If InStr(1, UCase(m(i, 1)), cToFind) Then
     'If UCase(m(i, 1)) Like "*" & cToFind & "*" Then
         MsgBox "Найдено: M(" & i & ") = " & m(i, 1)
         Exit For
     End If
Next
If i > UBound(m, 1) Then MsgBox "Не найдено"
[/vba]Получаем ответ - M(14). Обратите внимание, что мы искали не просто совпадение, а вхождение одной строки в другую, при этом без учета регистра (кстати, символьное сравнение можно было бы провести не поиском подстроки, а через Like). Ну и можно было искать не первое совпадение, а любое (или все) - достаточно не прерывать цикл.
С другой стороны, мы находим значения - но не ячейки на листе. Поэтому и ответ - "14-й элемент массива", а не "ячейка A20". Хотя, зная то, как мы считывали массив - получить адрес ячейки (или её значение) тоже можно - это будет [a1].End(xlDown).Offset(i - 1).Value.
Ну и если бы нужно было просто найти совпадения в массиве строк, то можно было бы воспользоваться функцией Filter. Нужно только учитывать, что параметр этой функции - одномерный массив, так что наш массив пришлось бы преобразовать:
[vba]
Код
ReDim a(1 To UBound(m, 1)) As String
Dim f
For i = 1 To UBound(m, 1)
     a(i) = m(i, 1)
Next
f = Filter(a, [c1])
If UBound(f) >= 0 Then MsgBox f(0)
[/vba]

А в целом, нужно понимать, что сами по себе ячейки (листы, книги) - это уже коллекции объектов, т.е. перечислимые множества. Т.е. с ними можно напрямую работать как с массивами. Кроме того, для ваших задач, сразу можно задействовать как имеющиеся свойства и методы модели, так и функции листа. Например, в нашем случае можно было бы просто найти нужную ячейку:
[vba]
Код
Dim oCell As Range
Set oCell = oRng.Find([c1], , , xlPart)
If oCell Is Nothing Then MsgBox "Не найдено" Else MsgBox oCell.Value
[/vba]

Автор - AndreTM
Дата добавления - 28.09.2014 в 08:49
Railord Дата: Воскресенье, 28.09.2014, 16:24 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 45
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
AndreTM, большое спасибо за то что откликнулись, и дали такой развернутый ответ.
Цитата
Скобки ставить желательно, но необязательно.

А я, видя написания кодов участниками форума, не понимал, как простая переменная становится массивом. Думал, чтобы переменная стала массивом - надо поставить скобки обязательно. Хотя массив - это получается группа переменных...
Ясно.
Цитата
вы просто должны понимать, как происходит копирование диапазона в массив (и обратно)

Для понимания кода я стараюсь проговаривать все действия, которые будет совершать программа.
Непонятки Код1:

где m = .Value. Что значит .Value? Присваивает, определенный ранее диапазон значений, переменной m?
Почему мы не можем [vba]
Код
oRng = Range([a1].End(xlDown), Cells(Rows.Count, 1).End(xlUp))
[/vba]написать сразу после WIth вначале кода, и определить диапазон с A7-A25 сразу? Не делая массив двумерным?
Код2:

[vba]
Код
MsgBox "Найдено: M(" & i & ") = " & m(i, 1)
[/vba] - что значит конкатенация m(i, 1) в этом выражении и что значат i и 1 в скобках?
[vba]
Код
If i > UBound(m, 1) Then MsgBox "Не найдено"
[/vba] - это строка означает, что если счетчик i превысил нижний индекс массива m, то выводится месседж "Не найдено"?

[a1].End(xlDown).Offset(i - 1).Value. - чтобы возвращало "ячейка А20"это надо поставить после MsgBox "Найдено:?


Nil novi sub luna, так что - век живи, век учись!)

Сообщение отредактировал Railord - Воскресенье, 28.09.2014, 16:27
 
Ответить
СообщениеAndreTM, большое спасибо за то что откликнулись, и дали такой развернутый ответ.
Цитата
Скобки ставить желательно, но необязательно.

А я, видя написания кодов участниками форума, не понимал, как простая переменная становится массивом. Думал, чтобы переменная стала массивом - надо поставить скобки обязательно. Хотя массив - это получается группа переменных...
Ясно.
Цитата
вы просто должны понимать, как происходит копирование диапазона в массив (и обратно)

Для понимания кода я стараюсь проговаривать все действия, которые будет совершать программа.
Непонятки Код1:

где m = .Value. Что значит .Value? Присваивает, определенный ранее диапазон значений, переменной m?
Почему мы не можем [vba]
Код
oRng = Range([a1].End(xlDown), Cells(Rows.Count, 1).End(xlUp))
[/vba]написать сразу после WIth вначале кода, и определить диапазон с A7-A25 сразу? Не делая массив двумерным?
Код2:

[vba]
Код
MsgBox "Найдено: M(" & i & ") = " & m(i, 1)
[/vba] - что значит конкатенация m(i, 1) в этом выражении и что значат i и 1 в скобках?
[vba]
Код
If i > UBound(m, 1) Then MsgBox "Не найдено"
[/vba] - это строка означает, что если счетчик i превысил нижний индекс массива m, то выводится месседж "Не найдено"?

[a1].End(xlDown).Offset(i - 1).Value. - чтобы возвращало "ячейка А20"это надо поставить после MsgBox "Найдено:?

Автор - Railord
Дата добавления - 28.09.2014 в 16:24
AndreTM Дата: Воскресенье, 28.09.2014, 19:14 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
Код1: где m = .Value.
Вы забываете, что этот код находится внутри With ... End With. Соответственно, обращение .Value (именно точка) - это обращение к свойствам/методам вышестоящего объекта (который определяется With). Т.е. это есть Range("A1", Cells(Rows.Count, 1).End(xlUp)).Value.
То же самое мы наблюдаем при перечислении For Each ... Next.
Что касается "почему мы не можем написать код..." - это же пример на динамическое переопределение массива самим Excel'ем. Т.е. два первоначальных определения - это аналоги, показывающие, что вы должны определить диапазон для считывания... они независимы друг от друга, это "параллельный код" :)
При этом я вам же указал - при "прямом чтении/записи" лист<->массив всегда используется двумерная адресация, это аксиома.

что значит конкатенация m(i, 1) в этом выражении и что значат i и 1 в скобках?
Это странный вопрос... Именно то и значат, что вы написали - конкатенацию (как строки, по определению конкатенации) значения i-го элемента массива (Excel его преобразует в строку автоматом). Единица там - это "первый столбец" - ведь, невзирая на то, что мы прочитали "всего лишь" как бы одномерный массив - динамически он был определен двумерным: ReDim m(1 To 19, 1 To 1), поэтому мы и вынуждены указывать второй индекс.

это строка означает, что если счетчик i превысил
Да, именно это. Здесь использовано то, что при "стандартном" выходе из цикла (по достижению предела индекса) - переменная-счетчик содержит следующее значение. Ведь в большинстве ЯП цикл FOR, как ни странно, реализуется средствами ассемблера - и условный переход по J*** оставляет в регистре новое значение счетчика...

[a1].End(xlDown).Offset(i - 1).Value. - чтобы возвращало "ячейка А20"...
Ну так и напишите именно адрес:
[vba]
Код
MsgBox "Ячейка " & [a1].End(xlDown).Offset(i - 1).Address(False, False)
[/vba]Изучайте объектную модель приложения :)


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
Сообщение
Код1: где m = .Value.
Вы забываете, что этот код находится внутри With ... End With. Соответственно, обращение .Value (именно точка) - это обращение к свойствам/методам вышестоящего объекта (который определяется With). Т.е. это есть Range("A1", Cells(Rows.Count, 1).End(xlUp)).Value.
То же самое мы наблюдаем при перечислении For Each ... Next.
Что касается "почему мы не можем написать код..." - это же пример на динамическое переопределение массива самим Excel'ем. Т.е. два первоначальных определения - это аналоги, показывающие, что вы должны определить диапазон для считывания... они независимы друг от друга, это "параллельный код" :)
При этом я вам же указал - при "прямом чтении/записи" лист<->массив всегда используется двумерная адресация, это аксиома.

что значит конкатенация m(i, 1) в этом выражении и что значат i и 1 в скобках?
Это странный вопрос... Именно то и значат, что вы написали - конкатенацию (как строки, по определению конкатенации) значения i-го элемента массива (Excel его преобразует в строку автоматом). Единица там - это "первый столбец" - ведь, невзирая на то, что мы прочитали "всего лишь" как бы одномерный массив - динамически он был определен двумерным: ReDim m(1 To 19, 1 To 1), поэтому мы и вынуждены указывать второй индекс.

это строка означает, что если счетчик i превысил
Да, именно это. Здесь использовано то, что при "стандартном" выходе из цикла (по достижению предела индекса) - переменная-счетчик содержит следующее значение. Ведь в большинстве ЯП цикл FOR, как ни странно, реализуется средствами ассемблера - и условный переход по J*** оставляет в регистре новое значение счетчика...

[a1].End(xlDown).Offset(i - 1).Value. - чтобы возвращало "ячейка А20"...
Ну так и напишите именно адрес:
[vba]
Код
MsgBox "Ячейка " & [a1].End(xlDown).Offset(i - 1).Address(False, False)
[/vba]Изучайте объектную модель приложения :)

Автор - AndreTM
Дата добавления - 28.09.2014 в 19:14
Railord Дата: Воскресенье, 28.09.2014, 22:51 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 45
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Голова кругом идет - чтобы понять массивы, по моему нужно сделать шаг назад и перечитать книгу заново и в частности изучить объектную модель - читать читал, раздел объекты и коллекции... За словарь вообще молчу :(
Информации реально очень много - открыто 15 вкладок в опере, 2 книги, справка.... Вообщем...
Как ни странно - кратчайший путь оказался самым эффективным, без массива без цикла, зато работает - попробовал и даже мне понятно :) !!!
[vba]
Код
Dim oCell As Range
Set oCell = oRng.Find([c1], , , xlPart)
If oCell Is Nothing Then MsgBox "Не найдено" Else MsgBox oCell.Value
[/vba]

Только, на что нужно поменять xlpart, чтобы сравнивать полностью - совпадение должно быть абсолютно точным, т.е. чтобы было так: "пикник<> пикник большой"??

P.S. Как открыть эту справку в эксель 2010? - где расписаны все параметры типо xl... vb... и что они означают там написано. Через F1 - открывается какая-то неинформативная справка...


Nil novi sub luna, так что - век живи, век учись!)

Сообщение отредактировал Railord - Воскресенье, 28.09.2014, 23:00
 
Ответить
СообщениеГолова кругом идет - чтобы понять массивы, по моему нужно сделать шаг назад и перечитать книгу заново и в частности изучить объектную модель - читать читал, раздел объекты и коллекции... За словарь вообще молчу :(
Информации реально очень много - открыто 15 вкладок в опере, 2 книги, справка.... Вообщем...
Как ни странно - кратчайший путь оказался самым эффективным, без массива без цикла, зато работает - попробовал и даже мне понятно :) !!!
[vba]
Код
Dim oCell As Range
Set oCell = oRng.Find([c1], , , xlPart)
If oCell Is Nothing Then MsgBox "Не найдено" Else MsgBox oCell.Value
[/vba]

Только, на что нужно поменять xlpart, чтобы сравнивать полностью - совпадение должно быть абсолютно точным, т.е. чтобы было так: "пикник<> пикник большой"??

P.S. Как открыть эту справку в эксель 2010? - где расписаны все параметры типо xl... vb... и что они означают там написано. Через F1 - открывается какая-то неинформативная справка...

Автор - Railord
Дата добавления - 28.09.2014 в 22:51
AndreTM Дата: Воскресенье, 28.09.2014, 23:09 | Сообщение № 9
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
xlWhole?

Как открыть эту справку в эксель 2010? - где расписаны все параметры типо xl... vb... и что они означают
Конечно. можно посоветовать поставить ОфисXP/2k/2003... но зачем? Разве запрос в инет, типа http://yandex.ru/yandsearch?clid=9582&text=excel%20vba%20range%20find выдаёт настолько много неверных ссылок? :)
Ну и значения констант VB/VBA можно просто изучить через Immediate... а также есть обсервер (жмакните F2 в IDE(VBE), чтобы посмотреть на текущие объекты текущей модели).


Skype: andre.tm.007
Donate: Qiwi: 9517375010


Сообщение отредактировал AndreTM - Воскресенье, 28.09.2014, 23:11
 
Ответить
СообщениеxlWhole?

Как открыть эту справку в эксель 2010? - где расписаны все параметры типо xl... vb... и что они означают
Конечно. можно посоветовать поставить ОфисXP/2k/2003... но зачем? Разве запрос в инет, типа http://yandex.ru/yandsearch?clid=9582&text=excel%20vba%20range%20find выдаёт настолько много неверных ссылок? :)
Ну и значения констант VB/VBA можно просто изучить через Immediate... а также есть обсервер (жмакните F2 в IDE(VBE), чтобы посмотреть на текущие объекты текущей модели).

Автор - AndreTM
Дата добавления - 28.09.2014 в 23:09
Railord Дата: Воскресенье, 28.09.2014, 23:12 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 45
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
P.P.S. Стыдно признаваться, но я все же не понимаю пока, что значит
Цитата
динамическое переопределение массива
и зачем мы пишем так:[vba]
Код
With Range("A1", Cells(Rows.Count, 1).End(xlUp))
     m = .Value
End With
[/vba]
Если можно написать так
Цитата
Т.е. это есть Range("A1", Cells(Rows.Count, 1).End(xlUp)).Value.

Наверное мне стоит поискать материал посвежее того, что написано в книге 2002 года...


Nil novi sub luna, так что - век живи, век учись!)
 
Ответить
СообщениеP.P.S. Стыдно признаваться, но я все же не понимаю пока, что значит
Цитата
динамическое переопределение массива
и зачем мы пишем так:[vba]
Код
With Range("A1", Cells(Rows.Count, 1).End(xlUp))
     m = .Value
End With
[/vba]
Если можно написать так
Цитата
Т.е. это есть Range("A1", Cells(Rows.Count, 1).End(xlUp)).Value.

Наверное мне стоит поискать материал посвежее того, что написано в книге 2002 года...

Автор - Railord
Дата добавления - 28.09.2014 в 23:12
wild_pig Дата: Воскресенье, 28.09.2014, 23:20 | Сообщение № 11
Группа: Проверенные
Ранг: Обитатель
Сообщений: 517
Репутация: 97 ±
Замечаний: 0% ±

2003, 2013
 
Ответить
СообщениеПочитать

Автор - wild_pig
Дата добавления - 28.09.2014 в 23:20
Railord Дата: Воскресенье, 28.09.2014, 23:40 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 45
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Цитата
xlWhole?
- Сработало. Благодарю. Допишу небольшую облегчалку жизни в ексель для брата.
Затем вернусь к основам, и не зря же вы такие здоровые посты строчили - очень надеюсь, что я стану понимать массивы и научусь их применять.
Пусть не сейчас, но я уверен, что это пригодится мне в будущем.

Цитата
а также есть обсервер (жмакните F2 в IDE(VBE), чтобы посмотреть на текущие объекты текущей модели).
- вот это я и искал, только видимо не там...
Благодарю за ссылку - буду пользоваться msdn ской справкой...
Завтра продолжу! - Буду учить пока не пойму.
Спасибо за поддержку.


Nil novi sub luna, так что - век живи, век учись!)
 
Ответить
Сообщение
Цитата
xlWhole?
- Сработало. Благодарю. Допишу небольшую облегчалку жизни в ексель для брата.
Затем вернусь к основам, и не зря же вы такие здоровые посты строчили - очень надеюсь, что я стану понимать массивы и научусь их применять.
Пусть не сейчас, но я уверен, что это пригодится мне в будущем.

Цитата
а также есть обсервер (жмакните F2 в IDE(VBE), чтобы посмотреть на текущие объекты текущей модели).
- вот это я и искал, только видимо не там...
Благодарю за ссылку - буду пользоваться msdn ской справкой...
Завтра продолжу! - Буду учить пока не пойму.
Спасибо за поддержку.

Автор - Railord
Дата добавления - 28.09.2014 в 23:40
Railord Дата: Воскресенье, 26.10.2014, 22:42 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 45
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Ап!
Возрождаем тему!
Добрый вечер всем!
Пост №5
Цитата
[a1].End(xlDown).Offset(i - 1).Value.
- речь шла о том, чтобы получить адрес ячейки, имея номер элемента массива. Просьба приблизить к пониманию, почему в скобках указано (i -1) - зачем отнимать единицу от найденного элемента массива??


Nil novi sub luna, так что - век живи, век учись!)
 
Ответить
СообщениеАп!
Возрождаем тему!
Добрый вечер всем!
Пост №5
Цитата
[a1].End(xlDown).Offset(i - 1).Value.
- речь шла о том, чтобы получить адрес ячейки, имея номер элемента массива. Просьба приблизить к пониманию, почему в скобках указано (i -1) - зачем отнимать единицу от найденного элемента массива??

Автор - Railord
Дата добавления - 26.10.2014 в 22:42
RAN Дата: Воскресенье, 26.10.2014, 22:54 | Сообщение № 14
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Ответ 100% правильный (и 100% бесполезный). :D
Потому, что Offset(i) сместит на строку дальше, чем нужно.
Уточнить можно пройдя код по F8.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеОтвет 100% правильный (и 100% бесполезный). :D
Потому, что Offset(i) сместит на строку дальше, чем нужно.
Уточнить можно пройдя код по F8.

Автор - RAN
Дата добавления - 26.10.2014 в 22:54
Railord Дата: Воскресенье, 26.10.2014, 23:19 | Сообщение № 15
Группа: Пользователи
Ранг: Новичок
Сообщений: 45
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Зачем помогаешь - если бесполезный? :)


Nil novi sub luna, так что - век живи, век учись!)
 
Ответить
СообщениеЗачем помогаешь - если бесполезный? :)

Автор - Railord
Дата добавления - 26.10.2014 в 23:19
RAN Дата: Воскресенье, 26.10.2014, 23:25 | Сообщение № 16
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Каков вопрос - таков ответ.
Может есть смысл задуматься над формулировкой вопроса?
И обеспечения возможности
пройдя код по F8.


PS Я не настаиваю... :)

[offtop]Отец Нил Новый Подкомиссия Луны lol [/offtop]


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Воскресенье, 26.10.2014, 23:34
 
Ответить
СообщениеКаков вопрос - таков ответ.
Может есть смысл задуматься над формулировкой вопроса?
И обеспечения возможности
пройдя код по F8.


PS Я не настаиваю... :)

[offtop]Отец Нил Новый Подкомиссия Луны lol [/offtop]

Автор - RAN
Дата добавления - 26.10.2014 в 23:25
Railord Дата: Воскресенье, 26.10.2014, 23:57 | Сообщение № 17
Группа: Пользователи
Ранг: Новичок
Сообщений: 45
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Я тока учусь.
Пока еще не включил это выражение в код - это на очереди...
В следующий раз сначала попробую, а уже потом сюда...

[offtop] Рад, что повеселил


Nil novi sub luna, так что - век живи, век учись!)

Сообщение отредактировал Railord - Воскресенье, 26.10.2014, 23:58
 
Ответить
СообщениеЯ тока учусь.
Пока еще не включил это выражение в код - это на очереди...
В следующий раз сначала попробую, а уже потом сюда...

[offtop] Рад, что повеселил

Автор - Railord
Дата добавления - 26.10.2014 в 23:57
AndreTM Дата: Понедельник, 27.10.2014, 04:17 | Сообщение № 18
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
Я тока учусь.
Когда проверяете код в VBE (например, остановив его исполнение на ошибке, по брейкпойнту, по Stop...) - смотрИте не только на код. Есть окно Locals, где вы можете оперативно наблюдать состояние переменных проекта, есть окно Immediate, где вы можете проверить любой кусочек кода, есть окно Watch, где вы можете отслеживать выражения... Вообще, Locals и Immediate при работе с проектом лучше вообще не закрывать, пусть они в VBE висят всё время... :)


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
Сообщение
Я тока учусь.
Когда проверяете код в VBE (например, остановив его исполнение на ошибке, по брейкпойнту, по Stop...) - смотрИте не только на код. Есть окно Locals, где вы можете оперативно наблюдать состояние переменных проекта, есть окно Immediate, где вы можете проверить любой кусочек кода, есть окно Watch, где вы можете отслеживать выражения... Вообще, Locals и Immediate при работе с проектом лучше вообще не закрывать, пусть они в VBE висят всё время... :)

Автор - AndreTM
Дата добавления - 27.10.2014 в 04:17
Rioran Дата: Понедельник, 27.10.2014, 11:44 | Сообщение № 19
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
Рекомендую к просмотру одну тему, где массивы рассматривались под крайне познавательными углами.

Самое вкусное начинается с этого сообщения.


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
СообщениеРекомендую к просмотру одну тему, где массивы рассматривались под крайне познавательными углами.

Самое вкусное начинается с этого сообщения.

Автор - Rioran
Дата добавления - 27.10.2014 в 11:44
Railord Дата: Понедельник, 27.10.2014, 21:41 | Сообщение № 20
Группа: Пользователи
Ранг: Новичок
Сообщений: 45
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Ветераны - благодарю за поддержку!
AndreTM, - не поверите, хотя нет - поверите... :( Ничем из того, что вы перечислили я не пользовался - надо исправляться...
Rioran, - тема к месту - однозначно поможет в изучении!


Nil novi sub luna, так что - век живи, век учись!)

Сообщение отредактировал Railord - Понедельник, 27.10.2014, 21:44
 
Ответить
СообщениеВетераны - благодарю за поддержку!
AndreTM, - не поверите, хотя нет - поверите... :( Ничем из того, что вы перечислили я не пользовался - надо исправляться...
Rioran, - тема к месту - однозначно поможет в изучении!

Автор - Railord
Дата добавления - 27.10.2014 в 21:41
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Хочу разобраться в массивах. Из песочницы... (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!