配列に格納されている値のうち条件にあうデータのみを一括でシートへ書き出す方法です。
この方法で使うデータ
- 英数字のみ
- 文字の先頭は「0」で始まらない
文字の先頭が「0」で始まる場合は、「Line Input」または「QueryTable」の方法があります。
【参考】 大量データのCSVファイルを読み込み後、2次元配列に連続で格納されてる値を一括でコピーしシートへ貼り付ける方法
目次
一括コピーの例
シートは3つです。
- 設定
- データ
- 出力
シート「設定」
書き出すデータの条件設定をするシートです。
セルA2以降に条件を入力します。条件はシート「データ」の1行目・2列目以降の値です。

シート「データ」
黄色のセルのデータを書き出します。
シート「設定」で条件指定したデータは、C列とE列です。

k200 をローカルウィンドウで見た場合

シート「出力」
条件に合ったデータを書き出します。

条件に存在しない値を設定した場合

存在しない値を飛ばして出力します。

サンプルコード
Sub sample()
Dim ws1 As Worksheet: Set ws1 = Worksheets("設定")
Dim ws2 As Worksheet: Set ws2 = Worksheets("データ")
Dim ws3 As Worksheet: Set ws3 = Worksheets("出力")
Dim joken As Variant: joken = ws1.Range("A1").CurrentRegion
Dim tmp As Variant: tmp = ws2.Range("A1").CurrentRegion
Dim out As Variant
ReDim out(LBound(tmp) To UBound(tmp)) As Variant
Dim i As Long, r As Long, c As Long, cnt As Long
For r = LBound(tmp) To UBound(tmp)
out(r) = tmp(r, 1)
Next r
With ws3
.Range(.Cells(1, 1), .Cells(UBound(tmp), 1)) = _
WorksheetFunction.Transpose(out)
End With
cnt = 2
For i = 2 To UBound(joken)
For c = 2 To UBound(tmp, 2)
If joken(cnt, 1) = tmp(1, c) Then
For r = LBound(tmp) To UBound(tmp)
out(r) = tmp(r, c)
Next r
With ws3
.Range(.Cells(1, cnt), .Cells(UBound(tmp), cnt)) = _
WorksheetFunction.Transpose(out)
End With
cnt = cnt + 1
Exit For
End If
Next c
Next i
MsgBox "終了"
End Sub
6行目の条件は1次元配列で格納する方法もあり。
Dim joken As Variant: joken = ws1.Range("A1").CurrentRegion
25行目はStrComp関数でも値を探すことができます。
If StrComp(tmp(1, c), joken(i, 1)) = 0 Then 処理 End If
