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

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

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

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

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

15 文字列の中で特定の文字の位置インデックスを取得

16 セルの書体を変更

17 セルの文字サイズを変更

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

 Python-xlwingsのget_addressメソッドをつかうと、range(行番号, 列番号)オブジェクトから

 range(セル番地)オブジェクトのセル番地を取得できます。

 Pythonのreplace関数をつかうと、対象となる文字列式で特定の文字列を指定した文字列に

 置き換えた文字列を取得できます。

 そして、Python-xlwingsではget_addressメソッドreplace関数を組み合わせると、

 指定した列番号から英字の列名を取得できます。

Img7_5_11

 予め、次のようなExcelシート『sheet1』を用意して、Excelブック名を『WkBook5.xlsx』として保存します。

Img7_5_12


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プログラムを実行してみます。


Img7_5_13

 セル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プログラムを実行してみます。


Img7_5_14

 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プログラムを実行してみます。


Img7_5_15

 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プログラムを実行してみます。


Img7_5_16

 2列目(B列)から11列目(K列)にかけて、2行目のセルに1行目のセル番地『X1』が書きこまれた後、

 セル番地『X1』から、『1』を取り除いた英字の列名『X』が、3行目のセルに順に書きこまれました。



 次は、直接、get_addressメソッドreplace関数を組み合わせて、

 セル番地から、英字の列名を取得してみます。

 先ず、セルB2からK3をクリアします。

Img7_5_17

 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プログラムを実行してみます。


Img7_5_18

 B列からK列にかけて、1行目のセル番地『X1』から『1』を取り除いた

 英字の列名『X』が、3行目のセルに順に書きこまれました。



 このように、For文(ループ処理)のブロックの中で、

 get_addressメソッドで取得したセル番地からreplaceメソッドで行番号を取り除く

 というコードを記述すれば、複数のセル番地から英字の列名を取得することができます。