(Excel VBA)閉じているブックからデータを取得する

ExcelVBA

ExcelVBA

仕事でExcelを使うことが多くなってきたのですが

会社ではVBAを毛嫌いされているので

様々な関数を駆使して色々作っています。

しかし今回久々にVBAでプログラムを組んでみようと思い

色々、調べて実装してみました。

スポンサードリンク

閉じているExcelファイルからデータを取得する

ファイル

ファイル

やりたいことは

Aのファイルを開いたら

Bのファイルと比較して

差分をAのファイルで修正する。

その際、Bのファイルは開かないまま。

というのが理想です。

何はともあれ

まず、Excelファイルを開かないまま

データを取得できるのかです。

調べてみたところ・・・ありました。

【ExecuteExcel4Macro】というコマンドを使うようです。

Excel 4.0のマクロを使う仕様になっていますね。

使い方だと

Sub Sample1()
    MsgBox ExecuteExcel4Macro("'C:\[Book1.xls]Sheet1'!R1C1")
End Sub

上記はCドライブにあるファイル名:Book1.xlsを開かないでSheet1のセルA1を読み込み方法です。

どうも、このコマンドは

ファイル名の前後に【 [ 】と【 ] 】をつけなくてはならず、

また、セルの番地はR1C1で指定しないといけないみたいです。

あと、空欄の場合は「0」を返します。

これを踏まえて、

実装してみたのがこちらです。

Sub Sample2()
    Dim OpenFileName As String '調べたいファイルのフルパス+ファイル名
    Dim Target As String '調べたいファイルのシート名確認用
    Dim SheetName As String '調べたいファイルのシート名
    Dim Number As String '調べたいファイルのデータ
    
    'ファイル名を作成
    OpenFileName = Sheets("sheet1").Cells(1, 2).Value & "\" & Sheets("sheet1").Cells(2, 2).Value & ".xlsx"
    
    'ファイルが存在するか
    If Not Dir(OpenFileName) <> "" Then
        MsgBox ("ファイルがありません。" & vbCrLf & "ファイルの場所・名前を確認して修正して下さい。"), vbExclamation
        OpenFileName = ""
        
        Exit Sub
    Else
        '[]をつけたファイル名を再作成
        OpenFileName = Sheets("sheet1").Cells(1, 2).Value & "\[" & Sheets("sheet1").Cells(2, 2).Value & ".xlsx]"

        'ファイルパス+シート名を作成
        SheetName = Sheets("sheet1").Cells(3, 2).Value

        'ワークシート名が正しいかどうか、まず読み込んでみる
        Target = "'" & OpenFileName & SheetName & "'!"

        'Errorステートメントでエラー処理ルーチンを有効にする
        On Error Resume Next 'Errorステートメントでエラー処理ルーチンを有効にする
        Number = ExecuteExcel4Macro(Target & "R1C1")
        If Err <> 0 Then
          MsgBox ("ワークシート [ " & SheetName & " ] を読めませんでした。" & vbCrLf & "シート名を確認して下さい。"), vbExclamation
          OpenFileName = ""
          SheetName = ""
          ScheduleNumber = ""
          Target = ""
          Exit Sub
        End If
        'Errorステートメントでエラー処理ルーチンを無効に戻す
        On Error GoTo 0

        'エラーがなかったら表示する
        MsgBox(Number)
    End If
End Sub

運用としてVBコードはいじられたくないので

開くファイルのシートのB1に読み込みたいファイルの場所の絶対パス

B2にファイル名、B3にシート名を記載するようにします。

こうすれば使う人が変更・修正も可能になるためです。

あとは、実際にそのファイルがあるかをチェックして

問題なければデータを表示するようにしています。

実際の運用は・・・

パソコン画面を見る

パソコン画面を見る

このまま進めていこうと思ったのですが

この【ExecuteExcel4Macro】は

データの読み込みしか出来ないようで

データの一致を判定させてからデータを取得しようかと思っていたのですが

それが難しくなってしまいました。

ループで全てのデータを判定してからでもできなくはないですが

時間がかかりすぎてしまいそうです。

あと、Excel4Macroなので

いつ使えなくなるかわらりません。

なので、別の仕様を考えようと思います。

実装できたら、

またこちらで紹介致します。

Excel VBAの教科書 (Informatics & IDEA)

新品価格
¥2,570から
(2019/9/21 06:11時点)

Excel VBAの教科書 [ 古川 順平 ]

価格:2,570円
(2019/9/21 06:23時点)
感想(1件)

スポンサードリンク

コメントを残す

サブコンテンツ

このページの先頭へ