【関数・メソッド・プロパティ設定をつかう】
11 列のループで複数の文字列を連続分解
12 指定した行番号と列番号のセル番地を取得
13 特定の文字列を指定文字列に置き換え
14 セル列番号を英字の列名に変換
15 文字列の中で特定の文字の位置インデックスを取得
16 セルの書体を変更
17 セルの文字サイズを変更
セル列番号を英字の列名に変換
Python-xlwingsのget_addressメソッドをつかうと、range(行番号, 列番号)オブジェクトから
range(セル番地)オブジェクトのセル番地を取得できます。
Pythonのreplace関数をつかうと、対象となる文字列式で特定の文字列を指定した文字列に
置き換えた文字列を取得できます。
そして、Python-xlwingsではget_addressメソッドとreplace関数を組み合わせると、
指定した列番号から英字の列名を取得できます。
予め、次のようなExcelシート『sheet1』を用意して、Excelブック名を『WkBook5.xlsx』として保存します。
1. セル列番号を英字の列名に変換する
1行目の文字が入っているセルの最大列を取得した後、
get_addressメソッドの引数、行参照に『False:相対参照』、列参照に『False:相対参照』を入れて、
1行目のセル:range(1, 最大列番号)オブジェクトのセル番地を取得し、
2行目のセル:range(2, 最大列番号)に格納してみます。
xlwingsをインポート
Excelファイル『Wkbook5』をメモリ上に読みこみWorkbookオブジェクト『wb』を生成
Excelシート『sheet1』を読みこみsheetオブジェクト『st』を生成
1行目の最大列を取得し、変数『最大列』に格納
セル(1,最大列)の行:相対参照・列:相対参照のセル番地を取得し、セル(2,最大列)の値に格納
【ソースコードパネル】
import xlwings
wb = xlwings.Book('WkBook5.xlsx')
st = wb.sheets['sheet1']
最大列 = st.range(1,st.cells.last_cell.column).end('left').column
st.range(2, 最大列).value = st.range(1, 最大列).get_address(False, False)
それでは、そのPythonプログラムを実行してみます。
セルK2にセルK1のセル番地『K1』が書きこまれました。
次に、2行目のセル:range(2, 最大列)に格納されたセル番地『K1』から、
行番号『1』を取り除いた英字の列名を取得して、3行目のセル:range(3, 最大列)に格納してみます。
『1』を取り除くということは、『1』を『』(ブランク)に置き換えるということです。
『K1』で、『1』を『』に置き換えた英字の列名を取得して、3行目のセル:range(3, 最大列)に格納して
みます。
st.range(3, 最大列).value = st.range(2, 最大列).value.replace("1", "")
という順次処理を1行追加します。
【ソースコードパネル】
import xlwings
wb = xlwings.Book('WkBook5.xlsx')
st = wb.sheets['sheet1']
最大列 = st.range(1,st.cells.last_cell.column).end('left').column
st.range(2, 最大列).value = st.range(1, 最大列).get_address(False, False)
st.range(3, 最大列).value = st.range(2, 最大列).value.replace("1", "")
それでは、そのPythonプログラムを実行してみます。
2行目のセル:range(2, 11)に、1行目のセル:range(1, 11)のセル番地『K1』が書きこまれた後、
セル番地『K1』から、『1』を取り除いた英字の列名『K』が、3行目のセル:range(3, 11)に書きこまれました。
このように、get_addressメソッドで取得したセル番地からreplace関数で行番号を取り除くことで、
セル番地から英字の列名を取得することができます。
2. 列のループでセル列番号を英字の列名に変換する
1行目の文字が入っているセルの最大列を取得した後、
最小列から最大列にかけて、
get_addressメソッドの引数、行参照に『False:相対参照』、列参照に『False:相対参照』を入れて、
1行目のセル:range(1, 列番号)オブジェクトのセル番地を取得し、
2行目のセル:range(2, 列番号)に格納してみます。
xlwingsをインポート
Excelファイル『Wkbook5』をメモリ上に読みこみWorkbookオブジェクト『wb』を生成
Excelシート『sheet1』を読みこみsheetオブジェクト『st』を生成
変数『開始列』に『2』列目を代入
1行目の最大列を取得し、変数『最大列』に格納
変数『終了列』に『最大列』+1を代入
変数『列番号』を『開始列』から『終了列』までカウントアップしながら
以下の処理を繰り返す
セル(1,列番号)の行:相対参照・列:相対参照のセル番地を取得し、セル(2,列番号)の値に格納
【ソースコードパネル】
import xlwings
wb = xlwings.Book('WkBook5.xlsx')
st = wb.sheets['sheet1']
開始列 = 2
最大列 = st.range(1,st.cells.last_cell.column).end('left').column
終了列 = 最大列 + 1
for 列番号 in range(開始列,終了列):
st.range(2, 列番号).value = st.range(1, 列番号).get_address(False, False)
それでは、そのPythonプログラムを実行してみます。
B列からK列にかけて、1行目のセルから取得したセル番地が、2行目のセルに順に書きこまれました。
次に、最小列から最大列にかけて、2行目のセル:range(2, 列番号)に格納されたセル番地『X1』から、
『1』を取り除いた英字の列名を取得して、3行目のセル:range(3, 列番号)に格納してみます。
st.range(3, 列番号).value = st.range(2, 列番号).value.replace("1", "")
という順次処理を1行追加します。
【ソースコードパネル】
import xlwings
wb = xlwings.Book('WkBook5.xlsx')
st = wb.sheets['sheet1']
開始列 = 2
最大列 = st.range(1,st.cells.last_cell.column).end('left').column
終了列 = 最大列 + 1
for 列番号 in range(開始列,終了列):
st.range(2, 列番号).value = st.range(1, 列番号).get_address(False, False)
st.range(3, 列番号).value = st.range(2, 列番号).value.replace("1", "")
それでは、そのPythonプログラムを実行してみます。
2列目(B列)から11列目(K列)にかけて、2行目のセルに1行目のセル番地『X1』が書きこまれた後、
セル番地『X1』から、『1』を取り除いた英字の列名『X』が、3行目のセルに順に書きこまれました。
次は、直接、get_addressメソッドとreplace関数を組み合わせて、
セル番地から、英字の列名を取得してみます。
先ず、セルB2からK3をクリアします。
1行目の文字が入っているセルの最小列から最大列にかけて、
get_addressメソッドにより取得した、
1行目のセル:range(1, 列番号)オブジェクトのセル番地『X1』から、
『1』を取り除いた英字の列名を取得して、
3行目のセル:range(3, Cm)に格納してみます。
先ほどのプログラムコード
st.range(2, 列番号).value = st.range(1, 列番号).get_address(False, False)
と
st.range(3, 列番号).value = st.range(2, 列番号).value.replace("1", "")
を組み合わせます。
st.range(3, 列番号).value \
= st.range(1, 列番号).get_address(False, False).replace("1", "")
と記述します。
【ソースコードパネル】
import xlwings
wb = xlwings.Book('WkBook5.xlsx')
st = wb.sheets['sheet1']
開始列 = 2
最大列 = st.range(1,st.cells.last_cell.column).end('left').column
終了列 = 最大列 + 1
for 列番号 in range(開始列,終了列):
st.range(3, 列番号).value \
= st.range(1, 列番号).get_address(False, False).replace("1", "")
それでは、そのPythonプログラムを実行してみます。
B列からK列にかけて、1行目のセル番地『X1』から『1』を取り除いた
英字の列名『X』が、3行目のセルに順に書きこまれました。
このように、For文(ループ処理)のブロックの中で、
get_addressメソッドで取得したセル番地からreplaceメソッドで行番号を取り除く
というコードを記述すれば、複数のセル番地から英字の列名を取得することができます。