Мой макрос проходит через диапазон, обводя столбцами, находит, где числовые данные начинаются в каждом столбце и сохраняет диапазоны в массиве с зубцами (вариант «матрица» в коде).VBA Jagged Array to Range
После этого я хотел бы вернуть всю матрицу в диапазон в другом листе. Если я попытаюсь назначить «matrix (1)» в диапазон, где я хочу, чтобы он был помещен, он работает нормально, но если я попытаюсь присвоить всю «матрицу» диапазону, я получу пустые ячейки.
Как я могу вернуть все значения в «матрице» в диапазон сразу, без использования петель?
Это исходные данные, с помощью которых код петли:
Я хотел бы, чтобы все ряды «матрицы» будут возвращены, как это:
Вот мой код :
Sub MyMatrix()
Dim wb1 As Workbook
Set wb1 = ActiveWorkbook
Dim wsNSA As Worksheet
Set wsNSA = wb1.Worksheets("NSA")
Dim wsSA As Worksheet
Set wsSA = wb1.Worksheets("SA")
Dim col As Range
Dim matrix() As Variant
'LR is the Last row and LC is the last column with data
LR = wsNSA.Cells(1, 1).End(xlDown).Row
LC = wsNSA.Cells(LR, 1).End(xlToRight).Column
'Loops through columns and finds the row where numeric data begins
For Each col In wsNSA.Range(wsNSA.Cells(1, 2), wsNSA.Cells(LR, LC)).Columns
wsNSA.Activate
nsa = wsNSA.Range(wsNSA.Cells(1, col.Column), wsNSA.Cells(LR, col.Column))
num_linha = Application.Match(True, Application.Index(Application.IsNumber(nsa), 0), 0)
nsa = wsNSA.Range(wsNSA.Cells(num_linha, col.Column), wsNSA.Cells(LR, col.Column))
'The range starts in the column B in the worksheet, so the matrix ubound is 'col.column -1
ReDim Preserve matrix(1 To col.Column - 1)
matrix(col.Column - 1) = nsa
Next
wsSA.Range(wsSA.Cells(3, 2), wsSA.Cells(LR, LC)) = matrix
End Sub
Если неровные, лучший подход может быть Переберите строки, назначая каждую строку к диапазон в одном заявлении. –
Вы * делаете * что-нибудь с 'matrix', кроме использования его в качестве промежуточного хранилища для значений? Если нет, то выражение 'ReDim Preserve' почти наверняка дороже, чем просто сброс каждой строки в' wsSA' в вашем цикле. –
Как вы хотите, чтобы результат отображался, когда он возвращается? Вы хотите, чтобы первый числовой элемент в каждом столбце источника помещался в строку 3 адресата, или вы хотите, чтобы каждая строка исходной информации возвращалась в виде строки в месте назначения (но с указанием ведущих нечисловых ячеек, которые были пустыми)? Возможно, обновите свой вопрос, чтобы включить дамп экрана исходных данных и ожидаемый результат. – YowE3K