【関数・プロパティ設定をつかう】
8 文字が入っているセルの最大行を取得
9 文字が入っているセルの最大列を取得
10 行のループで複数の文字列を連続分解
11 列のループで複数の文字列を連続分解
12 指定した行番号と列番号のセル番地を取得
13 特定の文字列を指定文字列に置き換える
14 セル列番号を英字の列名に変換
列のループで複数の文字列を連続分解
パイさん
「今回は、Excel VBA/マクロによって、
Mid関数と文字列のループ処理、更に、列のループ処理を組み合わせて、
複数列の文字列を上端から下端まで順に1文字ずつ分解してみましょう。
予め、次のようなExcelシートを用意します。」
パイさん
「Excelの1行目の文字が入っているセルの最大列を取得した後、最小列から最大列にかけて、
1行目のセルから取得した文字列を上端から下端まで順に1文字ずつ分解した文字を、
2行目から13行目までのセルに順に格納してみましょう。」
定数『読取行』に『1』行を格納
定数『最小行』に『2』行を格納
定数『最小列』にC列つまり『3』列を格納
最大列を整数型の変数『最大列』として定義
列番号を整数型の変数『列番号』として定義
行番号を長整数型の変数『行番号』として定義
対象文字列を文字列型の変数『txt』として定義
対象文字列の文字数を整数型の変数『最大文字数』として定義
文字数を取り出す開始位置を整数型の変数『文字位置』として定義
1行目の最大列を取得し、変数『最大列』に格納
変数『列番号』を『最小列』から『最大列』までカウントアップしながら以下の処理を繰り返す
変数『txt』にセル(『読取行』,『列番号』)の値を代入
Len関数をつかい変数『txt』から文字数を取得し、変数『最大文字数』に格納
変数『文字位置』を0から『最大文字数』までカウントアップしながら以下の処理を繰り返す
変数『行番号』に『最小行』+『文字位置』-『1』を代入
セル(『行番号』,『列番号』)の値に変数『txt』から取得した『文字位置』の文字を代入
ソンくん
「『読取行』を『1』、『最小行』を『2』、『最小列』を『3』として定数宣言、
『最大列』・『列番号』を整数型として変数宣言、
『行番号』を長整数型として変数宣言、
『txt』を文字列型として定数宣言、
『最大文字数』・『文字位置』を整数型として変数宣言。
Const 読取行 = 1
Const 最小行 = 2
Const 最小列 = 3
Dim 最大列 As Integer
Dim 列番号 As Integer
Dim 行番号 As Long
Dim txt As String
Dim 最大文字数 As Integer
Dim 文字位置 As Integer
Excelの1行目の文字が入っているセルの最大列を取得します。
最大列 = Cells(読取行, Columns.Count).End(xlToLeft).Column
最大列には『12』が入ります。
セル(『読取行』,『列番号』)の値を変数『txt』に格納
Len関数をつかい変数『txt』から文字数を取得し、変数『最大文字数』に格納
1文字目から『最大文字数』まで1文字ずつ『文字位置』をカウントアップしていきながら、
そのつど、変数『最小行』・変数『文字位置』から変数『行番号』を算出し、
そして、変数『txt』の値を1文字ずつ読みとり、セル(行番号, 列番号)に書きこみます。」
txt = Cells(読取行, 列番号).Value
最大文字数 = Len(txt)
For 文字位置 = 1 To 最大文字数
行番号 = 最小行 + 文字位置 - 1
Cells(行番号, 列番号).Value = Mid(txt, 文字位置, 1)
Next 文字位置
パイさん
「OKです。
このプログラムコードの集まりを【ブロックA】とします。
それから、Excelの『最小列』(3列目)から『最大列』(12列目)にかけて、
【ブロックA】(各列の処理)をループ処理で実行します。
そこで、【ブロックA】をはさむように、
【ブロックA】の前後に
For 列番号 = 最小列 To 最大列と
Next 列番号を
追加します。」
For 列番号 = 最小列 To 最大列
【ブロックA】
Next 列番号
Sub 列ループ_1文字連続分解()
Const 読取行 = 1
Const 最小行 = 2
Const 最小列 = 3
Dim 最大列 As Integer
Dim 列番号 As Integer
Dim 行番号 As Long
Dim txt As String
Dim 最大文字数 As Integer
Dim 文字位置 As Integer
最大列 = Cells(読取行, Columns.Count).End(xlToLeft).Column
For 列番号 = 最小列 To 最大列
txt = Cells(読取行, 列番号).Value
最大文字数 = Len(txt)
For 文字位置 = 1 To 最大文字数
行番号 = 最小行 + 文字位置 - 1
Cells(行番号, 列番号).Value = Mid(txt, 文字位置, 1)
Next 文字位置
Next 列番号
End Sub
パイさん
「それでは、そのマクロを実行してみましょう。」
ソンくん
「Excelの3列目(C列)から12列目(L列)にかけて、1行目のセルから取得した文字列を
上端から下端まで順に1文字ずつ分解した文字が、2行目から13行目までのセルに順に書きこまれました。」
パイさん
「このように、Mid関数と文字列のループ処理、更に、列のループ処理を組み合わせると、
複数列の文字列を上端から下端まで順に1文字ずつ分解することができます。」