他のブックのシート上のデータを参照したいときは。。。
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」を使いましょう(笑)
コメント