やること
Excel通信コマンド送受信アドイン「Sequence Maker」を別のツールから呼び出し、結果を別のツールへ渡す。(ちなみに、読み出すシーケンスは複数)
事前確認:Qiitaでの記事
ということで、以下の検索をしたところ、171件ヒットした。(2025/03/09時点)
「”Sequence Maker”」の検索結果 - Qiita
シーケンス メイカーさんの記事
以下の記事をはじめとして、65件のSequence Makerに関する記事がある。残りの100件強の記事の中でアドイン「Sequence Maker」を扱っているのは、シーケンス メイカーさんの記事の紹介など。
Sequence Makerの情報サイト一覧 #Excel - Qiita
複数のシーケンス
処理ごとにボタンを複数用意しておいて、そのボタンを押すだけで処理が開始するような使い方もできそうです。
Sequence Makerで独自のコマンド送受信ボタンを作る方法(APIを使ってみる) #Excel - Qiita
その他
残りの100件強の記事の中でアドイン「Sequence Maker」を扱っているのは、シーケンス メイカーさんの記事の紹介など。
【Qiita】ひとりアドベントカレンダー2024年の完走率を調査してみたよ #PHP - Qiita
ちなみにこの結果は、74件ヒットした。(2025/03/09時点)
「user:kaizen_nagoya ”Sequence Maker” 」の検索結果 - Qiita
事例
今回、コマンドプロンプトで、BatchFile → VBScript → EXCEL(VBA) と起動する。結果は、コマンドプロンプトに表示される。
c:\SequenceMaker に関連ファイルを置く。
EXCELファイル
EXCEL VBA
Attribute VB_Name = "SequenceMaker"
Option Explicit
Sub SequenceMakerStart_1()
' C:\ProgramData\HIOKI\Sequence Maker\Manual\ja\Sequence Maker API.html より
' シート:その1のシーケンスを起動
Dim automationObject As Object
Set automationObject = Application.COMAddIns("Sequence Maker").Object
Worksheets("その1").Activate
Dim result As Long
result = automationObject.Start()
If result <> 0 Then
Exit Sub
End If
Worksheets("結果").Activate
' result:
' 0 成功
' 1 送受信中
' 2 停止中
' 3 引数の型が違う
' 4 インターフェイスNo.が範囲外
' 5 インターフェイスがオープン状態
' 6 インターフェイスがクローズ状態
' 7 ドライバが未インストール
' 8 ドライバのバージョンが古い
' 9 インターフェイスが未選択
' 10 インターフェイスオープン失敗
' 11 タイムアウト時間が範囲外
' 12 送受信失敗
' 13 ファイルが存在しない
' 14 ファイルアクセス失敗
' 15 コマンドNo.が範囲外
End Sub
Sub SequenceMakerStart_2()
' C:\ProgramData\HIOKI\Sequence Maker\Manual\ja\Sequence Maker API.html より
' シート:その2のシーケンスを起動
Dim automationObject As Object
Set automationObject = Application.COMAddIns("Sequence Maker").Object
Worksheets("その2").Activate
Dim result As Long
result = automationObject.Start()
If result <> 0 Then
Exit Sub
End If
Worksheets("結果").Activate
' result:
' 0 成功
' 1 送受信中
' 2 停止中
' 3 引数の型が違う
' 4 インターフェイスNo.が範囲外
' 5 インターフェイスがオープン状態
' 6 インターフェイスがクローズ状態
' 7 ドライバが未インストール
' 8 ドライバのバージョンが古い
' 9 インターフェイスが未選択
' 10 インターフェイスオープン失敗
' 11 タイムアウト時間が範囲外
' 12 送受信失敗
' 13 ファイルが存在しない
' 14 ファイルアクセス失敗
' 15 コマンドNo.が範囲外
End Sub
[Sub SequenceMakerStart_1()]は[シート:その1]を、[Sub SequenceMakerStart_2()]は[シート:その2]を起動するマクロ。
BatchFile
' 対象のExcelファイル
Dim sArg1
sArg1 = WScript.Arguments(0)
' sArg1 = "SequenceMaker.xlsm"
' 実行させるマクロ名
Dim sArg2
sArg2 = WScript.Arguments(1)
' sArg2 = "SequenceMakerStart_1"
' 処理結果を読み取るシート名
Dim sArg3
sArg3 = WScript.Arguments(2)
' sArg3 = "結果"
' 処理結果を読み取るセル位置
Dim sArg4
sArg4 = WScript.Arguments(3)
' sArg4 = "F5"
'開いているEXCELのマクロ実行
Dim excelApp
Dim worlbook
Set workbook = Nothing
Set excelApp = Nothing
Set excelApp = GetObject(, "Excel.Application")
On Error Resume Next
Set workbook = excelApp.Workbooks(sArg1)
On Error GoTo 0
If workbook Is Nothing Then
WScript.Echo "Not open"
WScript.Quit
End If
'マクロ実行
excelApp.Application.Run sArg2
' 終了コードを取得
Dim status
status = workbook.WorkSheets(sArg3).Range(sArg4).Text
status = "VBS " + status
'終了コードを返す(PopUp)
WScript.echo status
'終了コードを返す(DOS窓)
'Dim objCMD
'Set objCMD = CreateObject("WScript.Shell")
'objCMD.Run "cmd /K ECHO " & status
Set workbook = Nothing
Set excelApp = Nothing
BatchFile
cscript "C:\SequenceMaker\SequenceMaker.vbs" %1 %2 %3 %4
引数は以下の通り。
- 対象のExcelファイル
- "SequenceMaker.xlsm"
- 実行させるマクロ名
- "SequenceMakerStart_1"
- 処理結果を読み取るシート名
- "結果"
- 処理結果を読み取るセル位置
- "F5"
実行結果
C:>C:\SequenceMaker\SequenceMaker.bat "SequenceMaker.xlsm" "SequenceMakerStart_1" "結果" "F5"
C:>cscript "C:\SequenceMaker\SequenceMaker.vbs" "SequenceMaker.xlsm" "SequenceMakerStart_1" "結果" "F5"
Microsoft (R) Windows Script Host Version 5.812
Copyright (C) Microsoft Corporation. All rights reserved.VBS これはその1
C:>C:\SequenceMaker\SequenceMaker.bat "SequenceMaker.xlsm" "SequenceMakerStart_2" "結果" "F5"
C:>cscript "C:\SequenceMaker\SequenceMaker.vbs" "SequenceMaker.xlsm" "SequenceMakerStart_2" "結果" "F5"
Microsoft (R) Windows Script Host Version 5.812
Copyright (C) Microsoft Corporation. All rights reserved.VBS これはその2
C:>