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

Вход

Регистрация

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

 

= Мир MS Excel/создать двумерный массив - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » создать двумерный массив (Макросы/Sub)
создать двумерный массив
lopuxi Дата: Вторник, 05.04.2016, 10:25 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 110
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007, 2013
Всем привет. Я тут с массивами пытаюсь тут разобраться.
Задача у меня такая, по первой левой колонке идут у меня города. По верхней строке идут Месяца (их 12).
А между городами и месяцами данные, которые мне нужно занести в массив. Получается некая матрица.

И я бы хотел создать массив данных который бы в себе содержал
Город (данные: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 и т.д.) - так как месяцев 12 то самих данных тоже 12 + город = 13.
Город (данные: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 и т.д.)
Город (данные: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 и т.д.)

Как мне создать такой массив. Я вот скину пример, который не решил данную проблему...
[moder]Исправляйте название темы
Исправленол
К сообщению приложен файл: __.xlsm(22Kb)


О_о ...и так можно было?

Сообщение отредактировал lopuxi - Вторник, 05.04.2016, 10:31
 
Ответить
СообщениеВсем привет. Я тут с массивами пытаюсь тут разобраться.
Задача у меня такая, по первой левой колонке идут у меня города. По верхней строке идут Месяца (их 12).
А между городами и месяцами данные, которые мне нужно занести в массив. Получается некая матрица.

И я бы хотел создать массив данных который бы в себе содержал
Город (данные: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 и т.д.) - так как месяцев 12 то самих данных тоже 12 + город = 13.
Город (данные: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 и т.д.)
Город (данные: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 и т.д.)

Как мне создать такой массив. Я вот скину пример, который не решил данную проблему...
[moder]Исправляйте название темы
Исправленол

Автор - lopuxi
Дата добавления - 05.04.2016 в 10:25
_Boroda_ Дата: Вторник, 05.04.2016, 10:34 | Сообщение № 2
Группа: Модераторы
Ранг: Экселист
Сообщений: 9381
Репутация: 3951 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Можно сразу (массив ar), можно циклом по ячейкам (массив ar1)
[vba]
Код
Sub tt()
    ar = Range("B3:N5")

    Dim ar1
    a = 3
    b = 13
    ReDim ar1(1 To a, 1 To b)
    For i = 1 To a
        For j = 1 To b
            ar1(i, j) = Range("A2").Offset(i, j)
        Next j
    Next i
End Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеМожно сразу (массив ar), можно циклом по ячейкам (массив ar1)
[vba]
Код
Sub tt()
    ar = Range("B3:N5")

    Dim ar1
    a = 3
    b = 13
    ReDim ar1(1 To a, 1 To b)
    For i = 1 To a
        For j = 1 To b
            ar1(i, j) = Range("A2").Offset(i, j)
        Next j
    Next i
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 05.04.2016 в 10:34
lopuxi Дата: Вторник, 05.04.2016, 11:12 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 110
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007, 2013
Ага.
Спасибо!
Кажется я понял как все должно работать )

Только я не очень понял про offset, заменил на
[vba]
Код
ar1(i, j) = Cells(i + 2, j + 1).Value
[/vba]

суть осталась та же, все тоже работает


О_о ...и так можно было?

Сообщение отредактировал lopuxi - Вторник, 05.04.2016, 11:12
 
Ответить
СообщениеАга.
Спасибо!
Кажется я понял как все должно работать )

Только я не очень понял про offset, заменил на
[vba]
Код
ar1(i, j) = Cells(i + 2, j + 1).Value
[/vba]

суть осталась та же, все тоже работает

Автор - lopuxi
Дата добавления - 05.04.2016 в 11:12
_Boroda_ Дата: Вторник, 05.04.2016, 11:17 | Сообщение № 4
Группа: Модераторы
Ранг: Экселист
Сообщений: 9381
Репутация: 3951 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
я не очень понял про offset

Смещение от А2 на i вниз и на j вправо


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
я не очень понял про offset

Смещение от А2 на i вниз и на j вправо

Автор - _Boroda_
Дата добавления - 05.04.2016 в 11:17
lopuxi Дата: Вторник, 05.04.2016, 12:10 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 110
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007, 2013
Смещение от А2 на i вниз и на j вправо


