Home » エクセルマクロ・Excel VBAの使い方 » VBA関数 » VBAで1文字ずつカンマで区切りながら取得する

VBAで1文字ずつカンマで区切りながら取得する

動作検証バージョン: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)

 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

 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に私が依頼したときにはこちらのロジックでコードーを生成してくれました。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » VBA関数 » VBAで1文字ずつカンマで区切りながら取得する

「VBA関数」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.