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

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

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

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

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

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

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

14 セル列番号を英字の列名に変換

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

 今回は、Python-xlwingsで、

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

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


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

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

Img7_3_51


1. 指定列のセルの文字列を1文字ずつ分解

 3列目を指定して、

 1行目のセルから取得した文字列を上端から下端まで順に1文字ずつ分解した文字を、

 2行目列から13行目までのセルに順に格納してみます。

xlwingsをインポート

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

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

変数『読取行』に『1』行目を代入

変数『最小行』に『2』行目を代入

変数『列番号』に『3』列目を代入

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

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

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

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

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

 【ソースコードパネル】

# PXS7111.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_52

 2行目から11行目までのセルに『セ』『ル』『に』『文』『字』『を』『書』『き』『こ』『む』が、

 書きこまれました。



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

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

 1行目のセルから取得した文字列を上端から下端まで順に1文字ずつ分解した文字を、

 2行目列から13行目までのセルに順に格納してみます。

xlwingsをインポート

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

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

変数『読取行』に『1』行目を代入

変数『最小行』に『2』行目を代入

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

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

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

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

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

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

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

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

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

 【ソースコードパネル】

# PXS7112.py

import xlwings

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

st = wb.sheets['sheet3']

読取行 = 1

最小行 = 2

開始列 = 3

 

最大列 = st.range(1,st.cells.last_cell.column).end('left').column

終了列 = 最大列 + 1

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

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

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

最大文字数 = len(txt)

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

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

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

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

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


Img7_3_53

 3列目(C列)から12列目(L列)にかけて、1行目のセルから取得した文字列を

 上端から下端まで順に1文字ずつ分解した文字が、2行目から13行目までのセルに順に書きこまれました。



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

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

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