「excel マクロ 2文字づつ配列に入れたい」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。
アクティブセルに入力されている文字列を1文字ずつ配列変数に格納するExcelマクロをご紹介しています。
これの2文字版を探している方による検索です。
2文字ずつ配列変数に格納するサンプルマクロ
以下のようなマクロで、アクティブセルに入力されているデータを、2文字ずつ配列変数に格納・代入することができます。
Dim org As String
Dim arr() As String
Dim cnt As Long
Dim i As Long
org = ActiveCell.Value
cnt = (Len(org) + 1) \ 2
ReDim arr(1 To cnt)
For i = 1 To cnt
arr(i) = Mid(org, i * 2 - 1, 2)
Next i
Stop
上記のマクロを実行すると、Stop文の箇所でステップ実行モードになります。この状態でVBE(Visual Basic Editor)のメニュー[表示]-[ローカルウィンドウ]からローカルウィンドウを表示すれば、下図のように配列変数・arr()に、アクティブセルの値が2文字ずつ格納されていることを確認できます。
サンプルマクロの解説
2文字ずつ格納するためには、
配列の要素数をどう計算するか
元の文字列から2文字ずつ取り出すにはどうすればいいのか
が、1文字ずつの格納する場合に追加される課題となります。
要素数の計算をここでは以下のような式で求めました。
cnt = (Len(org) + 1) \ 2
Len関数は文字数を求める関数、演算子「\」は割り算の商だけを計算してくれます。
2文字ずつ格納するというわけですから、必要な配列の要素数は、元の文字数の約半分です。
細かく見ると、
元の文字数が2文字の場合、必要な要素は1つ
元の文字数が3文字の場合、必要な要素は2つ
元の文字数が4文字の場合も必要な要素は2つ
元の文字数が5文字の場合、必要な要素は3つ
元の文字数が6文字の場合も必要な要素は3つ
です。
このような計算をするには、元の文字数に「1」を加算しておいてから「2」で割り算した、整数部分だけを求めればいいわけです。
それが、
cnt = (Len(org) + 1) \ 2
の「(Len(org) + 1) \ 2」です。
配列に格納する部分は、1文字ずつ格納する場合と同じくMid関数を使っています。
arr(i) = Mid(org, i * 2 - 1, 2)
Mid関数の第3引数に「2」を指定することで、2文字ずつという指定ができます。
元の文字列から、2文字ずつ順番に取得していくためには、
1文字目から2文字
3文字目から2文字
5文字目から2文字
のように、取得する先頭の位置を1・3・5のように変化させる必要があります。それがMid関数の第2引数「i * 2 - 1」の意味です。
VBA, Visual Basic for Applications
Home » エクセルマクロ・Excel VBAの使い方 » 配列 » アクティブセルのデータを2文字ずつ配列変数に格納・代入するExcelマクロ