はじめに
先日、Excelファイルを使用して以下の条件でデータを転記させる作業がありました。条件は以下の通り。
- 2つのExcelファイル(AとB)があり、AからBにデータを転機する
- Aの1行がBの1シートになる
- 処理させる行は任意に指定したい
- ファイル名や転記させるセルは将来変更する可能性あり
文章だとちょっとわかりにくいと思うので、図にしてみます。
条件の3番目と4番目は汎用的に処理できるようにしないと駄目ですね。設定シートを作ってそこに書かれた内容で処理するのが良さそうです。ということで早速、作成してみました。
マクロ
'#######################################################################################
'# 概要:2つのExcelファイル間でデータを転記します。
'# 作成者:ITStudy
'# 作成日:2020/08/28
'#######################################################################################
Sub データ転記()
Dim FromFile As String
Dim ToFile As String
Dim FromStartRow As String
Dim FromEndRow As String
Set ss = ActiveSheet
FromFile = Range("a2")
ToFile = Range("b2")
FromStartRow = Range("e2")
FromEndRow = Range("f2")
MaxRow = Range("C1").End(xlDown).Row
'ブックを開く(読み取り専用を推奨するメッセージを非表示)
Set fb = Workbooks.Open(Filename:=FromFile, ReadOnly:=False, IgnoreReadOnlyRecommended:=True)
Set tb = Workbooks.Open(Filename:=ToFile)
For i = FromStartRow To FromEndRow
'シートのコピー
tb.Worksheets(1).Copy Before:=Worksheets(1)
'シート名の変更
ActiveSheet.Name = fb.Worksheets(1).Range("d" & i)
'データ転記
For j = 2 To MaxRow
tb.Worksheets(1).Range(ss.Range("D" & j)) = fb.Worksheets(1).Range((ss.Range("C" & j) & i))
Next
Next
'上書き保存
tb.Save
'ブックを閉じる
fb.Close
tb.Close
End Sub
ダウンロード
テストデータを含めてサンプルファイルを準備しました。必要な方は以下からダウンロードして下さい。
「設定シート.xlsm」を開き、マクロを有効にして下さい。実行ボタンをクリックすると「A.xlsx」のデータを元に「B.xlsx」ファイルにシートが追加されます。再度、実行する場合は「B.xlsx」で追加されたシートを削除して下さい。
もし、ここをこういう風に作成してほしいなどの要望があればコメントお願いします。
コメント