大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで、別ブックのセルの値を取得する方法について、ご紹介します。別ブックから、セルの値を取得するには、まずは、別ブックを開く必要があります。別ブックを開けたら、あとは、「Workbooks」でセルの値を取得することができます。具体的なVBAコードを使いながら、解説していきます。

はじめに

この記事では、別ブックのセルの値を取得する方法について、ご紹介します。

別ブックから、セルの値を取得するには、まずは、別ブックを開くところから始まります。

別ブックを開けば、あとは、「Workbooks」を使って、セルの値を取得することができます。

別ブックからセルの値を取得できるようになると、自動化できる範囲が広がりますので、マスターしていきましょう。

では、別ブックからセルの値を取得する方法について、解説していきます。

この記事で紹介すること

  • 別ブックからセルの値を取得する方法

目次から見たい項目へ移動すると便利ですよ。

目次

VBAで別ブックのセルの値を取得

VBAで、別ブックのセルの値を、取得する方法について、ご紹介します。

実務では、自分のブックだけではなく、別ブックの値を使ってデータの分析などをしたりしますので、別ブックの値が取得できるようになると、便利です。

Workbooksを使う

ブックを扱う場合は、「Workbooks」を使います。

別ブックの値を参照する場合は、

「Workbooks(ブック名).Worksheet(シート名).Range(セル)」

という感じで入力します。

条件としては、別ブックが開いている必要があります。

考え方としては、

  • 別ブックが開いているとき、「そのまま」値を取得する
  • 別ブックが開いていないとき、「別ブックを開いて」値を取得する

という感じです。

では、別ブックが開いているときと、開いていないときで、VBAコードを見てみます。

別ブックが開いているとき

まず、すでに値を取得したいブックが開いている場合です。

既に開いている、別ブックから値を取得するVBAコードです。

Sub TEST1()
    
    Dim Wb1, Wb2
    Set Wb1 = ThisWorkbook 'このブック
    Set Wb2 = Workbooks("取得先のファイル.xlsx") '別ブック
    
    'セルの値を取得する
    Wb2.Worksheets("Sheet1").Range("A1:A3").Copy Wb1.Worksheets("Sheet1").Range("A1")
    
End Sub

最初に、「元ファイル.xlsm」と「取得先のファイル.xlsx」というファイルを開いておきます。

別ブックを開いておく

元ファイルと取得先のファイルを開いておく

「元ファイル.xlsm」がVBAコードが記載されているファイルです。

「取得先のファイル.xlsx」には、「Sheet1」のセルに値が入力されています。

では、VBAコードを実行します。

別ブックから値を取得

別ブックから値を取得した結果

別ブックから、値を取得することができました。

既に、別ブックが開いている場合は、簡単です。

別ブックが閉じているとき

次は、値を取得したい別ブックが、閉じている場合です。

この場合は、

  • 別ブックを開く
  • 別ブックから値を取得する

という流れで、値を取得します。

別ブックが閉じている場合に、別ブックから値を取得するVBAコードは、こちらです。

Sub TEST2()
    
    '別ブックを開く
    Workbooks.Open Filename:=ThisWorkbook.Path & "\取得先のファイル.xlsx"
    
    Dim Wb1, Wb2
    Set Wb1 = ThisWorkbook 'このブック
    Set Wb2 = Workbooks("取得先のファイル.xlsx") '別ブック
    
    'セルの値を取得する
    Wb2.Worksheets("Sheet1").Range("A1:A3").Copy Wb1.Worksheets("Sheet1").Range("A1")
    
End Sub

VBAコードが記載されている「元ファイル.xlsm」だけが開かれています。

別ブックは閉じた状態

別ブックは閉じた状態

値を取得したい「取得先のファイル.xlsx」は、同じフォルダ内に、保存してあります。

フォルダ構成

フォルダ構成

では、VBAコードを実行して、「取得先のファイル.xlsx」からファイルを取得してみます。

別ブックを開いてセルの値を取得

別ブックを開いて、セルの値を取得した結果

別ブックを開いて、セルの値を取得することができました。

こんな感じで、値を取得したいブックが、閉じている場合は、一度ブックを開いてから値を取得する、とできます。

実務で別ブックのセルを取得する場合

実務で、別ブックのセルから値を取得する場合について、ご紹介します。

気を付けるポイントは、

  • 別ブックが閉じたままだとエラーになる
  • 既に開いている状態で別ブックを開くとエラーになる
  • 別ブックが開いているか確認して開く
  • 別ブックは最後に閉じると便利

ということです。

一つずつ解説していきます。

別ブックを閉じたままだとエラーとなる

まず、注意する点です。

別ブックを閉じたまま、別ブックの値を取得しようとすると、エラーとなります。

やってみます。

Sub TEST3()
    
    Dim Wb1, Wb2
    Set Wb1 = ThisWorkbook 'このブック
    Set Wb2 = Workbooks("取得先のファイル.xlsx") '別ブック
    
    'セルの値を取得する(別ブックを開いていないとエラー)
    Wb2.Worksheets("Sheet1").Range("A1:A3").Copy Wb1.Worksheets("Sheet1").Range("A1")
    
