【EXCEL】Sequence Makerの計測結果のテキスト書出し

# やること
　Excel通信コマンド送受信アドイン「Sequence Maker」を別のツールから呼び出し、結果を別のツールへ渡す。(ちなみに、読み出すシーケンスは複数)


# 事前確認：Qiitaでの記事
　ということで、以下の検索をしたところ、171件ヒットした。(2025/03/09時点)
[「”Sequence Maker”」の検索結果 - Qiita](https://qiita.com/search?q=%E2%80%9DSequence+Maker%E2%80%9D)


## シーケンス メイカーさんの記事
　以下の記事をはじめとして、65件のSequence Makerに関する記事がある。残りの100件強の記事の中でアドイン「Sequence Maker」を扱っているのは、シーケンス メイカーさんの記事の紹介など。
[Sequence Makerの情報サイト一覧 #Excel - Qiita](https://qiita.com/sequencemaker/items/7b785ae45d4e4623d171)


### 複数のシーケンス
>処理ごとにボタンを複数用意しておいて、そのボタンを押すだけで処理が開始するような使い方もできそうです。

[Sequence Makerで独自のコマンド送受信ボタンを作る方法（APIを使ってみる） #Excel - Qiita](https://qiita.com/sequencemaker/items/4d31b1d26cddc3e0ebfc)


## その他
>残りの100件強の記事の中でアドイン「Sequence Maker」を扱っているのは、シーケンス メイカーさんの記事の紹介など。

[【Qiita】ひとりアドベントカレンダー2024年の完走率を調査してみたよ #PHP - Qiita](https://qiita.com/rana_kualu/items/6414eb4d17048ca7edd4)

　ちなみにこの結果は、74件ヒットした。(2025/03/09時点)
[「user:kaizen_nagoya ”Sequence Maker” 」の検索結果 - Qiita](https://qiita.com/search?sort=&q=user%3Akaizen_nagoya++%E2%80%9DSequence+Maker%E2%80%9D+)


# 事例
　今回、コマンドプロンプトで、BatchFile → VBScript →　EXCEL(VBA) と起動する。結果は、コマンドプロンプトに表示される。
　c:\SequenceMaker　に関連ファイルを置く。


## EXCELファイル
**結果を表示するシート**
![20250309_155115.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3838258/bc31be06-6404-4f83-8dd4-9e4daf45bcd1.jpeg)


**シーケンス1つ目のシート**
![20250309_155222.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3838258/ff45c117-696b-47d4-9c1a-61e6d672a3b1.jpeg)


**シーケンス2つ目のシート**
![20250309_155349.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3838258/043dc7e1-a59f-4d91-80be-38a9e7b64bcf.jpeg)


## EXCEL VBA
```vb:SequenceMaker.bas
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
```vb:SequenceMaker.vbs
' 対象の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
```batch:SequenceMaker.bat
cscript "C:\SequenceMaker\SequenceMaker.vbs"  %1 %2 %3 %4
```
引数は以下の通り。
<dl>
 <dt>対象のExcelファイル</dt>
  <dd>"SequenceMaker.xlsm"</dd>
 <dt>実行させるマクロ名</dt>
  <dd>"SequenceMakerStart_1"</dd>
 <dt>処理結果を読み取るシート名</dt>
  <dd>"結果"</dd>
 <dt>処理結果を読み取るセル位置</dt>
  <dd>"F5"</dd>
</dl>


## 実行結果
![20250309_161346.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3838258/30d396fc-b749-42f1-809e-bc463dd16646.jpeg)
>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:\>