【ループ処理でセルからセルへ値を代入する】

 1 セルからセルへ値を代入

 2 行のループ処理でセルからセルへ値を代入

 3 列のループ処理でセルからセルへ値を代入

 4 行×列のダブルループ処理でセルからセルへ値を代入

セルからセルへ値を代入

 あるセルの値を別のセルへ代入してみます。

 『代入』とは、特定の値を設定することです。

 Python-xlwingsで、セルの位置を示す行番号列番号を変数で指定して、

 セルからセルに値を代入する構文を紹介します。

Img5_1_1

 今回は、一つのセルから他の一つのセルへ値を代入するようにします。

 予め、5行目・5列目のセルに『E5』という値を入れておきます。

Img5_1_2

 今回は、このように予め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]

 と記述しておきます。



特定のセルへ

Img5_1_3

 5行目・5列目のセルの値を、その38行目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』を開きます。

Img5_1_5

 5行目・5列目のセルの値を、その38行目5列目のセルに代入することができました。



1. 3行下のセルへ

 それでは、次は、8行目という数字を自分で計算せずに、パソコンに計算させてみます。

 まず、『書込行』を『読取行』に、『書込列』を『読取列』に一致させるところから始めます。

 『書込行』を『読取行』に一致させるということは、書込行 = 読取行

 『書込列』を『読取列』に一致させるということは、書込列 = 読取列


 それでは、『書込行』を『読取行』の3行下にします。

Img5_1_6

 『読取行』の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』を開きます。

Img5_1_8

5行目・5列目のセルの値を、その3行下8行目5列目のセルに代入することができました。



2. 3行上のセルへ

 5行目・5列目のセルの値を、その3行上のセルに代入してみます。

Img5_1_9

 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』を開きます。

Img5_1_11

 5行目・5列目のセルの値を、その3行上2行目5列目のセルに代入することができました。



3. 3列右のセルへ

 5行目・5列目のセルの値を、その3列右のセルに代入してみます。

Img5_1_12

 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』を開きます。

Img5_1_14

5行目・5列目のセルの値を、その3列右5行目・8列目のセルに代入することができました。



4. 3列左のセルへ

 5行目・5列目のセルの値を、その3列左のセルに代入してみます。

Img5_1_15

 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』を開きます。

Img5_1_17

 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つのセルへ値を代入するプログラムを紹介しました。

 それでは、多数のセルから多数のセルへ値を代入するには、どうしたらよいのでしょうか。


 ループ処理をつかえば、多数のセルから多数のセルへ値を代入することができます

 行のループ処理をつかった多数のセルから多数のセルへの値の代入については、

 次回『行のループ処理でセルからセルへ値を代入』で紹介します。