この記事では、VBA(マクロ)を使用して別ブックのセルの値を開かずに取得し、転記する方法について解説していきます。
ポイントとしては、Workbooks.Openを使用してブックを開かずに取得すること、Range.Valueを使用してセルの値を取得することです。
なお、下記の解説では完全な初心者でもわかりやすいようにあえて変数名(あなた自身が名付けていい場所)を少々変わった名称にしております。
そのため、あなた自身がご活用の際には、ここを適切な(英語表記でしっくりくるものが一般的)ものに変更してご活用くださいね。
それでは詳しく見ていきましょう!
VBAマクロで別ブックのからセルの値を取得・転記する(開かずに)方法【betsu.xlsxの先頭シートのC6を取得し、moto.xlsxの先頭シートのE4に入力】【Workbooks.Open,Range,Value,Close】
それではまず、VBA(マクロ)を使用して別ブックのセルの値を開かずに取得し、転記する方法について解説していきます。
具体的には、betsu.xlsxの先頭シートのC6を取得し、moto.xlsxの先頭シートのE4に入力する方法をサンプルとして紹介しております。
Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。
Sub Copy_Cell_Betsu_To_Moto()
'betsu_filePath は、コピー元のファイルパス
Dim betsu_filePath As String
betsu_filePath = "C:\Users\user\Documents\betsu.xlsx"
'betsu_wbは、コピー元のブック
Dim betsu_wb As Workbook
'ReadOnlyで開く(上書きしない)
Set betsu_wb = Workbooks.Open(betsu_filePath, ReadOnly:=True)
'betsu_wsは、コピー元のシート
Dim betsu_ws As Worksheet
Set betsu_ws = betsu_wb.Worksheets(1)
'コピー元範囲の値を変数:betsu_cellに取得
Dim betsu_cell As Variant
betsu_cell = betsu_ws.Range("C6").Value
'コピー元ブックを閉じる
betsu_wb.Close SaveChanges:=False
'moto_wsは、貼り付け先のシート
Dim moto_ws As Worksheet
Set moto_ws = ThisWorkbook.Worksheets(1)
'変数:betsu_cellの値をmoto_wsのE4セルへペースト
moto_ws.Range("E4").Value = betsu_cell
End Sub
コードのAlt+F8を押し、マクロ選択画面でCopy_Cell_Betsu_To_Moto関数を実行します。
上記コードの説明をしていきます。
1. betsu_filePathにコピー元のファイルパスを指定します。
2. Workbooks.Openでbetsu_filePathのブックをReadOnlyで開き、betsu_wbに格納します。
ReadOnlyにすることで、上書き保存されることを防ぎます。
3. コピー元のシートをbetsu_wsとして取得します。
4. betsu_wsのC6セルの値をbetsu_cell変数に取得します。
5. コピー元のブックをbetsu_wb.Closeで閉じます。その際、SaveChanges:=Falseとすることで、上書き保存されることを防ぎます。
6. 貼り付け先のシートをmoto_wsとして取得します。
7. moto_wsのE4セルに、betsu_cell変数の値をペーストします。
VBAマクロで別ブックのからセルの値を取得・転記する(開かずに)方法【betsu.xlsxの先頭シートのB2からC列最終行までの複数範囲を取得し、moto.xlsxの先頭シートのA2を先頭セルとしてコピー】
続いては、VBAマクロを使用して別ブックの複数範囲のセルの値を開かずに取得し、転記する方法について解説していきます。
具体的には、betsu.xlsxの先頭シートのB2からC列最終行までの複数範囲を取得し、moto.xlsxの先頭シートのA2を先頭セルとしてコピーとするコードとなっています。
Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。
Sub Copy_Cells_Betsu_To_Moto()
'betsu_filePathは、コピー元のファイルパス
Dim betsu_filePath As String
betsu_filePath = "C:\Users\user\Documents\betsu.xlsx"
'betsu_wbは、コピー元のブック
Dim betsu_wb As Workbook
'ReadOnlyで開く(上書きしない)
Set betsu_wb = Workbooks.Open(betsu_filePath, ReadOnly:=True)
'betsu_wsは、コピー元のシート
Dim betsu_ws As Worksheet
Set betsu_ws = betsu_wb.Worksheets(1)
'betsu_copyRangeは、コピー元の複数の範囲
Dim betsu_copyRange As Range
Set betsu_copyRange = betsu_ws.Range("B2", betsu_ws.Range("C2").End(xlDown))
'コピー元ブックを閉じる
betsu_wb.Close SaveChanges:=False
'moto_wsは、貼り付け先のシート
Dim moto_ws As Worksheet
Set moto_ws = ThisWorkbook.Worksheets(1)
'moto_pasteRangeは、貼り付け先の範囲
Dim moto_pasteRange As Range
Set moto_pasteRange = moto_ws.Range("A2").Resize(betsu_copyRange.Rows.Count, betsu_copyRange.Columns.Count)
'コピー元の範囲を貼り付け先へペースト
moto_pasteRange.Value = betsu_copyRange.Value
End Sub
コードのAlt+F8を押し、マクロ選択画面でCopy_Cells_Betsu_To_Moto関数を実行します。
上記コードの説明をしていきます。
1. betsu_filePathにコピー元のファイルパスを指定します。
2. Workbooks.Openでbetsu_filePathのブックをReadOnlyで開き、betsu_wbに格納します。
3. コピー元のシートをbetsu_wsとして取得します。
4. betsu_wsのB2からC列の最終行までの範囲をbetsu_copyRangeとして取得します。
Range.End(xlDown)を使用することで、C列の最終行を取得できます。
5. コピー元のブックをbetsu_wb.Closeで閉じます。
6. 貼り付け先のシートをmoto_wsとして取得します。
7. moto_wsのA2を先頭セルとし、betsu_copyRangeと同じ行数、列数の範囲をmoto_pasteRangeとして取得します。
Range.Resizeを使用することで、範囲のサイズ変更ができます。
8. moto_pasteRangeに、betsu_copyRangeの値をペーストします。
このようにして、別ブックの複数範囲のセルの値を開かずに取得し、転記することができました。
まとめ VBAマクロで別ブックのからセルの値を取得・コピー(複数の範囲:別ファイル:変数)する方法
以上、この記事ではVBA(マクロ)を使用して別ブックのセルの値を開かずに取得し、転記する2つの方法について解説してきました。
マクロの扱いになれ、さらに快適な生活を送っていきましょう!