他のExcelブックを参照する方法・エラーが出たときの対処方法

エクセルVBA VBA





他のブックのシート上のデータを参照したいときは。。。

ExcelVBAで他のExcelファイルのブックのデータを読み込みたい場面は多々あると思います。

VBAでは「open」メソッドを使います。。。。ということで本来は終了なのですが、エラー文が表示されてしまうケースがありますので、エラー対処方法について解説をします。

VBAで他のExcelファイル(ブック)のデータを読み込みたい場合はどのようなときでしょうか。

例を挙げると、他のブック上で「find」関数を使って抽出したデータを使いときなどです。

もちろん、通常の流れだと、以下のように他のブックを「open」で開くというコードになります。

Sub ファイルオープン()

  Dim find_cell As Range
  Dim find_moji As String
  Dim str As Variant
  
  find_moji = "テスト"
  Workbooks.Open "C:\Users\Desktop\test.xlsm"
  
  Set find_cell = ActiveWorkbook.Worksheets(1).UsedRange.Find( _
     what:=find_moji, _
     MatchCase:=False, _
     matchbyte:=False, _
     lookat:=xlPart)
     
  str = find_moji & "は" & find_cell.Address & "です。"
  MsgBox str
     
End Sub

これで他のブックのシート上のデータを検索して抽出したデータを使う(上のコードだとメッセージボックスで開いている)ことができます。

。。。が、

それでは、他のブックを「open」しないままデータを参照しようとするとどうなるのでしょうか。

上のコードの「open」の行を削除して実行すると、、、

エラー表示

というエラーが出てしまいます。

エラー内容は、当然、該当ファイルが無いということを言っています。

「open」を使わずに他のブックのデータを参照できる関数

今までさんざん他のブックのデータを参照するには「open」を使うように解説してきたわけですが、じつは「open」しなくてもデータを参照できる(エラーが出ない)関数がありますので、紹介します。

  • sum
  • if
  • counta
  • vlookup
  • match
  • index

これらは、「open」しなくてもデータを参照することができます。

ただ、なぜこの関数は問題ないのか?? については、理論や理屈はありません。

VBAを作ったMSのさじ加減だと考えられます(悲)

「open」しないと他のブックのデータを参照できない関数

一方で、「open」しないとエラーが出る関数の一例を紹介します。

  • sumif
  • countif
  • dsum
  • dcounta
  • indirect

これについても理論や理屈はありません。MSの人に聞いてください(笑)

まとめ

結局のところ、他ブックのシート上のデータを参照したい。。。というときは該当ファイルを「open」することが安全な方法と言えるのです。

少しでも余計なエラーを減らす意味で「open」を使いましょう(笑)

コメント

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