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