【ループ処理でセルに値を書きこむ】
1 多数のセルの行番号と列番号を直接指定して値を書きこむ
2 多数のセルの行番号と列番号を変数で指定して値を書きこむ
3 ループ処理で多数行のセルに値を書きこむ
4 ループ処理で多数列のセルに値を書きこむ
5 ダブルループ処理で多数行×多数列のセルに値を書きこむ
多数のセルの行番号と列番号を直接指定して値を書きこむ
Python-xlwingsのrangeの行番号と列番号については二つの指定方法がありますが、
今回は、rangeオブジェクトの引数となる行番号と列番号を
直接指定する方法により、多数のセルに値を書きこんでみます。
セル位置を行番号と列番号で指定するrangeオブジェクトを再び紹介します。
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プログラムを実行してみましょう。
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プログラムを実行してみましょう。
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プログラムを実行してみましょう。
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プログラムを実行してみましょう。
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オブジェクトの引数となる行番号と列番号を間接的に指定する方法により、
多数のセルに値を書きこむにはどうしたらよいのでしょうか。
これについては、次回『多数のセルの行番号と列番号を変数で指定して値を書きこむ』で紹介します。