マクロを使って指定したフォルダの表をコピーしてみたくなったので、
マクロを使って指定したフォルダの表をコピーしてみました。
VBAでやりたいこと
・指定したフォルダの指定したシートを開く
・指定した表全体をコピーする
・コピーした表を指定した別フォルダのシートに張り付ける
状況設定
場所 C:\work\vba
inフォルダ:読み取りたいエクセルファイル(data1.xlsx)があるフォルダ
outフォルダ:書き込みたいエクセルファイル(out.xlsx)があるフォルダ
test.xlsm:マクロを作るエクセルファイル
読み込みたい表(data1.xlsx)
事前準備
マクロファイルを作成
エクセルファイルを新規作成し、こんな感じのものを用意。
・適当な図形
・F4の位置に入力フォルダのパス
・F7の位置に出力フォルダのパス
拡張子xlsmで、名前を付けて保存します。(test.xlsm)
VBAの起動、有効化
Alt + F11 でVBA編集画面が開きます。
挿入→標準モジュールを選択すると、コード記入画面が表示されます。
今回はtestと名付けたマクロを作成しました。
中身からっぽでいいので、画像のように関数の宣言だけして保存。sheet1に戻ります。
次に、
先ほど作成した図形を右クリック
→『マクロを登録』を選択
→マクロ名で先ほど作成した『test』を選択
→OKを押す
これでマクロが有効化されました。
今はまだ何も起きませんが、図形をクリックすると関数『test』が実行されます。
実装
本題のコーディングです。
今回はこのようなコードを作りました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
'1ファイルの読み込み→別ファイルに書き込み Sub test() '変数宣言 Dim Book_in As Workbook 'ブック(入力) Dim Book_out As Workbook 'ブック(出力) Dim Path_in As String 'フォルダパス(入力) Dim Path_out As String 'フォルダパス(出力) 'フォルダのパスを取得 Path_in = range("F4") Path_out = range("F7") '入力ファイルを開いて変数に格納 Workbooks.Open Path_in & "¥" & "data1.xlsx" Set Book_in = ActiveWorkbook '出力ファイルを開いて変数に格納 Workbooks.Open Path_out & "¥" & "out.xlsx" Set Book_out = ActiveWorkbook '入力ファイルをコピーして出力ファイルに貼り付け Book_in.Worksheets("Sheet1").range("B4").CurrentRegion.Copy Book_out.Worksheets("Sheet1").range("A2") 'ブックを保存 Book_out.Save 'ブックを閉じる Book_in.Close Book_out.Close End Sub |
大まかな流れはコメントに書いた通りです。
少しややこしいのが入力から出力への処理ですが、これはCopyメソッドで簡略化しています。
1 2 |
'例:A1のセルをD4にコピペ Range("A1").Copy Range("D4") |
また、表全体の選択にはCurrentRegionプロパティを合わせて使用しています。
1 2 |
'例:sheet1のB4セルを含む表を全選択 Worksheets("Sheet1").range("B4").CurrentRegion.Select |
今回実装したtest関数を実行すると、指定した出力フォルダ内にあるout.xlsxに、入力ファイルと同じ表が貼り付けられているはずです。
おわり
vbaを使った異なるファイルでのコピペについて、簡単に動かしてみました。
実際にやりたい操作はもう少し複雑なため、改良を加えていきたいと思います。