Да,я понял что она смещает по координатам изначальную ячейку. Я попробовал поиграться с этой штукой и что-то у меня ничего путного не вышло.

Еще я попробовал поиграться с двумерными массивами и поправил свой первоначальный код. В итоге массив заполняется, но опустошается после окончания цикла.
Я снова прикрепляю файл, первая кнопка на листе, это вот мой код. Msgbox пуст. Хотя если его ставлю в цикле то значения есть...

Почему так?
К сообщению приложен файл: 2133756.xlsm(26Kb)


О_о ...и так можно было?
 
Ответить
Сообщение
Смещение от А2 на i вниз и на j вправо


Да,я понял что она смещает по координатам изначальную ячейку. Я попробовал поиграться с этой штукой и что-то у меня ничего путного не вышло.

Еще я попробовал поиграться с двумерными массивами и поправил свой первоначальный код. В итоге массив заполняется, но опустошается после окончания цикла.
Я снова прикрепляю файл, первая кнопка на листе, это вот мой код. Msgbox пуст. Хотя если его ставлю в цикле то значения есть...

Почему так?

Автор - lopuxi
Дата добавления - 05.04.2016 в 12:10
Roman777 Дата: Вторник, 05.04.2016, 12:40 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 703
Репутация: 75 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
lopuxi, зачем же Вы в цикле на каждом шаге определяете заного массив :
[vba]
Код
ReDim iArray(1 To NumMass1, 1 To NumMass2)
[/vba]
вы, получается, записываете данные и на следующем шаге их стираете. Если хотите не стирать нужно использовать
[vba]
Код
ReDim Preserve iArray(1 To NumMass1, 1 To NumMass2)
[/vba]
Но в вашем случае просто нужно строку
[vba]
Код
ReDim iArray(1 To NumMass1, 1 To NumMass2)
[/vba]
вынести вверх до цикла.


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Вторник, 05.04.2016, 12:40
 
Ответить
Сообщениеlopuxi, зачем же Вы в цикле на каждом шаге определяете заного массив :
[vba]
Код
ReDim iArray(1 To NumMass1, 1 To NumMass2)
[/vba]
вы, получается, записываете данные и на следующем шаге их стираете. Если хотите не стирать нужно использовать
[vba]
Код
ReDim Preserve iArray(1 To NumMass1, 1 To NumMass2)
[/vba]
Но в вашем случае просто нужно строку
[vba]
Код
ReDim iArray(1 To NumMass1, 1 To NumMass2)
[/vba]
вынести вверх до цикла.

Автор - Roman777
Дата добавления - 05.04.2016 в 12:40
Волхв Дата: Вторник, 05.04.2016, 12:41 | Сообщение № 7
Группа: Заблокированные
Ранг: Участник
Сообщений: 70
Репутация: 3 ±
Замечаний: 100% ±

Excel 2010
Переменные попробуйте объявить
[vba]
Код
Dim NumMass1, NumMass2, j, i, iArray
[/vba]


Плодить темы - это вообще-то предназначение форума ©Serge_007 админа
 
Ответить
СообщениеПеременные попробуйте объявить
[vba]
Код
Dim NumMass1, NumMass2, j, i, iArray
[/vba]

Автор - Волхв
Дата добавления - 05.04.2016 в 12:41
lopuxi Дата: Вторник, 05.04.2016, 12:49 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 110
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007, 2013
зачем же Вы в цикле на каждом шаге определяете заного массив :


А как же иначе, если размер цикла я определяю внутри цикла? Если к примеру я не знаю точных границ его, я как бы исхожу из этой логики.


О_о ...и так можно было?
 
Ответить
Сообщение
зачем же Вы в цикле на каждом шаге определяете заного массив :


А как же иначе, если размер цикла я определяю внутри цикла? Если к примеру я не знаю точных границ его, я как бы исхожу из этой логики.

Автор - lopuxi
Дата добавления - 05.04.2016 в 12:49
Волхв Дата: Вторник, 05.04.2016, 12:49 | Сообщение № 9
Группа: Заблокированные
Ранг: Участник
Сообщений: 70
Репутация: 3 ±
Замечаний: 100% ±

