Всем привет. Я тут с массивами пытаюсь тут разобраться. Задача у меня такая, по первой левой колонке идут у меня города. По верхней строке идут Месяца (их 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]Исправляйте название темы Исправленол
Всем привет. Я тут с массивами пытаюсь тут разобраться. Задача у меня такая, по первой левой колонке идут у меня города. По верхней строке идут Месяца (их 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
Да,я понял что она смещает по координатам изначальную ячейку. Я попробовал поиграться с этой штукой и что-то у меня ничего путного не вышло.
Еще я попробовал поиграться с двумерными массивами и поправил свой первоначальный код. В итоге массив заполняется, но опустошается после окончания цикла. Я снова прикрепляю файл, первая кнопка на листе, это вот мой код. Msgbox пуст. Хотя если его ставлю в цикле то значения есть...
Да,я понял что она смещает по координатам изначальную ячейку. Я попробовал поиграться с этой штукой и что-то у меня ничего путного не вышло.
Еще я попробовал поиграться с двумерными массивами и поправил свой первоначальный код. В итоге массив заполняется, но опустошается после окончания цикла. Я снова прикрепляю файл, первая кнопка на листе, это вот мой код. Msgbox пуст. Хотя если его ставлю в цикле то значения есть...
[/vba] очищает массив, и безумно тормозит процесс на больших массивах лучше сразу задайте заведомо больший массив iArray (1 to 100, 1 to 100) в фор доп переменную которая счетает количество строк и столбцев, ее уже использовать как граница для вывода данных из массива в вашем случае уже есть NumMass1, NumMass2,
[vba]
Код
ReDim Preserve
[/vba] можно использовать но я стараюсь без нее, тоже черевата еще большими тормазами
[vba]
Код
ReDim iArray(1 To NumMass1, 1 To NumMass2)
[/vba] очищает массив, и безумно тормозит процесс на больших массивах лучше сразу задайте заведомо больший массив iArray (1 to 100, 1 to 100) в фор доп переменную которая счетает количество строк и столбцев, ее уже использовать как граница для вывода данных из массива в вашем случае уже есть NumMass1, NumMass2,
[vba]
Код
ReDim Preserve
[/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
Это пример, в котором я просто разбираю что такое двумерные массивы. А если смотреть с точки зрения реальной ситуации, ну 12 месяцев - тут ок. Массив можно ограничить. А вот кол-во городов, я могу не знать. Но тут можно их посчитать К примеру через [vba]
Это пример, в котором я просто разбираю что такое двумерные массивы. А если смотреть с точки зрения реальной ситуации, ну 12 месяцев - тут ок. Массив можно ограничить. А вот кол-во городов, я могу не знать. Но тут можно их посчитать К примеру через [vba]
Можете. Просто найдите номер последней заполненной ячейки снизу (с учетом того, что все лишнее из файла убрано. Вообще-то, способов море. в итоге вот так можно [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
Можете. Просто найдите номер последней заполненной ячейки снизу (с учетом того, что все лишнее из файла убрано. Вообще-то, способов море. в итоге вот так можно [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_
_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]
_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