Home » エクセルマクロ・Excel VBAの使い方 » 配列 » アクティブセルのデータを2文字ずつ配列変数に格納・代入するExcelマクロ

アクティブセルのデータを2文字ずつ配列変数に格納・代入するExcelマクロ

対象:Excel2007, Excel2010, Excel2013

「excel マクロ 2文字づつ配列に入れたい」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。

アクティブセルに入力されている文字列を1文字ずつ配列変数に格納するExcelマクロをご紹介しています。

これの2文字版を探している方による検索です。

[スポンサードリンク]

2文字ずつ配列変数に格納するサンプルマクロ

以下のようなマクロで、アクティブセルに入力されているデータを、2文字ずつ配列変数に格納・代入することができます。

Sub アクティブセルの文字列を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

End Sub

上記のマクロを実行すると、Stop文の箇所でステップ実行モードになります。この状態でVBE(Visual Basic Editor)のメニュー[表示]-[ローカルウィンドウ]からローカルウィンドウを表示すれば、下図のように配列変数・arr()に、アクティブセルの値が2文字ずつ格納されていることを確認できます。

アクティブセルのデータを2文字ずつ配列変数に格納するExcelマクロ

サンプルマクロの解説

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マクロ

「配列」の記事一覧

検索


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

.