Я практиковался в VBA в течение одного месяца, и у меня возникла проблема. Я хочу создать массив из данных на листе с помощью этого цикла, но он не работает. У меня есть 6 рабочих листов, но он может получить только один рабочий лист в массив. Я думаю, что проблема в этом цикле - это DataArray, но я не могу ее решить.
Sub LoopByArray()
Dim ws As Worksheet
Dim LastRow As Long
Dim LastCol As Long
Dim DataArray() As Variant
Dim Sheetnum As String
Dim SheetNames()
Dim i As Long
SheetCount = ActiveWorkbook.Sheets.Count
ReDim SheetNames(1 To SheetCount)
For i = 1 To SheetCount
SheetNames(i) = ActiveWorkbook.Sheets(i).Name
Debug.Print SheetNames(i)
Sheetnum = i
Set ws = worksheets(SheetNames(i))
LastRow = ThisWorkbook.Sheets(SheetNames(i)).Range("A" & Rows.Count).End(xlUp).Row
Debug.Print LastRow
LastCol = ThisWorkbook.Sheets(SheetNames(i)).Cells(1, ThisWorkbook.Sheets(SheetNames(i)).Columns.Count).End(xlToLeft).Column
Debug.Print LastCol
ColLetter = GetColumnLetter(LastCol)
DataArray = ThisWorkbook.Sheets(SheetNames(i)).Range("A1" & ":" & ColLetter & LastRow).Value
Next i
End Sub
Function GetColumnLetter(colNum As Long) As String
Dim vArr
vArr = Split(Cells(1, colNum).Address(True, False), "$")
GetColumnLetter = vArr(0)
End Function
Вам нужен один массив, содержащий данные со всех листов? Как это должно быть организовано, если (например) разные листы имеют разное количество строк или столбцов?
Я думаю, что мне нужно создать больше массивов, чтобы получить другие рабочие листы, но я не знаю, как добавить их в этот цикл.
Можно ли создать цикл или другие функции для определения переменных массива на основе количества листов в VBA?
Что вы собираетесь делать с массивами?
Я пытаюсь получить данные и использовать vlookup в массиве, потому что думаю, что это будет быстрее, чем на листе.