【ループ処理でセルに値を書きこむ】

 1 多数のセルの行番号と列番号を直接指定して値を書きこむ

 2 多数のセルの行番号と列番号を変数で指定して値を書きこむ

 3 ループ処理で多数行のセルに値を書きこむ

 4 ループ処理で多数列のセルに値を書きこむ

 5 ダブルループ処理で多数行×多数列のセルに値を書きこむ

多数のセルの行番号と列番号を直接指定して値を書きこむ

 Python-xlwingsrange行番号列番号については二つの指定方法がありますが、

 今回は、rangeオブジェクトの引数となる行番号列番号

 直接指定する方法により、多数のセルに値を書きこんでみます。


 セル位置行番号列番号で指定するrangeオブジェクトを再び紹介します。

T3_1_Img

 xlwingsをつかいPythonでExcelを操作するときは、

 メモリ上に、Workbookオブジェクトを生成、更に、sheetオブジェクトを生成して、

 そのsheetを操作します。( 『rangeの行番号と列番号を直接指定』参照 )

 Workbookオブジェクト名を『wb』、sheetオブジェクト名を『st』としておきます。

 予め、ソースコードパネルに

import xlwings

wb = xlwings.Book()

st = wb.sheets[0]

 と記述しておきます。



1. 1行・1列

 まずは、1行目・1列目のセルの値に『1行1列』という文字列を代入してみます。

 rangeオブジェクトの引数となる行番号を1・列番号を1とし、

 そのセルの値に『1行1列』を代入するのだから、

st.range(1,1).value = "1行1列"

 という順次処理1追加されます。


 ソースコードパネルは、

import xlwings

wb = xlwings.Book()

st = wb.sheets[0]

st.range(1,1).value = "1行1列"

 となります。


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

Img3_1_2

 1行目・1列目のセルに、『1行1列』が、書きこまれました。



2. 1~3行・1列

 列を1列目に固定して、行を1行目から3行目まで1行ずつカウントアップしていき、

 3つのセルに対して、『X行1列』を設定します。


 列を1列目に固定して、行を1行目から3行目まで1行ずつカウントアップしていくということは、

 1行目・1列目のセルに『1行1列』

 2行目・1列目のセルに『2行1列』

 3行目・1列目のセルに『3行1列』

 を設定するということだから、

st.range(1,1).value = "1行1列"

st.range(2,1).value = "2行1列"

st.range(3,1).value = "3行1列"

 という順次処理3追加されます。


 ソースコードパネルは、

import xlwings

wb = xlwings.Book()

st = wb.sheets[0]

st.range(1,1).value = "1行1列"

st.range(2,1).value = "2行1列"

st.range(3,1).value = "3行1列"

 となります。


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

Img3_1_4

 1行目・1列目のセルに『1行1列』、

 2行目・1列目のセルに『2行1列』、

 3行目・1列目のセルに『3行1列』、

 が書きこまれました。



3. 1行・1~3列

 行を1行目に固定して、列を1列目から3列目まで1列ずつカウントアップしていき、

 3つのセルに対して、『1行Y列』を設定します。


 行を1行目に固定して、列を1列目から3列目まで1列ずつカウントアップしていくということは、

 1行目・1列目のセルに『1行1列』

 1行目・2列目のセルに『1行2列』

 1行目・3列目のセルに『1行3列』

 を設定するということだから、

st.range(1,1).value = "1行1列"

st.range(1,2).value = "1行2列"

st.range(1,3).value = "1行3列"

 という順次処理3追加されます。


 ソースコードパネルは、

import xlwings

wb = xlwings.Book()

st = wb.sheets[0]

st.range(1,1).value = "1行1列"

st.range(1,2).value = "1行2列"

st.range(1,3).value = "1行3列"

 となります。


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

Img3_1_6

 1行目・1列目のセルに『1行1列』、

 1行目・2列目のセルに『1行2列』、

 1行目・3列目のセルに『1行3列』、

 が書きこまれました。



4. 1~3行・1~3列

 行を1行目から3行目まで1行ずつカウントアップしていきながら、

 列も1列目から3列目まで1列ずつカウントアップしていき、

 9つのセルに対して、『X行Y列』を設定します。


 行が1行目から3行目まで1行ずつカウントアップしていきながら、

 列も1列目から3列目まで1列ずつカウントアップしていくということは、

 1行目・1列目のセルに『1行1列』

 1行目・2列目のセルに『1行2列』

 1行目・3列目のセルに『1行3列』

 2行目・1列目のセルに『2行1列』

 2行目・2列目のセルに『2行2列』

 2行目・3列目のセルに『2行3列』

 3行目・1列目のセルに『3行1列』

 3行目・2列目のセル『3行2列』

 3行目・3列目のセルに『3行3列』

 を設定するということだから、

st.range(1,1).value = "1行1列"

st.range(1,2).value = "1行2列"

st.range(1,3).value = "1行3列"

st.range(2,1).value = "2行1列"

st.range(2,2).value = "2行2列"

st.range(2,3).value = "2行3列"

st.range(3,1).value = "3行1列"

st.range(3,2).value = "3行2列"

st.range(3,3).value = "3行3列"

 という順次処理9追加されます。


 ソースコードパネルは、

import xlwings

wb = xlwings.Book()

st = wb.sheets[0]

st.range(1,1).value = "1行1列"

st.range(1,2).value = "1行2列"

st.range(1,3).value = "1行3列"

st.range(2,1).value = "2行1列"

st.range(2,2).value = "2行2列"

st.range(2,3).value = "2行3列"

st.range(3,1).value = "3行1列"

st.range(3,2).value = "3行2列"

st.range(3,3).value = "3行3列"

 となります。


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

Img3_1_8

 1行目・1列目のセルに『1行1列』、

 1行目・2列目のセルに『1行2列』、

 1行目・3列目のセルに『1行3列』、

 2行目・1列目のセルに『2行1列』、

 2行目・2列目のセルに『2行2列』、

 2行目・3列目のセルに『2行3列』、

 3行目・1列目のセルに『3行1列』、

 3行目・2列目のセルに『3行2列』、

 3行目・3列目のセルに『3行3列』、

 が書きこまれました。



 今回は、rangeオブジェクトの引数となる行番号列番号直接指定する方法により、

 多数のセルに値を書きこむ順次処理を紹介しました。

 1. 1行・1では1回のセルに値を書きこむ順次処理

 2. 1~3行・1では3回のセルに値を書きこむ順次処理

 3. 1行・1~3では3回のセルに値を書きこむ順次処理

 4. 1~3行・1~3では9回のセルに値を書きこむ順次処理を追加しました。


 でも、セルの行番号と列番号を指定するとき、

 rangeオブジェクトの引数:行番号と列番号を直接記述するという手法は、

 マジックナンバーと呼ばれるやり方で、プログラムのメンテナンス上あまりお勧めできません。

 では、rangeオブジェクトの引数となる行番号列番号間接的に指定する方法により、

 多数のセルに値を書きこむにはどうしたらよいのでしょうか。

 これについては、次回『多数のセルの行番号と列番号を変数で指定して値を書きこむ』で紹介します。