VBAを使えば、開いているブックや未開のブックから、簡単にデータを取得できます。
ここでは、①開いているブックから取得 と ②閉じているブックから取得 の2パターンを解説します。
1. 開いているブックからデータを取得
Sub GetDataFromOpenWorkbook()
Dim srcWb As Workbook
Dim srcWs As Worksheet
Dim destWs As Worksheet
'取得元のブックを指定
Set srcWb = Workbooks("Source.xlsx")
Set srcWs = srcWb.Sheets("Sheet1")
'データ貼り付け先を指定
Set destWs = ThisWorkbook.Sheets("Sheet1")
'A1セルの値をコピー
destWs.Range("A1").Value = srcWs.Range("A1").Value
End Sub
解説:
Workbooks("Source.xlsx")
… 開いているブックを名前で指定ThisWorkbook
… このマクロを実行しているブック.Value
… 値だけ取得する(書式は含まない)
2. 閉じているブックからデータを取得
Sub GetDataFromClosedWorkbook()
Dim srcWb As Workbook
Dim destWs As Worksheet
Dim filePath As String
'取得元のファイルパス
filePath = "C:\Test\Source.xlsx"
'貼り付け先を指定
Set destWs = ThisWorkbook.Sheets("Sheet1")
'取得元のブックを開く(非表示にしてもOK)
Set srcWb = Workbooks.Open(filePath)
'データを取得(例:A1セルの値)
destWs.Range("A1").Value = srcWb.Sheets("Sheet1").Range("A1").Value
'取得元のブックを閉じる(保存なし)
srcWb.Close SaveChanges:=False
End Sub
解説:
Workbooks.Open(filePath)
… 閉じているブックを開くSaveChanges:=False
… 保存せずに閉じる- 必要なセルだけ取得すれば、大量データでも高速
3. 範囲コピーでの取得
Sub CopyRangeFromAnotherBook()
Dim srcWb As Workbook
Dim destWs As Worksheet
Dim filePath As String
filePath = "C:\Test\Source.xlsx"
Set destWs = ThisWorkbook.Sheets("Sheet1")
'ブックを開く
Set srcWb = Workbooks.Open(filePath)
'A1:B10 をコピー
srcWb.Sheets("Sheet1").Range("A1:B10").Copy _
Destination:=destWs.Range("A1")
'ブックを閉じる
srcWb.Close SaveChanges:=False
End Sub
解説:
.Copy Destination:=
で、書式や数式も含めてコピー可能.Value
との違いは、書式・数式も含まれる点
4. 注意点
- ファイルパスやブック名は正確に記載する必要がある
- 他のブックを開くときは、処理後に必ず閉じるようにする
.Value
で取得すれば値のみ、.Copy
なら書式も含む
コメント