「エクセル マクロ 文字列を 1文字ずつ配列に」
「excel vba 文字を配列に入れる 1文字づつ」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスが、時々あることに気づきました。
Excel VBA(Visual Basic for Applications)で、何らかの文字列を一文字ずつ配列変数に代入・格納するにはどうすればいいのかを探している方による検索です。
アクティブセルの文字列を一文字ずつ配列に格納するサンプルマクロ
「配列にセルの文字を一文字ずつ割り当てる」
といった検索でのアクセスもありますので、ここではアクティブセルの値を一文字ずつ配列に代入するサンプルマクロをご紹介しておきます。
Dim arr() As String
Dim str As String
Dim i As Long
str = ActiveCell.Value
ReDim arr(1 To Len(str))
For i = 1 To UBound(arr)
arr(i) = Mid(str, i, 1)
Next i
Stop
End Sub上記のマクロを実行すると、End Subの直前のStop文で、ステップ実行モードになります。
この状態でローカルウィンドウを表示すれば、下図のように、アクティブセル内の文字列が一文字ずつ配列に格納されていることを確認できます。
サンプルマクロの解説
アクティブセルの値を変数・strに代入して、
str = ActiveCell.Value
配列のサイズを決めます。
ReDim arr(1 To Len(str))
Excelマクロの場合、配列の添字の最小値は「1」のほうが扱いやすいことが多いので、ここでは添字の最小値を「1」、アクティブセルの値の文字数(Len(str))を添字の最大値としています。
1から、添字の最大値までループを回して、
For i = 1 To UBound(arr)
Mid関数を使って、1文字ずつ配列変数・arr()に代入しています。
arr(i) = Mid(str, i, 1)
添字を0からにした場合のサンプルマクロ
Excelマクロの場合は、上記のように配列変数の添字の最小値を「1」にするほうが扱いやすいことが多いと思いますが、添字を「0」からにする場合は、以下のようなマクロです。
Dim arr() As String
Dim str As String
Dim i As Long
str = ActiveCell.Value
ReDim arr(0 To Len(str) - 1)
For i = 0 To UBound(arr)
arr(i) = Mid(str, i + 1, 1)
Next i
Stop
End Subなお、配列変数のサイズを決めるReDim文ですが、添字を「0」からにした場合は、
ReDim arr(Len(str) - 1)
のように、最小値側を書かない方が多いと思いますが、ここでは先にご紹介した「1」からにした場合、
ReDim arr(1 To Len(str))
との比較のために、
ReDim arr(0 To Len(str) - 1)
というコードでご紹介しています。
Home » エクセルマクロ・Excel VBAの使い方 » 配列 » セル内の文字列を1文字ずつ配列変数に代入するExcelマクロ