Excel 2010
[vba]
Код
ReDim iArray(1 To NumMass1, 1 To NumMass2)
[/vba]
очищает массив, и безумно тормозит процесс на больших массивах
лучше сразу задайте заведомо больший массив iArray (1 to 100, 1 to 100)
в фор доп переменную которая счетает количество строк и столбцев, ее уже использовать как граница для вывода данных из массива
в вашем случае уже есть NumMass1, NumMass2,

[vba]
Код
ReDim Preserve
[/vba]
можно использовать но я стараюсь без нее, тоже черевата еще большими тормазами


Плодить темы - это вообще-то предназначение форума ©Serge_007 админа

Сообщение отредактировал Волхв - Вторник, 05.04.2016, 12:56
 
Ответить
Сообщение[vba]
Код
ReDim iArray(1 To NumMass1, 1 To NumMass2)
[/vba]
очищает массив, и безумно тормозит процесс на больших массивах
лучше сразу задайте заведомо больший массив iArray (1 to 100, 1 to 100)
в фор доп переменную которая счетает количество строк и столбцев, ее уже использовать как граница для вывода данных из массива
в вашем случае уже есть NumMass1, NumMass2,

[vba]
Код
ReDim Preserve
[/vba]
можно использовать но я стараюсь без нее, тоже черевата еще большими тормазами

Автор - Волхв
Дата добавления - 05.04.2016 в 12:49
Волхв Дата: Вторник, 05.04.2016, 12:51 | Сообщение № 10
Группа: Заблокированные
Ранг: Участник
Сообщений: 70
Репутация: 3 ±
Замечаний: 100% ±

Excel 2010
вот пример, убрал вообще ваш редим
[vba]
Код
Private Sub CommandButton1_Click()
Dim NumMass1, NumMass2, j, i, iArray(1 To 100, 1 To 100)

NumMass1 = 1
NumMass2 = 1
For j = 3 To 5 ' строка
    For i = 3 To 26 Step 2 ' колонка
'        ReDim iArray(1 To NumMass1, 1 To NumMass2)
        iArray(NumMass1, NumMass2) = Cells(j, i).Value
        'MsgBox iArray(NumMass1, NumMass2)
        NumMass2 = NumMass2 + 1
    Next
    NumMass1 = NumMass1 + 1
Next

For i = 1 To 10
    MsgBox iArray(1, i)
Next
End Sub
[/vba]


Плодить темы - это вообще-то предназначение форума ©Serge_007 админа
 
Ответить
Сообщениевот пример, убрал вообще ваш редим
[vba]
Код
Private Sub CommandButton1_Click()
Dim NumMass1, NumMass2, j, i, iArray(1 To 100, 1 To 100)

NumMass1 = 1
NumMass2 = 1
For j = 3 To 5 ' строка
    For i = 3 To 26 Step 2 ' колонка
'        ReDim iArray(1 To NumMass1, 1 To NumMass2)
        iArray(NumMass1, NumMass2) = Cells(j, i).Value
        'MsgBox iArray(NumMass1, NumMass2)
        NumMass2 = NumMass2 + 1
    Next
    NumMass1 = NumMass1 + 1
Next

For i = 1 To 10
    MsgBox iArray(1, i)
Next
End Sub
[/vba]

Автор - Волхв
Дата добавления - 05.04.2016 в 12:51
Roman777 Дата: Вторник, 05.04.2016, 12:57 | Сообщение № 11
Группа: Проверенные
Ранг: Ветеран
Сообщений: 703
Репутация: 75 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Да... тоже подумал что лучше вот так:
[vba]
Код
Private Sub CommandButton1_Click()
Dim st&
NumMass1 = 3
st = 2
NumMass2 = 24 / st
ReDim iArray(1 To NumMass1, 1 To NumMass2)
For j = 3 To 5 ' строка
    For i = 3 To 26 Step st ' колонка
        iArray(j - 2, (i - 1) / st) = Cells(j, i).Value
        'MsgBox iArray(NumMass1, NumMass2)
        NumMass2 = NumMass2 + 1
    Next
    NumMass1 = NumMass1 + 1
