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