まず、次のコードをご覧ください。ここでは、GetValue関数を作成し、ExecuteExcel4Macroを呼び出して、開いていない別のExcelファイルからデータを読み取ります。
次にはこの関数がXLMマクロを呼び出して、開いていないワークブックからデータを読み取ります。
*注意点:この関数は数式に使用できません。
GetValue関数には、次の4つの変数が必要です。
- path:開いていないExcelファイルのパス(e.g., “d:\test”)
- file:ファイル名(e.g., “test.xls”)
- sheet: シート名 (e.g., “Sheet1”)
- ref: 参照するセル (e.g., “C4”)
'*関数は次のとおりです。
Private Function GetValue(path, file, sheet, ref)
' 開いていないExcelファイルからデータを取得する
Dim arg As String
' ファイルが存在することを確認する
If Right(path, 1) <> "\" Then path = path & "\"
If Dir(path & file) = "" Then
GetValue = "File Not Found"
Exit Function
End If
' 変数を作成する
arg = "'" & path & "[" & file & "]" & sheet & "'!" & _
Range(ref).Range("A1").Address(, , xlR1C1)
' XLMマクロを実行する
GetValue = ExecuteExcel4Macro(arg)
End Function
この関数を使用します。
ステートメントをVBAモジュールにコピーしてから、適切なステートメントで関数を呼び出します。
次の例では、D:\testにあるtest.xlsファイルのSheet1のセルA1にある内容を表示します。
Sub TestGetValue()
p = "d:\test"
f = "test.xls"
s = "Sheet1"
a = "A1"
MsgBox GetValue(p, f, s, a)
End Sub
次には他の例をご覧ください。このステートメントは、開いていないファイルから1200個の値(100行12列)を読み取り、その結果を現在のワークシートに入力します。
Sub TestGetValue2()
p = "d:\test "
f = "test.xls"
s = "Sheet1"
Application.ScreenUpdating = False
For r = 1 To 100
For c = 1 To 12
a = Cells(r, c).Address
Cells(r, c) = GetValue(p, f, s, a)
Next c
Next r
Application.ScreenUpdating = True
End Sub
説明:ワークブックが非表示、またはワークシートがチャートの場合には、エラーを返します。
目次
ExecuteExcel4Macro使い方
機能
Microsoft Excel 4.0マクロ関数を実行して、この関数の結果を返します。返される結果の形式は、関数の形式によって異なります。
形式
expression.ExecuteExcel4Macro(String)
引数の説明
expression オプション。Applicationオブジェクトの数式を返します。
String 必須。String データ形式。等号なしのMicrosoft Excel 4.0マクロ言語関数です。すべての参照は、R1C1のような文字列である必要があります。文字列に二重引用符が含まれている場合は、2つ記述する必要があります。例えば、このマクロ関数=MID(“sometext”,1,4),Stringは[MID(“”sometext””,1,4)]と記述する必要があります。
解説
Microsoft Excel 4.0マクロは、現在のワークブックまたはワークシートで実行しません。 つまり、すべての参照は外部参照である必要があり、ワークブック名を明確に指定する必要があります。 たとえば、Book1でMicrosoft Excel 4.0マクロ[My_Macro]を実行するには、[Book1!My_Macro()]を使用する必要があります。ワークブック名を指定しない場合、このメソッドで実行できません。
例
この例では、Sheet1のセルC3に対するGET.CELL(42) マクロ関数を実行し、結果をメッセージボックスに表示します。 GET.CELL(42) マクロ関数は、アクティブ ウィンドウの左端からアクティブ セルの左端までの水平距離を返します。このマクロ関数に相当する Visual Basic 関数はありません。
Worksheets("Sheet1").Activate
Range("C3").Select
MsgBox ExecuteExcel4Macro("GET.CELL(42)")
'***c:\test.xls(開かない)のsheet1.a1の値を直接読み取る他の参照コード(上記のコードより簡単です。)
Sub TestGetValue()
str0 = "'C:[test.xls]Sheet1'!R1C1"
MsgBox ExecuteExcel4Macro(str0)
End Sub
Excel VBAに関わる説明が少ないですが、ExecuteExcel4Macroにはもっと使い方があるようで、みんなと一緒に探索してみます。
コメントを残す