【ループ処理でセルに値を書きこむ】
1 多数のセルの行番号と列番号を直接指定して値を書きこむ
2 多数のセルの行番号と列番号を変数で指定して値を書きこむ
3 ループ処理で多数行のセルに値を書きこむ
4 ループ処理で多数列のセルに値を書きこむ
5 ダブルループ処理で多数行×多数列のセルに値を書きこむ
ダブルループ処理で多数行×多数列のセルに値を書きこむ
前々回『ループ処理で多数行のセルに値を書きこむ』は、
行数がどんなに増えたとしても、
for文をつかえば一つの順次処理にまとめられるという話でした。
前回『ループ処理で多数列のセルに値を書きこむ』は、
列数がどんなに増えたとしても、
for文をつかえば一つの順次処理にまとめられるという話でした。
では、行数と列数の両方とも増えたときは、どうすればよいのでしょうか。
Python-xlwingsでは行数と列数の両方がどんなに増えたとしても、
多数行に係るfor文と多数列に係るfor文を組み合わせれば
一つの順次処理にまとめられます。
変数『行番号』を、開始行から終了行になるまで1ずつカウントアップさせながら、
併せて、変数『列番号』を、開始列から終了列になるまで1ずつカウントアップさせて、
セルに値を書きこむ順次処理をくり返し実行する二重for文は、次のようになります。
今回は、
行に係るループ処理と列に係るループ処理を組み合わせて、
行番号をカウントアップしていきながら、
列番号をカウントアップしていき、
X行×Y列のセルに値を書きこんでみます。
xlwingsをつかいPythonでExcelを操作するときは、
メモリ上に、Workbookオブジェクトを生成、更に、sheetオブジェクトを生成して、
そのsheetを操作します。( 『rangeの行番号と列番号を変数で指定』参照 )
Workbookオブジェクト名を『wb』、sheetオブジェクト名を『st』としておきます。
予め、ソースコードパネルに
import xlwings
wb = xlwings.Book()
st = wb.sheets[0]
と記述しておきます。
1. 1~3行・1~3列
行を1行目から3行目まで1行ずつカウントアップしていきながら、
列を1列目から3列目まで1列ずつカウントアップしていき、
3行×3列のセルに対して、『X行Y列』を設定します。
今度の問題は、『多数のセルの行番号と列番号を変数で指定して値を書きこみ』の
4. 1~3行・1~3列と同じ問題です。
そのときにつくったPythonプログラムの一部を記載します。
行 = 1
列 = 1
st.range(行,列).value = str(行) + '行' + str(列) + '列'
列 = 2
st.range(行,列).value = str(行) + '行' + str(列) + '列'
列 = 3
st.range(行,列).value = str(行) + '行' + str(列) + '列'
行 = 2
列 = 1
st.range(行,列).value = str(行) + '行' + str(列) + '列'
列 = 2
st.range(行,列).value = str(行) + '行' + str(列) + '列'
列 = 3
st.range(行,列).value = str(行) + '行' + str(列) + '列'
行 = 3
列 = 1
st.range(行,列).value = str(行) + '行' + str(列) + '列'
列 = 2
st.range(行,列).value = str(行) + '行' + str(列) + '列'
列 = 3
st.range(行,列).value = str(行) + '行' + str(列) + '列'
for文をつかって、9回の順次処理を一つにまとめてみます。
for 行 in range(1,4):
for 列 in range(1,4):
st.range(行,列).value = str(行) + '行' + str(列) + '列'
3行×3列に係る順次処理が、
二つのfor文をつかうことで一つの順次処理にまとまりました。
今回のコードを解説します。
行を1行目から3行目まで1行ずつカウントアップする
ということから、
開始行は『1』、終了行は『3』となり、
行に関するfor文は、
for 行 in range(1,4):
になります。
列を1列目から3列目まで1列ずつカウントアップする
ということから、
開始列は『1』、終了列は『3』となり、
列に関するfor文は、
for 列 in range(1,4):
になります。
セルに対して、『X行Y列』を設定するということから、
処理は、
st.range(行,列).value = str(行) + ‘行’ + str(列) + ‘列’
になります。
次に、『行と列の二つのループ処理を行うための構文』を参考にしながら、
二つのfor文と順次処理を組み合わせていきます。
for 行 in range(1,4):
for 列 in range(1,4):
st.range(行,列).value = str(行) + ‘行’ + str(列) + ‘列’
と記述します。
ソースコードパネルは、
import xlwings
wb = xlwings.Book()
st = wb.sheets[0]
for 行 in range(1,4):
for 列 in range(1,4):
st.range(行,列).value = str(行) + '行' + str(列) + '列'
となります。
それでは、そのPythonプログラムを実行してみましょう。
1行目から3行目で、1列目から3列目のセルに、
つまり3行×3列のセルに『X行Y列』が書きこまれました。
行を1行目から10行目まで1行ずつカウントアップしていきながら、
列を1列目から10列目まで1列ずつカウントアップしていき、
10行×10列のセルに対して、『X行Y列』を設定します。
今回だけ特別に、保存Workbookファイル名を『PythonExcel_10_10.xlsx』としておきます。
for文では、range関数の第2引数に、終了値を記述することになっているから、
さきほどのPythonプログラムの
『for 行 in range(1,4):』を『for 行 in range(1,11):』に、
『for 列 in range(1,4):』を『for 列 in range(1,11):』に、
書きかえるだけです。
ソースコードパネルは、
import xlwings
wb = xlwings.Book()
st = wb.sheets[0]
for 行 in range(1,11):
for 列 in range(1,11):
st.range(行,列).value = str(行) + '行' + str(列) + '列'
wb.save.('PythonExcel_10_10.xlsx')
wb.close()
となります。
それでは、そのPythonプログラムを実行して、『PythonExcel_10_10.xlsx』を開きます。
1行目から10行目で、1列目から10列目のセルに、
つまり10行×10列のセルに『X行Y列』が書きこまれました。
3. 1~100行・1~100列
100行×100列のセルに対して、『X行Y列』を設定します。
for文では、range関数の第2引数に、終了値を記述することになっているから、
さきほどのPythonプログラムの
『for 行 in range(1,11):』を『for 行 in range(1,101):』に、
『for 列 in range(1,11):』を『for 列 in range(1,101):』に、
書きかえるだけです。
ソースコードパネルは、
import xlwings
wb = xlwings.Book()
st = wb.sheets[0]
for 行 in range(1,101):
for 列 in range(1,101):
st.range(行,列).value = str(行) + '行' + str(列) + '列'
wb.save.('workbook.xlsx')
となります。
それでは、そのPythonプログラムを実行してみましょう。
1行目から100行目で、1列目から100列目のセルに、
つまり100行×100列のセルに『X行Y列』が書きこまれました。
このように、行数×列数がどんなに増えたとしても、
多数行に係るfor文と多数列に係るfor文をつかえば
一つの順次処理にまとめられます。
試しに二つのfor文の開始値と終了値を
適当な数字に書きかえて、Pythonプログラムを実行して、
多数行×多数列のセルに値が書きこまれることを
確かめてみてください。
今回は、行数×列数がどんなに増えたとしても、
多数行に係るfor文と多数列に係るfor文をつかえば
一つの順次処理にまとめられて、
多数行×多数列のセルに値を書きこむことができる
という話でした。
では、セルの値を読みとるときは、どうすればよいのでしょうか。
これについては、次回『多数のセルの行番号と列番号を直接指定して値を読みとる』で紹介します。