Next

For i = 1 To UBound(iArray, 2)
    MsgBox iArray(1, i)
Next
End Sub
[/vba]


Много чего не знаю!!!!
 
Ответить
СообщениеДа... тоже подумал что лучше вот так:
[vba]
Код
Private Sub CommandButton1_Click()
Dim st&
NumMass1 = 3
st = 2
NumMass2 = 24 / st
ReDim iArray(1 To NumMass1, 1 To NumMass2)
For j = 3 To 5 ' строка
    For i = 3 To 26 Step st ' колонка
        iArray(j - 2, (i - 1) / st) = Cells(j, i).Value
        'MsgBox iArray(NumMass1, NumMass2)
        NumMass2 = NumMass2 + 1
    Next
    NumMass1 = NumMass1 + 1
Next

For i = 1 To UBound(iArray, 2)
    MsgBox iArray(1, i)
Next
End Sub
[/vba]

Автор - Roman777
Дата добавления - 05.04.2016 в 12:57
_Boroda_ Дата: Вторник, 05.04.2016, 12:59 | Сообщение № 12
Группа: Модераторы
Ранг: Экселист
Сообщений: 9381
Репутация: 3951 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
я не знаю точных границ его

Как не знаете, если Вы написали у себя в коде
[vba]
Код
For j = 3 To 5 ' строка
    For i = 3 To 26 Step 2 ' колонка
[/vba]
Размер массива получается 5-3+1=3 на (26-3+1)/2=13


Roman777, ничего не перепутали вот здесь?
iArray(j - 2, (i - 1) / st) = Cells(j, i).Value


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
я не знаю точных границ его

Как не знаете, если Вы написали у себя в коде
[vba]
Код
For j = 3 To 5 ' строка
    For i = 3 To 26 Step 2 ' колонка
[/vba]
Размер массива получается 5-3+1=3 на (26-3+1)/2=13


Roman777, ничего не перепутали вот здесь?
iArray(j - 2, (i - 1) / st) = Cells(j, i).Value

Автор - _Boroda_
Дата добавления - 05.04.2016 в 12:59
lopuxi Дата: Вторник, 05.04.2016, 13:03 | Сообщение № 13
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 110
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007, 2013
Как не знаете, если Вы написали у себя в коде


Это пример, в котором я просто разбираю что такое двумерные массивы.
А если смотреть с точки зрения реальной ситуации, ну 12 месяцев - тут ок. Массив можно ограничить.
А вот кол-во городов, я могу не знать.
Но тут можно их посчитать
К примеру через
[vba]
Код

While cells(NumRow, 1).value <> ""
NumRow = NumRow + 1
Wend
[/vba]

и уже после задать размер массив. Так будет правильнее?


О_о ...и так можно было?
 
Ответить
Сообщение
Как не знаете, если Вы написали у себя в коде


Это пример, в котором я просто разбираю что такое двумерные массивы.
А если смотреть с точки зрения реальной ситуации, ну 12 месяцев - тут ок. Массив можно ограничить.
А вот кол-во городов, я могу не знать.
Но тут можно их посчитать
К примеру через
[vba]
Код

While cells(NumRow, 1).value <> ""
NumRow = NumRow + 1
Wend
[/vba]

и уже после задать размер массив. Так будет правильнее?

Автор - lopuxi
Дата добавления - 05.04.2016 в 13:03
Волхв Дата: Вторник, 05.04.2016, 13:03 | Сообщение № 14
Группа: Заблокированные
Ранг: Участник
Сообщений: 70
Репутация: 3 ±
Замечаний: 100% ±

Excel 2010
нашел ошибку логическую
NumMass2 счет идет сквозной, его нужно сбрасывать

[vba]
Код
Private Sub CommandButton1_Click()
Dim NumMass1, NumMass2, j, i, iArray(1 To 100, 1 To 100)

NumMass1 = 1
NumMass2 = 1
For j = 3 To 5 ' строка
NumMass2 = 1
    For i = 3 To 26 Step 2 ' колонка
'        ReDim iArray(1 To NumMass1, 1 To NumMass2)
        iArray(NumMass1, NumMass2) = Cells(j, i).Value
        'MsgBox iArray(NumMass1, NumMass2)
        NumMass2 = NumMass2 + 1
    Next
    NumMass1 = NumMass1 + 1
