マクロは列でループし、数値データが各列から始まり、範囲をぎざぎざとした配列(コードの「行列」バリアント)に格納する範囲を見つけます。VBAギザードアレイを範囲に設定
その後、私は別のワークシートの範囲に行列全体を返したいと思います。私はそれが置かれたい範囲に "行列(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