Sequence MakerでVBAの処理を呼び出す

## はじめに
Sequence MakerはExcelから測定器を制御可能にするアドインです。Sequence Makerには専用コマンドというものが用意されており、それを使うとVBAの処理を呼び出すことができます。この記事ではSequence MakerでVBAの処理を呼び出す方法を解説します。Sequence Makerについての詳細は以下の記事を参照ください。

https://qiita.com/sequencemaker/items/8e6a370ab0a793a06a3b

:::note warn
***お断り***
本記事の内容はSequence Maker開発元の公式見解ではなく、あくまでも個人が趣味の範囲内で執筆しているものです。記事の内容について開発元へ問い合わせることはお控えください。ご質問・要望などは各記事のコメント欄へお願いいたします。
:::

## VBAを呼び出すための専用コマンド
VBAを呼び出すための専用コマンドは以下の2つです。「?」が付いている方を使用すると、VBAを呼び出した後の戻り値を受け取り、セルに出力できます。

| コマンド | 内容 |
|:-|:-|
| #MACRO(<マクロ名>[,<引数>,<引数>, ...])  | Excelのマクロを実行します。<br>引数は最大30個まで指定可能です。<br>引数にコンマを含む場合はダブルクォーテーションで括ります。  |
| #MACRO?(<マクロ名>[,<引数>,<引数>, ...])  | Excelのマクロを実行して戻り値を出力します。<br>引数は最大30個まで指定可能です。<br>引数にコンマを含む場合はダブルクォーテーションで括ります。  |

（https://sequencemaker.hioki.com/manual/ja/#command より引用）

## VBAのサブルーチンを呼び出してみる
### VBAの実装
まずは簡単なところで、VBAで作成したサブルーチンを呼び出してみます。
VBAのコードはこんな感じにしてメッセージボックスを表示させます。なお、VBAのコードは標準モジュールを追加して記述します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821782/6e62bca4-b638-71d7-92c6-5fefaa71ca59.png)

```vb
Option Explicit

Sub MsgboxTest1()

    Msgbox ("これはメッセージボックスです")
    
End Sub
```

### Sequence Makerから実行
Excelのシートに
```
#MACRO(MsgboxTest1)
```
と入力して、コマンド送受信ボタンを押します。
すると、Sequence MakerからVBAのサブルーチンが呼ばれて、メッセージボックスが表示されます。
メッセージボックス表示中はシーケンス処理が止まり、OKをクリックすると処理が継続します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821782/755a3a65-07fd-3aa3-13b1-b0e1876f8b3a.png)

## 引数付きのVBAのサブルーチンを呼び出してみる
### VBAの実装
先ほどのサブルーチンを引数付きに変更します。メッセージボックスの中身を指定できるようにします。

```vb
Option Explicit

Sub MsgboxTest2(msg As String)

    Msgbox (msg)
    
End Sub
```

### Sequence Makerから実行
Excelのシートに
```
#MACRO(MsgboxTest2,引数で渡したメッセージ)
```
と入力して、コマンド送受信ボタンを押します。
すると、Sequence MakerからVBAに文字列が渡され、その文字列がメッセージボックスに表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821782/c4b37159-7add-7148-0c1e-4c55230f73df.png)

:::note
Sequence Makerにはメッセージボックスを出す専用のコマンド#MSG(文字列)があるので、実はVBAを書かなくてもメッセージボックスを出すことができる
:::

## VBAの関数を呼び出してみる
### VBAの実装
今度は、VBAの関数を呼び出してみます。関数は返り値を返すことができます。今回は現在時刻を返すようにしてみました。

```vb
Option Explicit

Function Clock() As String
    Clock = "現在の時刻：" & time

End Function
```

### Sequence Makerから実行
Excelのシートに
```
#MACRO?(Clock)
```
と入力して、コマンド送受信ボタンを押します。
すると、Sequence MakerからVBAの関数が呼ばれ、返り値がセルに表示されます。

:::note
関数の返り値を取得するために「?」付きの方のコマンドを使用します
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821782/76159e78-4730-9fef-2d6c-649a91cc7848.png)

## 引数付きのVBAの関数を呼び出してみる
### VBAの実装
最後に、引数付きのVBAの関数を呼び出してみます。今回は2つの引数の和を返す関数を作成してみました。

```vb
Option Explicit

Function Add(val1 As Integer, val2 As Integer) As Integer

    Add = val1 + val2
    
End Function
```

### Sequence Makerから実行
Excelのシートに
```
#MACRO?(Add,100,200)
```
と入力して、コマンド送受信ボタンを押します。
すると、Sequence MakerからVBAの関数が呼ばれ、返り値がセルに表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821782/79d2b9fe-8f06-fda7-ad77-c0c4e6187b2d.png)

### まとめ
今回はSequence MakerでVBAの処理を呼び出してみました。VBAのサブルーチンや関数が呼び出せるということは、つまり何でもできてしまうということになります。Sequence Makerの機能だけでは物足りないような時にちょっとした処理をVBAで書いて実行すると便利かもしれません。

### おまけ
VBAと組み合わせれば🐸カエルの歌🎵だって演奏できますよ。

https://qiita.com/sequencemaker/items/43522e3030e7e0905083