【ループ処理でセルからセルへ値を代入する】
1 セルからセルへ値を代入
2 行のループ処理でセルからセルへ値を代入
3 列のループ処理でセルからセルへ値を代入
4 行×列のダブルループ処理でセルからセルへ値を代入
セルからセルへ値を代入
あるセルの値を別のセルへ代入してみます。
『代入』とは、特定の値を設定することです。
Python-xlwingsで、セルの位置を示す行番号と列番号を変数で指定して、
セルからセルに値を代入する構文を紹介します。
今回は、一つのセルから他の一つのセルへ値を代入するようにします。
予め、5行目・5列目のセルに『E5』という値を入れておきます。
今回は、このように予め5行目・5列目のセルに『E5』という値を入れておいた
Workbookファイル『E5.xlsx』を読みこみます。
xlwingsをつかいPythonで既存Excelを読みこみ操作するときは、
Workbookファイルをメモリ上に読みこむと同時にWorkbookオブジェクトを生成、
( 『xlwingsをつかい既存Workbookを読みこみファイル保存』参照 )
更に、sheetオブジェクトを生成して、そのsheetを操作します。
Workbookオブジェクト名を『wb』、sheetオブジェクト名を『st』としておきます。
予め、ソースコードパネルに
import xlwings
wb = xlwings.Book(‘E5.xlsx')
st = wb.sheets[0]
と記述しておきます。
特定のセルへ
5行目・5列目のセルの値を、その3行下の8行目・5列目のセルに代入してみます。
このとき行番号を変数『読取行』と変数『書込行』、列番号を変数『読取列』と変数『書込列』とします。
5行目・5列目のセルの値を、読みとるのだから、
読取行 = 5
読取列 = 5
8行目・5列目のセルの値に、書きこむのだから、
書込行 = 8
書込列 = 5
最後に、セルからセルに値を代入する構文をつかって、
st.range(書込行, 書込列).value = st.range(読取行, 読取列).value
と記述します。
読取行 = 5
読取列 = 5
書込行 = 8
書込列 = 5
st.range(書込行, 書込列).value = st.range(読取行, 読取列).value
【ソースコードパネル】
import xlwings
wb = xlwings.Book(‘E5.xlsx’)
st = wb.sheets[0]
読取行 = 5
読取列 = 5
書込行 = 8
書込列 = 5
st.range(書込行, 書込列).value = st.range(読取行, 読取列).value
それでは、そのPythonプログラムを実行して、『Re_E5.xlsx』を開きます。
5行目・5列目のセルの値を、その3行下の8行目・5列目のセルに代入することができました。
1. 3行下のセルへ
それでは、次は、8行目という数字を自分で計算せずに、パソコンに計算させてみます。
まず、『書込行』を『読取行』に、『書込列』を『読取列』に一致させるところから始めます。
『書込行』を『読取行』に一致させるということは、書込行 = 読取行
『書込列』を『読取列』に一致させるということは、書込列 = 読取列
それでは、『書込行』を『読取行』の3行下にします。
『読取行』の3行下のセルに、書きこむということは、
『書込行』が『読取行』より3行多くなるということだから
書込行 = 読取行 + 3となります。
読取行 = 5
読取列 = 5
書込行 = 読取行 + 3
書込列 = 読取列
st.range(書込行, 書込列).value = st.range(読取行, 読取列).value
【ソースコードパネル】
import xlwings
wb = xlwings.Book(‘E5.xlsx’)
st = wb.sheets[0]
読取行 = 5
読取列 = 5
書込行 = 読取行 + 3
書込列 = 読取列
st.range(書込行, 書込列).value = st.range(読取行, 読取列).value
それでは、そのPythonプログラムを実行して、『Re_E5.xlsx』を開きます。
5行目・5列目のセルの値を、その3行下の8行目・5列目のセルに代入することができました。
2. 3行上のセルへ
5行目・5列目のセルの値を、その3行上のセルに代入してみます。
5行目・5列目のセルの値を、読みとるのだから、
読取行 = 5
読取列 = 5
『読取行』の3行上のセルに、書きこむということは、
『書込行』が『読取行』より3行少なくなるということだから
書込行 = 読取行 - 3ということです。
『書込列』は『読取列』と同じままなので、
書込列 = 読取列
最後に、読取セルから書込セルに値を代入します。
読取行 = 5
読取列 = 5
書込行 = 読取行 - 3
書込列 = 読取列
st.range(書込行, 書込列).value = st.range(読取行, 読取列).value
【ソースコードパネル】
import xlwings
wb = xlwings.Book(‘E5.xlsx’)
st = wb.sheets[0]
読取行 = 5
読取列 = 5
書込行 = 読取行 - 3
書込列 = 読取列
st.range(書込行, 書込列).value = st.range(読取行, 読取列).value
wb.save.('Re_E5.xlsx')
それでは、そのPythonプログラムを実行して、『Re_E5.xlsx』を開きます。
5行目・5列目のセルの値を、その3行上の2行目・5列目のセルに代入することができました。
3. 3列右のセルへ
5行目・5列目のセルの値を、その3列右のセルに代入してみます。
5行目・5列目のセルの値を、読みとるのだから、
読取行 = 5
読取列 = 5
『読取列』の3列右のセルに、書きこむということは、
『書込列』が『読取列』より3列多くなるということだから
書込列 = 読取列 + 3ということです。
『書込行』は『読取行』と同じままなので、
書込行 = 読取行
最後に、読取セルから書込セルに値を代入します。
読取行 = 5
読取列 = 5
書込行 = 読取行
書込列 = 読取列 + 3
st.range(書込行, 書込列).value = st.range(読取行, 読取列).value
【ソースコードパネル】
import xlwings
wb = xlwings.Book(‘E5.xlsx’)
st = wb.sheets[0]
読取行 = 5
読取列 = 5
書込行 = 読取行
書込列 = 読取列 + 3
st.range(書込行, 書込列).value = st.range(読取行, 読取列).value
それでは、そのPythonプログラムを実行して、『Re_E5.xlsx』を開きます。
5行目・5列目のセルの値を、その3列右の5行目・8列目のセルに代入することができました。
4. 3列左のセルへ
5行目・5列目のセルの値を、その3列左のセルに代入してみます。
5行目・5列目のセルの値を、読みとるのだから、
読取行 = 5
読取列 = 5
『読取列』の3列左のセルに、書きこむということは、
『書込列』が『読取列』より3列少なくなるということだから
書込列 = 読取列 - 3ということです。
『書込行』は『読取行』と同じままなので、
書込行 = 読取行
最後に、読取セルから書込セルに値を代入します。
読取行 = 5
読取列 = 5
書込行 = 読取行
書込列 = 読取列 - 3
st.range(書込行, 書込列).value = st.range(読取行, 読取列).value
【ソースコードパネル】
import xlwings
wb = xlwings.Book(‘E5.xlsx’)
st = wb.sheets[0]
読取行 = 5
読取列 = 5
書込行 = 読取行
書込列 = 読取列 - 3
st.range(書込行, 書込列).value = st.range(読取行, 読取列).value
wb.save.('Re_E5.xlsx')
それでは、そのPythonプログラムを実行して、『Re_E5.xlsx』を開きます。
5行目・5列目のセルの値を、その3列左の5行目・2列目のセルに代入することができました。
このように、
st.range(書込行, 書込列).value = st.range(読取行, 読取列).value
の構文をつかえば、セルからセルへ値を代入することができます。
セルから下・上・右・左のセルへ値を代入するときは、それぞれ、次の構文になります。
X行下のセルに代入するときは、
書込行 = 読取行 + X
X行上のセルに代入するときは、
書込行 = 読取行 - X
Y列右のセルに代入するときは、
書込列 = 読取列 + Y
Y列左のセルに代入するときは、
書込列 = 読取列 - Y
st.range(書込行, 書込列).value = st.range(読取行, 読取列).value
試しに、Pythonプログラム『セルからセルへ値をうつす』のプログラムコードを変更して、
5行目・5列目のセルの値を、
(一) その1行下・1列右のセルに、
(二) その2行上・2列左のセルに、
代入してみましょう。
今回は、1つのセルから1つのセルへ値を代入するプログラムを紹介しました。
それでは、多数のセルから多数のセルへ値を代入するには、どうしたらよいのでしょうか。
ループ処理をつかえば、多数のセルから多数のセルへ値を代入することができます。
行のループ処理をつかった多数のセルから多数のセルへの値の代入については、
次回『行のループ処理でセルからセルへ値を代入』で紹介します。