『IIJ セキュアMX メールボックスプラス』のユーザー一括登録用テキスト出力マクロの作成

## １．きっかけ
[『IIJ セキュアMX（SMX）メールボックスプラス』](https://www.iij.ad.jp/biz/smx/mailboxplus.html)の契約をしまして、メールアドレスの新規登録を行おうと思ったのですが、ユーザー一括登録の方法はあるものの、
CSVのこのテンプレートに入力すれば一括登録ができます、のようなツールは無いようでした。

（IIJ セキュアMXサービス メールボックスプラスオプション ご利用の手引き［管理者用］から引用）
| 記述書式・記述例 | テキスト出力項目 |
|:-:|:-:|
| ![IIJ-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667967/c538fdd5-8f6b-c6f7-f12a-a39ee20d10fa.png)  | ![IIJ-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667967/2b5f3906-09fa-dfb4-44cc-97f4f04d5836.png)  |

ならば、今のうちに作っておこうと思った次第です。

## ２．作成
<B>（１）まずはchatGPTにインプットしてベースのコードを作ってもらいました。</B>
<details><summary><font color="blue">【参考：以下クリックで展開】SMX メールボックス ユーザー一括登録用テキスト出力マクロ（chatGPTへのインプット）</font></summary>

~~~
次のExcelVBAコード（標準モジュール）「sub テキスト出力()」を書いてください。

（１）アクティブなシート上で動作する。
（２）選択されたシートのA列の2行目以降～最後の行のセルの値が「メールアドレス」（RFC 5322 & RFC 5321の形式）である場合、
    その行の、A列～N列のセルの値を、行ごとに、配列変数に格納する。
（３）ただし、セルの値が"[TAB]"の文字列（""は除く）であった場合は、タブの文字コード(定数： vbTab)に置き換えて、配列変数に格納する。
（４）ただし、セルの値が"[CRLF]"の文字列（""は除く）であった場合は、キャリッジリターンとラインフィードの文字コード(定数： vbCrLf)に置き換えて、配列変数に格納する。
（５）テキストファイルとして書き出す。なお、テキストファイル名は「シートの名前」とし、拡張子は「.txt」とする。

以上
~~~
</details>

<B>（２）実際のコード（chatGPTの出力から、一部手直し）</B>
```vb
Sub テキスト出力()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim dataArr() As Variant
    Dim outputArr() As Variant
    Dim i As Long, j As Long
    Dim fileName As String
    
    ' カレントディレクトリに移動
    ChDir ThisWorkbook.Path
    
    ' アクティブなシートを取得
    Set ws = ActiveSheet
    
    ' 最終行を取得
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
    
    ' 出力データ用の配列をリサイズ
    ReDim outputArr(1 To lastRow - 1, 1 To 14)
    
    ' データを配列に格納
    For i = 2 To lastRow
        ' メールアドレスの形式を確認
        If IsValidEmail(ws.Cells(i, 1).Value) Then
            For j = 1 To 14
                ' セルの値を取得
                Dim cellValue As Variant
                cellValue = ws.Cells(i, j).Value
        
                ' セルの値が "[TAB]" の場合はタブの文字コード（vbTab）に置き換え
                If cellValue = "[Tab]" Then
                    cellValue = Null    '一度NULLに書き換え
                    cellValue = vbTab
                End If
                
                ' セルの値が "[CRLF]" の場合はキャリッジリターンとラインフィードの文字コード（vbCrLf）に置き換え
                If cellValue = "[CRLF]" Then
                    cellValue = Null    '一度NULLに書き換え
                    cellValue = vbCrLf
                End If

                ' 先頭と末尾のスペース削除
                cellValue = Trim(cellValue)
                
                ' 出力配列に値を格納
                outputArr(i - 1, j) = cellValue
            Next j
        End If
    Next i

    ' ファイル名を設定（シートの名前）
    fileName = ws.Name & ".txt"
    
     ' テキストファイルとして出力
    Open fileName For Output As #1
    For i = 1 To UBound(outputArr, 1)
        For j = 1 To UBound(outputArr, 2)
            Print #1, outputArr(i, j);
        Next j
    Next i
    Close #1
    
    ' ファイルの存在をチェックしてメッセージを表示
    If Dir(fileName) <> "" Then
        MsgBox "テキストファイルの出力が完了しました。", vbInformation
    End If
End Sub

Function IsValidEmail(ByVal email As String) As Boolean
    ' メールアドレスの形式を検証する関数
    ' ここでは簡易的な形式チェックを行っています    
    Dim regex As Object    
    Set regex = CreateObject("VBScript.RegExp")    
    With regex
        .Pattern = "^[\w\-\.\+]+@[a-zA-Z0-9\.\-]+\.[a-zA-Z0-9\-]+$"
        .Global = True
    End With    
    IsValidEmail = regex.Test(email)    
    Set regex = Nothing
End Function
```

## ３．利用の様子
<B>（１）ExcelVBA の動作</B>

|①ExcelVBA起動|②マクロ呼出|③マクロ実行| 
|:-:|:-:|:-:|
|![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667967/f680518d-ef52-5ec6-e0b1-899e69fa3dce.png) |![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667967/a18db9f6-3f6a-e3b9-2ff6-2c7b80f1837d.png)|![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667967/9dd09ca8-04cd-08e9-ea54-79726edbfb2f.png)| 

|  |  |④テキスト書出完了| 　  | 　  | 　 |⑤生成されたTab区切りテキスト|  |  |
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|||![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667967/700b401b-bcb9-0970-cea7-653080d7eb4e.png)||||![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667967/17cb675a-4b98-727c-3db0-fe8e1b254fc9.png)||||

<B>（２）SMXメールボックスでのユーザ一括登録</B>

|①ユーザー一括作成リンク|②ファイルを選択|③生成したTab区切りテキストアップロード|
|:-:|:-:|:-:|
|![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667967/3aba65a2-af59-1b76-40c3-1959811ff82c.png)|![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667967/834b796d-ea1f-d6f7-0a81-121986dcca0b.png)|![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667967/50019031-d8c4-d819-3346-3f4cd5faa2e5.png)|

|④取込エラーなし、登録|⑤登録完了|⑥ユーザーが取り込まれたことの確認|
|:-:|:-:|:-:|
|![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667967/6a622d14-3a0e-cda0-0d9f-43240c63c8d6.png)|![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667967/a7538a21-67e4-0553-fe01-02fc391168f1.png)|![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667967/9b597341-7709-b2a8-1ee9-6f4f844f5d49.png)|

以上です。