【ループ処理でセルからセルへ値を代入する】
1 セルからセルへ値を代入
2 行のループ処理でセルからセルへ値を代入
3 列のループ処理でセルからセルへ値を代入
4 行×列のダブルループ処理でセルからセルへ値を代入
行のループ処理でセルからセルへ値を代入
ループ処理をつかって、行番号をカウントアップしながらセルからセルへ値を代入してみます。
Python-xlwingsのループ処理をつかえば、
一つの順次処理で多数行のセルの値を読みとり別のセルに書きこむことができます。
変数『行番号』を、開始行から終了行になるまで1ずつカウントアップさせながら、
セルの値を読みとり別のセルに書きこむ順次処理をくり返し実行するfor文は、次のようになります。
今回も、多数のセルの値を読みとることになるので、
『ループ処理で多数行×多数列のセルに値を書きこむ』のときに、
Pythonプログラムで10行×10列のセルに値を書きこんでおいたWorkbookファイル
『PythonExcel_10_10.xlsx』を読みこみます。
xlwingsをつかいPythonで既存Excelを読みこみ操作するときは、
Workbookファイルをメモリ上に読みこむと同時にWorkbookオブジェクトを生成、
( 『xlwingsをつかい既存Workbookを読みこみファイル保存』参照 )
更に、sheetオブジェクトを生成して、そのsheetを操作します。
Workbookオブジェクト名を『wb』、sheetオブジェクト名を『st』としておきます。
予め、ソースコードパネルに
import xlwings
wb = xlwings.Book(‘PythonExcel_10_10.xlsx')
st = wb.sheets[0]
と記述しておきます。
1. 1~3行・1列のセルから10行下のセルへ
列を1列目に固定して、行を1行目から3行目まで1行ずつカウントアップしていきながら、
そのつどセルの値を読みとり、その10行下のセルに書きこんでみます。
このとき行番号を変数『読取行』と変数『書込行』、
列番号を変数『読取列』と変数『書込列』とします。
まず、列を1列目に固定ということなので、
読取列 = 1
書込列 = 読取列
次に、行を1行目から3行目まで1行ずつカウントアップしていきながら、
そのつどセルの値を読みとり、その10行下のセルに書きこむということを考えてみます。
『読取行』を開始行『1』から終了行『3』まで1ずつカウントアップしていくループコード
for 読取行 in range(1,4):
『書込行』を『読取行』より10行増やす処理コード
書込行 = 読取行 + 10
書込セルに読取セルの値を代入する処理コード
st.range(書込行, 書込列).value = st.range(読取行, 読取列).value
そして、これら二つの処理コードを、『読取行』をカウントアップしていくループコードに組み合わせます。
読取列 = 1
書込列 = 読取列
for 読取行 in range(1,4):
書込行 = 読取行 + 10
st.range(書込行, 書込列).value = st.range(読取行, 読取列).value
【ソースコードパネル】
import xlwings
wb = xlwings.Book(‘PythonExcel_10_10.xlsx’)
st = wb.sheets[0]
読取列 = 1
書込列 = 読取列
for 読取行 in range(1,4):
書込行 = 読取行 + 10
st.range(書込行, 書込列).value = st.range(読取行, 読取列).value
それでは、そのPythonプログラムを実行してみましょう。
1~3行目・1列目のセルの値が読みとられて、
その10行下の11~13行目・1列目のセルに書きこまれました。
2. 4~6行・2列のセルから10行下のセルへ
列を2列目に固定して、行を4行目から6行目まで1行ずつカウントアップしていきながら、
そのつどセルの値を読みとり、その10行下のセルに書きこんでみます。
まず、列を2列目に固定ということなので、
読取列 = 2
書込列 = 読取列
次に、行を4行目から6行目まで1行ずつカウントアップしていきながら、
そのつどセルの値を読みとり、その10行下のセルに書きこむということを考えてみます。
『読取行』を開始行『4』から終了行『6』まで1ずつカウントアップしていくループコード
for 読取行 in range(4,7):
『書込行』を『読取行』より10行増やす処理コード
書込行 = 読取行 + 10
書込セルに読取セルの値を代入する処理コード
st.range(書込行, 書込列).value = st.range(読取行, 読取列).value
そして、これら二つの処理コードを、『読取行』をカウントアップしていくループコードに組み合わせます。
読取列 = 2
書込列 = 読取列
for 読取行 in range(4,7):
書込行 = 読取行 + 10
st.range(書込行, 書込列).value = st.range(読取行, 読取列).value
【ソースコードパネル】
import xlwings
wb = xlwings.Book(‘PythonExcel_10_10.xlsx’)
st = wb.sheets[0]
読取列 = 2
書込列 = 読取列
for 読取行 in range(4,7):
書込行 = 読取行 + 10
st.range(書込行, 書込列).value = st.range(読取行, 読取列).value
それでは、そのPythonプログラムを実行してみましょう。
4~6行目・2列目のセルの値が読みとられて、
その10行下の14~16行目・2列目のセルに書きこまれました。
3. 7~10行・3列のセルから10行下のセルへ
列を3列目に固定して、行を7行目から10行目まで1行ずつカウントアップしていきながら、
そのつどセルの値を読みとり、その10行下のセルに書きこんでみます。
まず、列を3列目に固定ということなので、
読取列 = 3
書込列 = 読取列
次に、行を7行目から10行目まで1行ずつカウントアップしていきながら、
そのつどセルの値を読みとり、その10行下のセルに書きこむということを考えてみます。
『読取行』を開始行『7』から終了行『10』まで1ずつカウントアップしていくループコード
for 読取行 in range(7,11):
『書込行』を『読取行』より10行増やす処理コード
書込行 = 読取行 + 10
書込セルに読取セルの値を代入する処理コード
st.range(書込行, 書込列).value = st.range(読取行, 読取列).value
そして、これら二つの処理コードを、『読取行』をカウントアップしていくループコードに組み合わせます。
読取列 = 3
書込列 = 読取列
for 読取行 in range(7,11):
書込行 = 読取行 + 10
st.range(書込行, 書込列).value = st.range(読取行, 読取列).value
【ソースコードパネル】
import xlwings
wb = xlwings.Book(‘PythonExcel_10_10.xlsx’)
st = wb.sheets[0]
読取列 = 3
書込列 = 読取列
for 読取行 in range(7,11):
書込行 = 読取行 + 10
st.range(書込行, 書込列).value = st.range(読取行, 読取列).value
それでは、そのPythonプログラムを実行してみましょう。
7~10行目・3列目のセルの値が読みとられて、
その10行下の17~20行目・3列目のセルに書きこまれました。
このように、for文をつかってループ処理を行えば、
多数行のセルから多数行のセルへ一瞬で値を代入することができます。
試しに、for文の開始行・終了行と列番号の定数に設定する値を適当な数字に書きかえて、
プログラムを実行して、多数行のセルから多数行のセルへ値を代入できることを確かめてみてください。
今回は、行のfor文をつかえば、多数行のセルから多数行のセルへ値を代入できるという話でした。
では、列数が増えたときは、どうすればよいのでしょうか。
これについては、次回『列のループ処理でセルからセルへ値を代入』で紹介します。