コピー元ファイルのシートをコピー、コピー先ファイルにペースト
コピー元のファイル名を変数bに入れます。「Dir(ファイルパス)」を使います。変数b_pathの中身はパスなのでDir(b_path)と書くとファイル名だけを抜き出せます。
b = Dir(b_path)
2つのファイルが開いている状態では「Workbooks("ファイル名").Activate」で対象のファイルを選択します。ファイル名が入っている変数bを利用します。Workbooksにsを付けるのを忘れないでください。
変数を利用するときはファイル名に" "(ダブルクォーテーション)は不要です。
Workbooks(b).Activate
「Sheets("売上").Copy」で「売上」シートをコピーします。「コピー先」であるWorkbooks(a)の一番左側のシートになるように貼り付けます。これを「Before:=Workbooks(a).Sheets(1)」と表します。
Sheets(1)のシート名に" "(ダブルクォーテーション)がないことに注目してください。シート名の部分に名前ではなく数字が入ると、シートの名前ではなく順番を表します。Sheets(1)は「左から数えて1番目(=一番左)のシート」という意味です。その前(Before)は、一番左のシートのさらに左横に貼り付けなさいということです。
Sheets("売上").Copy Before:=Workbooks(a).Sheets(1)
コピー元ファイルを閉じる
コピー先ファイルを選びます(Activate)。
その後コピー元ファイルを閉じます(Close)。
Workbooks(a).Activate
Workbooks(b).Close
すべてつなげると、次のようになります。
Dim a ’コピー先ファイルの名前
Dim b_path ’コピー元ファイルのパス
Dim b ’コピー元ファイルの名前
a = ThisWorkbook.Name
b_path = Application.GetOpenFilename
If b_path = False Then
MsgBox "処理を中断しました"
Exit Sub
Else
Workbooks.Open b_path
End If
b = Dir(b_path)
Workbooks(b).Activate
Sheets("売上").Copy Before:=Workbooks(a).Sheets(1)
Workbooks(a).Activate
Workbooks(b).Close
完成させて動かしてみよう
「取込」という名前を付け、マクロを書きましょう。
ボタンにマクロを登録し、保存した後に押してみてください。ウィンドウで「コピー元.xlsx」を選ぶと「売上」シートがマクロがあるファイルの一番左にくれば成功です!
今後、他ファイルのシートを持ってくるときは、このマクロをコピー&ペーストしましょう。シート名を変更するだけで再利用できます。
1 ThisWorkbookやApplication、Activate、Copy、Closeなどの綴りが間違っている
2 メッセージやシート名「売上」が" "(ダブルクォーテーション)で囲まれていない
3 :(コロン)が;(セミコロン)になっている
4 変数bとb_pathが混ざってしまっている
5 End Ifが抜けている
(本稿は、寺澤伸洋著『4時間のエクセル仕事は20秒で終わる』を抜粋、再構成したものです)
寺澤伸洋(てらさわ・のぶひろ)
1976年、大阪府生まれ。灘高校、東京大学経済学部卒業後、日系メーカーで17年間勤務。経理や営業、マーケティング、経営企画などに携わり、独学で覚えたエクセルマクロを用いて様々な分析や業務改革を行う。2017年、GAFAの日本法人のうちの1社へシニアマネージャー(部長)として転職。これまでエクセルマクロを用いた業務改善などで数多くの社内表彰を受けている。手作業では不可能なほど大量のデータを、短時間で分析しやすく加工したことが評価され、社内エクセルマクロ講習会の講師として延べ200人以上に講座を実施。エクセルマクロについて1から10まで教える詰め込み型の学習ではなく、仕事に必要な部分だけを効率的に学べる講座として満足度98%の高い評価を受けている。