【VBA】別のブックからデータを取得する

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 なら書式も含む

コメント

タイトルとURLをコピーしました