Next

For i = 1 To 10
    MsgBox iArray(1, i)
Next
End Sub
[/vba]

NumMass2
у автора 13 почему то, по логике 12 должно быть, где то в моём варианте это надо учесть, при необходимости


Плодить темы - это вообще-то предназначение форума ©Serge_007 админа

Сообщение отредактировал Волхв - Вторник, 05.04.2016, 13:10
 
Ответить
Сообщениенашел ошибку логическую
NumMass2 счет идет сквозной, его нужно сбрасывать

[vba]
Код
Private Sub CommandButton1_Click()
Dim NumMass1, NumMass2, j, i, iArray(1 To 100, 1 To 100)

NumMass1 = 1
NumMass2 = 1
For j = 3 To 5 ' строка
NumMass2 = 1
    For i = 3 To 26 Step 2 ' колонка
'        ReDim iArray(1 To NumMass1, 1 To NumMass2)
        iArray(NumMass1, NumMass2) = Cells(j, i).Value
        'MsgBox iArray(NumMass1, NumMass2)
        NumMass2 = NumMass2 + 1
    Next
    NumMass1 = NumMass1 + 1
Next

For i = 1 To 10
    MsgBox iArray(1, i)
Next
End Sub
[/vba]

NumMass2
у автора 13 почему то, по логике 12 должно быть, где то в моём варианте это надо учесть, при необходимости

Автор - Волхв
Дата добавления - 05.04.2016 в 13:03
lopuxi Дата: Вторник, 05.04.2016, 13:15 | Сообщение № 15
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 110
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007, 2013
Как вариант правильно будет сделать так?

[vba]
Код

Private Sub CommandButton1_Click()

' Определяем кол-во строк для массива
NumRow = 3
While Cells(NumRow, 2).Value <> ""
    NumRow = NumRow + 1
Wend
MsgBox NumRow - 3
NumMass1 = 1
ReDim iArray(1 To NumRow - 3, 1 To 13)
For j = 3 To 5 ' строка
    NumMass2 = 1
    For i = 3 To 26 Step 2 ' колонка
        iArray(NumMass1, NumMass2) = Cells(j, i).Value
        'MsgBox iArray(NumMass1, NumMass2) & " # " & NumMass2
        NumMass2 = NumMass2 + 1
    Next
    NumMass1 = NumMass1 + 1
Next

For i = 1 To 10
    MsgBox iArray(1, i)
Next
End Sub
[/vba]


О_о ...и так можно было?
 
Ответить
СообщениеКак вариант правильно будет сделать так?

[vba]
Код

Private Sub CommandButton1_Click()

' Определяем кол-во строк для массива
NumRow = 3
While Cells(NumRow, 2).Value <> ""
    NumRow = NumRow + 1
Wend
MsgBox NumRow - 3
NumMass1 = 1
ReDim iArray(1 To NumRow - 3, 1 To 13)
For j = 3 To 5 ' строка
    NumMass2 = 1
    For i = 3 To 26 Step 2 ' колонка
        iArray(NumMass1, NumMass2) = Cells(j, i).Value
        'MsgBox iArray(NumMass1, NumMass2) & " # " & NumMass2
        NumMass2 = NumMass2 + 1
    Next
    NumMass1 = NumMass1 + 1
Next

For i = 1 To 10
    MsgBox iArray(1, i)
Next
End Sub
[/vba]

