エクセル2007 VBA シート内のデータを項目名で検索し、その列を新
エクセル2007 VBA シート内のデータを項目名で検索し、その列を新規シートにコピーする方法についてです。
VBAについては初心者で、グーグルで調べながら作ったのですが、コピー後のペーストが上手く出来ません。どうすれば最後まで処理できるのかを教えて下さい。
それと、全体的に書き方がおかしいところがありましたら指摘・改善方法を教えて下さい。
よろしくお願いします。
Sub 配列並べ替え()
Dim myArray As Variant '1項目名希望順配列格納
Dim strArray As Variant '2検索用1の配列格納
Dim LastCol1 As Long '3最終列数格納
Dim LastCol2 As Long '4新規シートの最終列数格納
Dim DefSheetname As Variant '5初期のシート名取得
Dim i As Long
Dim j As Long
'初期シート名を取得。
DefSheetname = ActiveSheet.Name
'初期シートの最終列数取得。
LastCol1 = Worksheets(DefSheetname).Range("A1").End(xlToRight).Column
'シート名:レポートの新規シート追加。
Worksheets.Add.Name = "レポート"
'初期シートを選択。
Worksheets(DefSheetname).Select
'項目名希望順配列格納。
myArray = Array("得意先C", "取引先名1", "製番", "相手管理NO", "品目C", _
"製品名1", "受注数", "受注残数", "納期", "受注単価", _
"受注金額", "出荷数", "出荷金額", "出荷先名1", "郵便番号", "住所1", "TEL", "FAX")
'配列要素数分繰り返し処理。
For i = LBound(myArray) To UBound(myArray)
'検索用の配列(項目名)格納。
strArray = myArray(i)
'A1:LastCol1範囲で配列(項目名)検索し、番号で返す。
j = WorksheetFunction.Match(strArray, Worksheets(DefSheetname).Range(Cells(1, 1), Cells(1, LastCol1)), 0)
'シート名:レポートに変数jの列数目の値を入力。
Columns(j).Copy
'シート名:レポートの最終列数取得。
LastCol2 = Worksheets("レポート").Range("A1").End(xlToRight).Column
'シート名:レポートを選択。
Worksheets("レポート").Select
Range(Cells(1, 1), Cells(1, "LastCol2")).Past
Next i
End Sub
お礼
KenKen_SPさんへ ありがとうございました。お陰さまで肝心な所が出来上がりました。 複数と複数などと考えていましたが、ひとつずつ順次比較すればよかったのですね。また、ブックとシートの変数もスタートとデストネーションで分かり易くつけて頂き助かりました。 更に、shDst.Move Before:=wbDst.Sheets(wbSrc.Sheets(shDst.Name).Index) まで教えて頂きました。 後は、実際のものに組み入れてみます。ありがとうございます。 またよろしくお願いします。