0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

お題は不問!Qiita Engineer Festa 2023で記事投稿!

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

Last updated at Posted at 2023-07-11

1.きっかけ

『IIJ セキュアMX(SMX)メールボックスプラス』の契約をしまして、メールアドレスの新規登録を行おうと思ったのですが、ユーザー一括登録の方法はあるものの、
CSVのこのテンプレートに入力すれば一括登録ができます、のようなツールは無いようでした。

(IIJ セキュアMXサービス メールボックスプラスオプション ご利用の手引き[管理者用]から引用)

記述書式・記述例 テキスト出力項目
IIJ-1.png IIJ-2.png

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

2.作成

(1)まずはchatGPTにインプットしてベースのコードを作ってもらいました。

【参考:以下クリックで展開】SMX メールボックス ユーザー一括登録用テキスト出力マクロ(chatGPTへのインプット)
次のExcelVBAコード(標準モジュール)「sub テキスト出力()」を書いてください。

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

以上

(2)実際のコード(chatGPTの出力から、一部手直し)

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

3.利用の様子

(1)ExcelVBA の動作

①ExcelVBA起動 ②マクロ呼出 ③マクロ実行
1.png 2.png 3.png
④テキスト書出完了       ⑤生成されたTab区切りテキスト
4.png 5.png

(2)SMXメールボックスでのユーザ一括登録

①ユーザー一括作成リンク ②ファイルを選択 ③生成したTab区切りテキストアップロード
1.png 2.png 3.png
④取込エラーなし、登録 ⑤登録完了 ⑥ユーザーが取り込まれたことの確認
4.png 5.png 6.png

以上です。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?