マスタから決まった項目だけコピーしたいことってありますよね。
そんな時使えます。
目次
実際に書いてみた
Option Explicit
Sub test()
Dim 項目
Dim Rng As Range
Dim n As Long
Dim Maxrow As Long
'抽出したい項目を配列に入れる
項目 = Range("A1:E1")
'2番目の次元の添え字の最大値で回す
For n = 1 To UBound(項目, 2)
'findで位置を確認
Set Rng = Sheets("データ").Range("1:1").Find(What:=項目(1, n))
If Rng Is Nothing Then
MsgBox "項目が見つかりません"
Exit Sub
End If
'最終行を取得
Maxrow = Sheets("データ").Cells(Rows.Count, Rng.Column).End(xlUp).Row
'コピペする
Sheets("データ").Cells(Rng.Row, Rng.Column).Resize(Maxrow).Copy Destination:=Sheets("貼り付け先").Cells(1, n)
Next n
End Sub
解説的なもの
めちゃくちゃシンプルなコードです。
項目 = Range(“A1:E1”)
項目という配列に欲しいデータの項目名いれます。
別にRange(“A1:A10”)とかでもいいですし、レンジのなかは何でもいいです。
For n = 1 To UBound(項目, 2)
Uboundは次元の添え字の最大値を返します。
今回は項目という配列の最大値を出すのですが、となりに2とありますよね。
これは次元の番号です。
2なので2次元です。
横に見てくってことですね。
縦に見たい時は1か、なんにもなしでOKです。
findはそのまんま
findでほしい項目の位置を割り出しています。
setを忘れがちです。
コピーする
Sheets(“データ”).Cells(Rng.Row, Rng.Column).Resize(Maxrow).Copy Destination:=Sheets(“貼り付け先”).Cells(1, n)
.Cells(Rng.Row, Rng.Column)これはRngと全く同じものです。
RngがA1ならこの項目もA1です。
コピーを使うのに、変数だとエラーが出るのでこういうまどろっこしい書き方にしました。
おわり
これでほしい項目だけくりぬいてコピペできます。
[temp id=2]
コメント