Автор - lopuxi
Дата добавления - 05.04.2016 в 13:15
_Boroda_ Дата: Вторник, 05.04.2016, 13:34 | Сообщение № 16
Группа: Модераторы
Ранг: Экселист
Сообщений: 9381
Репутация: 3951 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
А вот кол-во городов, я могу не знать.
Можете. Просто найдите номер последней заполненной ячейки снизу (с учетом того, что все лишнее из файла убрано. Вообще-то, способов море.
в итоге вот так можно
[vba]
Код
Option Base 1
Private Sub CommandButton1_Click()
    Dim ar
    r1_ = Range("B" & Rows.Count).End(xlUp).Row
    c1_ = Cells(2, Columns.Count).End(xlToLeft).Column + 1
    r0_ = 3
    c0_ = 3
    ReDim ar(r1_ - r0_ + 1, (c1_ - c0_ + 1) / 2)
    For i = r0_ To r1_
        For j = c0_ To c1_ Step 2
            ar(i - r0_ + 1, (j - c0_) / 2 + 1) = Cells(i, j)
        Next j
    Next i
    For i = 1 To 10
        MsgBox ar(1, i)
    Next
End Sub
[/vba]
Обратите внимание на первую строку Option Base 1 - она задает номер первого элемента массива (по умолчанию он = 0)
И вообще - почитайте вот здесь все 3 части про массивы
http://www.on-line-teaching.com/vba/lsn0119.html
К сообщению приложен файл: 48791.xlsm(22Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
А вот кол-во городов, я могу не знать.
Можете. Просто найдите номер последней заполненной ячейки снизу (с учетом того, что все лишнее из файла убрано. Вообще-то, способов море.
в итоге вот так можно
[vba]
Код
Option Base 1
Private Sub CommandButton1_Click()
    Dim ar
    r1_ = Range("B" & Rows.Count).End(xlUp).Row
    c1_ = Cells(2, Columns.Count).End(xlToLeft).Column + 1
    r0_ = 3
    c0_ = 3
    ReDim ar(r1_ - r0_ + 1, (c1_ - c0_ + 1) / 2)
    For i = r0_ To r1_
        For j = c0_ To c1_ Step 2
            ar(i - r0_ + 1, (j - c0_) / 2 + 1) = Cells(i, j)
        Next j
    Next i
    For i = 1 To 10
        MsgBox ar(1, i)
    Next
End Sub
[/vba]
Обратите внимание на первую строку Option Base 1 - она задает номер первого элемента массива (по умолчанию он = 0)
И вообще - почитайте вот здесь все 3 части про массивы
http://www.on-line-teaching.com/vba/lsn0119.html

Автор - _Boroda_
Дата добавления - 05.04.2016 в 13:34
Roman777 Дата: Вторник, 05.04.2016, 15:24 | Сообщение № 17
Группа: Проверенные
Ранг: Ветеран
Сообщений: 703
Репутация: 75 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
_Boroda_, спасибо что заметили, действительно, обычной арифмитической прогрессии не увидел сразу =). С количеством то у меня всё норм (просто нулевые элементы массива не использу, так привык).
Такое хотел воткнуть в 11 сообщение, немного нерассмотрел =(
[vba]
Код
Private Sub CommandButton1_Click()
Dim st&
NumMass1 = 3
st = 2
NumMass2 = 24 / st
ReDim iArray(1 To NumMass1, 1 To NumMass2)
For j = 3 To 5 ' строка
    For i = 3 To 26 Step st ' колонка
        iArray(j - 2, (i - 3) / st + 1) = Cells(j, i).Value
    Next
Next

For i = 1 To UBound(iArray, 2)
    MsgBox iArray(1, i)
Next
End Sub
[/vba]


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Вторник, 05.04.2016, 15:26
 
Ответить
Сообщение_Boroda_, спасибо что заметили, действительно, обычной арифмитической прогрессии не увидел сразу =). С количеством то у меня всё норм (просто нулевые элементы массива не использу, так привык).
Такое хотел воткнуть в 11 сообщение, немного нерассмотрел =(
[vba]
Код
Private Sub CommandButton1_Click()
Dim st&
NumMass1 = 3
st = 2
NumMass2 = 24 / st
ReDim iArray(1 To NumMass1, 1 To NumMass2)
For j = 3 To 5 ' строка
    For i = 3 To 26 Step st ' колонка
        iArray(j - 2, (i - 3) / st + 1) = Cells(j, i).Value
    Next
Next

For i = 1 To UBound(iArray, 2)
    MsgBox iArray(1, i)
Next
End Sub
[/vba]

Автор - Roman777
Дата добавления - 05.04.2016 в 15:24
Мир MS Excel » Вопросы и решения » Вопросы по VBA » создать двумерный массив (Макросы/Sub)
Страница 1 из 11
Поиск:

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