Вставить диапазон в массив
Это все, что вам нужно (без зацикливания).
Sub CIB_Cuts()
Dim varArray As Variant
With ThisWorkbook.Worksheets("Data")
varArray = .Range("A1:S2")
End With
Это двумерный горизонтальный массив на основе одного, т.е. он содержитбольше столбцов, чем строк.Поэтому, когда вы проходите через него, оно может выглядеть следующим образом:
For j = LBound(varArray, 2) to UBound(varArray, 2) ' more data
For i = LBound(varArray) to UBound(varArray)
x = varArray(i, j)
Next
Next
вместо классического «вертикального» циклического массива:
For i = LBound(varArray) to UBound(varArray) ' more data
For j = LBound(varArray, 2) to UBound(varArray, 2)
x = varArray(i, j)
Next
Next
Поэтому, если вы хотите просмотреть данные первой строки (теперь в первом столбце массива), вы должны сделать следующее:
For i = LBound(varArray) to UBound(varArray) ' more data
x = varArray(1, i)
Next
или для второй строки (теперь во втором столбце массива) вы должны сделать это:
For i = LBound(varArray) to UBound(varArray) ' more data
x = varArray(2, i)
Next
Полный код может выглядеть следующим образом:
Option Explicit
Sub CIBCutsPaste()
Dim varArray As Variant
With ThisWorkbook.Worksheets("Data")
varArray = .Range("A1:S2")
End With
' Print contents to Immediate Window
With ThisWorkbook.Worksheets("Data")
Dim str1 As String
Dim k As Integer
Dim x As Integer
For k = 1 To UBound(varArray) ' 2 Rows
For x = 1 To UBound(varArray, 2) ' 19 Columns
If x = 1 Then
str1 = str1 & vbCr & varArray(k, x)
Else
str1 = str1 & "," & varArray(k, x)
End If
Next
Next
Debug.Print str1
End With
End Sub
Если вы настаиваете на зацикливании, то есть копировании строк рабочего листа в столбцы массива, это может выглядеть так:
Sub CIBCutsLoop()
k As Long, x As Long
Dim varArray() As Variant
ReDim varArray(1 To 19, 1 To 2)
With ThisWorkbook.Worksheets("Data")
For k = 1 To UBound(varArray) ' 19 Rows
For x = 1 To UBound(varArray, 2) ' 2 Columns
varArray(k, x) = .Cells(x, k)
Next
Next
End With
' Print contents to Immediate Window
With ThisWorkbook.Worksheets("Data")
Dim str1 As String
For k = 1 To UBound(varArray) ' 19 Rows
For x = 1 To UBound(varArray, 2) ' 2 Columns
If x = 1 Then
str1 = str1 & vbCr & varArray(k, x)
Else
str1 = str1 & "," & varArray(k, x)
End If
Next
Next
Debug.Print str1
End With
End Sub