【関数・メソッド・プロパティ設定をつかう】

7 文字列のループで1文字ずつ分解

8 文字が入っているセルの最大行を取得

9 文字が入っているセルの最大列を取得

10 行のループで複数の文字列を連続分解

11 列のループで複数の文字列を連続分解

12 指定した行番号と列番号のセル番地を取得

13 特定の文字列を指定文字列に置き換え

行のループで複数の文字列を連続分解

 今回は、Python-xlwingsで、

 ブラケット1文字スライス書式文字列のループ処理、更に、行のループ処理を組み合わせて、

 複数行の文字列を左端から右端まで順に1文字ずつ分解してみます


 予め、次のようなExcelシート『sheet3』を用意して、

 Excelブック名を『WkBook3.xlsx』として保存します。

Img7_3_41


 3行目を指定して、

 A列のセルから取得した文字列を左端から右端まで順に1文字ずつ分解した文字を、

 B列からM列までのセルに順に格納してみます。

xlwingsをインポート

Excelファイル『Wkbook3』をメモリ上に読みこみWorkbookオブジェクト『wb』を生成

Excelシート『sheet3』を読みこみsheetオブジェクト『st』を生成

定数『読取列』にA列つまり『1』列を代入

定数『最小列』にB列つまり『2』列を代入

定数『行番号』に『3』行目を代入

変数『txt』にセル(『行番号』,『読取列』)の値を代入

変数『txt』から文字数を取得し、変数『最大文字数』に格納

変数『位置インデックス』を0から『最大文字数』までカウントアップしながら以下の処理を繰り返す

変数『列番号』に『最小列』+『位置インデックス』を代入

セル(『行番号』,『列番号』)の値に変数『txt』から取得した『位置インデックス』の文字を代入

 【ソースコードパネル】

# PXS7101.py

import xlwings

wb = xlwings.Book('WkBook3.xlsx')

st = wb.sheets['sheet3']

読取列 = 1

最小列 = 2

行番号 = 3

 

txt = st.range(行番号, 読取列).value

最大文字数 = len(txt)

# ===== 文字列の先頭文字から最終文字へのループにより位置インデックスをカウントアップ =====

for 位置インデックス in range(0, 最大文字数):

列番号 = 最小列 + 位置インデックス

st.range(行番号, 列番号).value = txt[位置インデックス]

 それでは、そのPythonプログラムを実行してみます。


Img7_3_42

 2列目(B列)から11列目(K列)までのセルに『セ』『ル』『に』『文』『字』『を』『書』『き』『こ』『む』が、

 書きこまれました。



2. 行のループでセルの文字列を1文字ずつ連続分解

 3行目から12行目にかけて、

 A列のセルから取得した文字列を左端から右端まで順に1文字ずつ分解した文字を、

 B列からM列までのセルに順に格納してみます。

xlwingsをインポート

Excelファイル『Wkbook3』をメモリ上に読みこみWorkbookオブジェクト『wb』を生成

Excelシート『sheet3』を読みこみsheetオブジェクト『st』を生成

変数『読取列』にA列つまり『1』列を代入

変数『最小列』にB列つまり『2』列を代入

変数『開始行』に『3』行目を代入

1列目の最大行を取得し、変数『最大行』に格納

変数『終了行』に『最大行』+1を代入

変数『行番号』を『開始行』から『終了行』までカウントアップしながら以下の処理を繰り返す

変数『txt』にセル(『行番号』,『読取列』)の値を代入

変数『txt』から文字数を取得し、変数『最大文字数』に格納

変数『位置インデックス』を0から『最大文字数』までカウントアップしながら以下の処理を繰り返す

変数『列番号』に『最小列』+『位置インデックス』を代入

セル(『行番号』,『列番号』)の値に変数『txt』から取得した『位置インデックス』の文字を代入

 【ソースコードパネル】

# PXS7102.py

import xlwings

wb = xlwings.Book('WkBook3.xlsx')

st = wb.sheets['sheet3']

読取列 = 1

最小列 = 2

開始行 = 3

 

最大行 = st.range(st.cells.last_cell.row, 1).end('up').row

終了行 = 最大行 + 1

# ===== 行番号の開始行から終了行へのループにより行番号をカウントアップ =====

for 行番号 in range(開始行, 終了行):

txt = st.range(行番号, 読取列).value

最大文字数 = len(txt)

# ===== 文字列の先頭文字から最終文字へのループにより位置インデックスをカウントアップ =====

for 位置インデックス in range(0, 最大文字数):

列番号 = 最小列 + 位置インデックス

st.range(行番号, 列番号).value = txt[位置インデックス]

 それでは、そのPythonプログラムを実行してみます。


Img7_3_43

 3行目から12行目にかけて、A列のセルから取得した文字列を左端から右端まで

 順に1文字ずつ分解した文字が、2列目(B列)から13列目(M列)までのセルに順に書きこまれました。



 このように、ブラケット1文字スライス書式文字列のループ処理

 更に、行のループ処理を組み合わせると、

 複数行の文字列を左端から右端まで順に1文字ずつ分解することができます