1.きっかけ
『IIJ セキュアMX(SMX)メールボックスプラス』の契約をしまして、メールアドレスの新規登録を行おうと思ったのですが、ユーザー一括登録の方法はあるものの、
CSVのこのテンプレートに入力すれば一括登録ができます、のようなツールは無いようでした。
(IIJ セキュアMXサービス メールボックスプラスオプション ご利用の手引き[管理者用]から引用)
記述書式・記述例 | テキスト出力項目 |
---|---|
ならば、今のうちに作っておこうと思った次第です。
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起動 | ②マクロ呼出 | ③マクロ実行 |
---|---|---|
④テキスト書出完了 | ⑤生成されたTab区切りテキスト | |||||||
---|---|---|---|---|---|---|---|---|
(2)SMXメールボックスでのユーザ一括登録
①ユーザー一括作成リンク | ②ファイルを選択 | ③生成したTab区切りテキストアップロード |
---|---|---|
④取込エラーなし、登録 | ⑤登録完了 | ⑥ユーザーが取り込まれたことの確認 |
---|---|---|
以上です。