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

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

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

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

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

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

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

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

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

 Python-xlwingsでは、get_addressメソッドをつかえば、range(行番号, 列番号)オブジェクトから

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

Img7_4_11

 get_addressメソッドでは、行番号と列番号を指定することで

 セル番地(英字の列アドレスと数字の行アドレス)を取得します。


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

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

Img7_4_12


1. 指定列のセル番地を取得

 1行目の右端セルの最大列番号を取得した後、

 セル(1, 最大列番号)に対して

 get_addressメソッドの引数

 行参照にTrue:絶対参照列参照にTrue:絶対参照を、

 行参照にTrue:絶対参照列参照にFalse:相対参照を、

 行参照にFalse:相対参照列参照にTrue:絶対参照を、

 行参照にFalse:相対参照列参照にFalse:相対参照を、

 入れて、

 セル番地を取得し、それぞれ

 セル(2, 最大列番号)、

 セル(3, 最大列番号)、

 セル(4, 最大列番号)、

 セル(5, 最大列番号)

 に格納してみます。

xlwingsをインポート

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

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

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

セル(1,最大列)の行:絶対参照・列:絶対参照のセル番地を取得し、セル(2,最大列)の値に格納

セル(1,最大列)の行:絶対参照・列:相対参照のセル番地を取得し、セル(3,最大列)の値に格納

セル(1,最大列)の行:相対参照・列:絶対参照のセル番地を取得し、セル(4,最大列)の値に格納

セル(1,最大列)の行:相対参照・列:相対参照のセル番地を取得し、セル(5,最大列)の値に格納

 【ソースコードパネル】

import xlwings

wb = xlwings.Book('WkBook4.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(True, True)

st.range(3, 最大列).value = st.range(1, 最大列).get_address(True, False)

st.range(4, 最大列).value = st.range(1, 最大列).get_address(False, True)

st.range(5, 最大列).value = st.range(1, 最大列).get_address(False, False)

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


Img7_4_13

 セルK2に『$K$1』、セルK3に『K$1』、セルK4に『$K1』、セルK5に『K1』が書きこまれました。



2. 列のループでセル番地を取得

 1行目の右端セルの最大列番号を取得した後、

 最小列から最大列までのセル(1, 列番号)に対して

 get_addressメソッドの引数

 行参照にTrue:絶対参照列参照にTrue:絶対参照を、

 行参照にTrue:絶対参照列参照にFalse:相対参照を、

 行参照にFalse:相対参照列参照にTrue:絶対参照を、

 行参照にFalse:相対参照列参照にFalse:相対参照を、

 入れて、

 セル番地を取得し、それぞれ

 セル(2, 列番号)、

 セル(3, 列番号)、

 セル(4, 列番号)、

 セル(5, 列番号)

 に格納してみます。

xlwingsをインポート

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

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

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

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

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

変数『列番号』を『開始列』から『終了列』までカウントアップしながら

以下の処理を繰り返す

セル(1,列番号)の行:絶対参照・列:絶対参照のセル番地を取得し、セル(2,列番号)の値に格納

セル(1,列番号)の行:絶対参照・列:相対参照のセル番地を取得し、セル(3,列番号)の値に格納

セル(1,列番号)の行:相対参照・列:絶対参照のセル番地を取得し、セル(4,列番号)の値に格納

セル(1,列番号)の行:相対参照・列:相対参照のセル番地を取得し、セル(5,列番号)の値に格納

 【ソースコードパネル】

import xlwings

wb = xlwings.Book('WkBook4.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(True, True)

st.range(3, 列番号).value = st.range(1, 列番号).get_address(True, False)

st.range(4, 列番号).value = st.range(1, 列番号).get_address(False, True)

st.range(5, 列番号).value = st.range(1, 列番号).get_address(False, False)

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


Img7_4_14

 B列からK列にかけて、1行目のセルから取得したセル番地が、

 2行目から5行目のセルに順に書きこまれました。



 このように、get_addressメソッドをつかえば、

 range(行番号, 列番号)オブジェクトから

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