【関数・メソッド・プロパティ設定をつかう】
8 文字が入っているセルの最大行を取得
9 文字が入っているセルの最大列を取得
10 行のループで複数の文字列を連続分解
11 列のループで複数の文字列を連続分解
12 指定した行番号と列番号のセル番地を取得
13 特定の文字列を指定文字列に置き換え
14 セル列番号を英字の列名に変換
列のループで複数の文字列を連続分解
今回は、Python-xlwingsで、
ブラケット1文字スライス書式と文字列のループ処理、更に、列のループ処理を組み合わせて、
複数列の文字列を上端から下端まで順に1文字ずつ分解してみます。
予め、次のようなExcelシート『sheet4』を用意して、
Excelブック名を『WkBook3.xlsx』として保存します。
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プログラムを実行してみます。
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プログラムを実行してみます。
3列目(C列)から12列目(L列)にかけて、1行目のセルから取得した文字列を
上端から下端まで順に1文字ずつ分解した文字が、2行目から13行目までのセルに順に書きこまれました。
このように、ブラケット1文字スライス書式と文字列のループ処理、
更に、列のループ処理を組み合わせると、
複数列の文字列を上端から下端まで順に1文字ずつ分解することができます。