End Sub

VBAコードが記載されている「元ファイル.xlsm」だけが開かれている状態です。

別ブックを閉じたままの状態

別ブックを閉じたままの状態

VBAコードを実行してみます。

別ブックが開かれていないので、エラーとなります。

エラーとなる

別ブックが開かれていないので、エラーとなる

エラーとなりました。

うっかり、別ブックを開いていない状態で実行すると、エラーとなります。

既に開いている状態で別ブックを開くとエラーとなる

別ブックを開いている状態で、別ブックを開くとエラーとなります。

と思っていたんですけど、Excel 2016では、その問題は解決されているみたいです。

既に別ブックを開いている状態で、別ブックを開いても、エラーとなりませんでした。

ただし、Excel 2016以前のバージョンを使っている場合もありますので、既に開いている場合に、別ブックを開くVBAコードは書かない方がいいですね。

別ブックが開いているか確認して開く

実務で、別ブックを開く際は、別ブックが開いているかを確認してから開くのがベターです。

ちょっとやってみます。

Sub TEST4()
    
    '別ブックが開いてるか確認
    Dim a, flag
    a = ThisWorkbook.Path & "\取得先のファイル.xlsx"
    '開いているブックをループ
    For Each b In Workbooks
        '別ブックのフルパスが一致した場合
        If b.FullName = a Then
            flag = True '開いている場合は、True
            Exit For
        End If
    Next
    
    '別ブックが閉じた状態のとき
    If flag <> True Then
        '別ブックを開く
        Workbooks.Open Filename:=ThisWorkbook.Path & "\取得先のファイル.xlsx"
    End If
    
    Dim Wb1, Wb2
    Set Wb1 = ThisWorkbook 'このブック
    Set Wb2 = Workbooks("取得先のファイル.xlsx") '別ブック
    
    'セルの値を取得する
    Wb2.Worksheets("Sheet1").Range("A1:A3").Copy Wb1.Worksheets("Sheet1").Range("A1")
    
End Sub

最初に、開きたいブックが既に開かれているかを確認して、開かれていないときだけ、別ブックを開きます。

別ブックを開いていない状態

では、別ブックを開いていない状態から確認してみます。

別ブックを開いていない状態

では、実行してみます。

別ブックを開いて別ブックから値を取得した結果

別ブックを開いて、別ブックから値を取得できました。

別ブックを開いた状態

次は、同じVBAコードを使って、別ブックを開いた状態で、別ブックから値を取得してみます。

別ブックを開いた状態

では、実行してみます。

別ブックが開かれているか確認して別ブックから値を取得した結果

別ブックから、値を取得できました。

Excel 2016で確認したので、もちろんエラーはでないですけどね。

Excel 2016以前だと、このVBAコードが効果を発揮します。

別ブックは最後に閉じると便利

別ブックから値を取得する場合は、値を取得した後に、自動的に閉じるようにしておくと便利です。

値を取得したあと、毎回、閉じるのは、面倒ですからね。

ブックを閉じるには、「Workbooks(ブック名).Close」で、できます。

ブックが開かれているか確認して、別ブックから値を取得したあと、別ブックを閉じるVBAコードです。

Sub TEST5()
    
    '別ブックが開いてるか確認
    Dim a, flag
    a = ThisWorkbook.Path & "\取得先のファイル.xlsx"
    '開いているブックをループ
    For Each b In Workbooks
        '別ブックのフルパスが一致した場合
        If b.FullName = a Then
            flag = True '開いている場合は、True
            Exit For
        End If
    Next
    
    '別ブックが閉じた状態のとき
    If flag <> True Then
        '別ブックを開く
        Workbooks.Open Filename:=ThisWorkbook.Path & "\取得先のファイル.xlsx"
    End If
    
    Dim Wb1, Wb2
    Set Wb1 = ThisWorkbook 'このブック
    Set Wb2 = Workbooks("取得先のファイル.xlsx") '別ブック
    
    'セルの値を取得する
    Wb2.Worksheets("Sheet1").Range("A1:A3").Copy Wb1.Worksheets("Sheet1").Range("A1")
    Wb2.Close
    
End Sub

「元ファイル.xlsm」だけが開かれています。

別ブックを閉じた状態

元ファイルだけが開かれている状態

では、別ブックから値を取得して、最後に別ブックを閉じてみます。

別ブックを開いて値を取得した後に閉じる

別ブックから値を取得して、最後に別ブックを閉じる

別ブックから値を取得することができました。

そして、別ブックは自動的に閉じられています。

この方がすっきりしていいですね。

おわりに

この記事では、別ブックのセルの値を取得する方法について、ご紹介しました。

別ブックから、セルの値を取得するには、まずは、別ブックを開くところから始まります。

別ブックを開けば、あとは、「Workbooks」を使って、セルの値を取得することができます。

別ブックからセルの値を取得できるようになると、自動化できる範囲が広がりますので、便利です。

参考になればと思います。最後までご覧くださいまして、ありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

アーカイブから探す