動作検証バージョン:Windows 11 Home + 64bit Excel バージョン 2503(ビルド18623.20178クイック実行)
「vba 数字を1文字ずつコンマで区切って取得」
といった検索キーワードで、このサイト『インストラクターのネタ帳』へアクセスがありました。
[スポンサードリンク]
1文字ずつカンマで区切りながら取得するサンプルマクロ
以下のExcelマクロを実行すると、アクティブセルの値が1文字ずつカンマで区切られてメッセージボックスに表示されます。
Sub 値を1文字ずつカンマで区切って取得する_1()
Dim org As String
org = ActiveCell.Value
Dim ret As String
Dim i As Long
For i = 1 To Len(org)
ret = ret & Mid(org, i, 1) & ","
Next
ret = Left(ret, Len(ret) - 1)
Dim org As String
org = ActiveCell.Value
Dim ret As String
Dim i As Long
For i = 1 To Len(org)
ret = ret & Mid(org, i, 1) & ","
Next
ret = Left(ret, Len(ret) - 1)
MsgBox ret
End Sub既にご紹介しているとおりMid関数とLen関数を使うと1文字ずつ取得できます。
上記のマクロでは、このFor~Nextループの中で、結果用の変数retに「,」を後ろに連結しながら追記しています。
Dim ret As String Dim i As Long For i = 1 To Len(org) ret = ret & Mid(org, i, 1) & "," Next
ただし、このFor~Nextループを抜けると、末尾にも「,」がついていますから、Left関数を使って末尾の1文字を削除しています。
ret = Left(ret, Len(ret) - 1)
1文字ずつカンマで区切りながら取得するサンプルマクロ2
以下のマクロでも同じ結果になります。
Sub 値を1文字ずつカンマで区切って取得する_2()
Dim org As String
org = ActiveCell.Value
Dim ret As String
Dim i As Long
For i = 1 To Len(org)
ret = ret & Mid(org, i, 1)
If i < Len(org) Then
ret = ret & ","
End If
Next
Dim org As String
org = ActiveCell.Value
Dim ret As String
Dim i As Long
For i = 1 To Len(org)
ret = ret & Mid(org, i, 1)
If i < Len(org) Then
ret = ret & ","
End If
Next
MsgBox ret
End Sub先にご紹介したマクロでは、For~Nextループ内で必ず「,」を付加してループ処理を抜けてから末尾のカンマを削除していましたが、
For i = 1 To Len(org) ret = ret & Mid(org, i, 1) & "," Next ret = Left(ret, Len(ret) - 1)
このマクロではFor~Nextループ内にIf文を入れて最後の文字でないときにだけ末尾に「,」を付加しています。
For i = 1 To Len(org) ret = ret & Mid(org, i, 1) If i < Len(org) Then ret = ret & "," End If Next
Grokに私が依頼したときにはこちらのロジックでコードーを生成してくれました。
[スポンサードリンク]
- Older:Windows11でPIN入力画面が表示されない
Home » エクセルマクロ・Excel VBAの使い方 » VBA関数 » VBAで1文字ずつカンマで区切りながら取得する