【条件分岐処理でセルの操作を分ける】
1 もしA列がXのときはエックスを実行
2 もしA列が、Xのときはエックス、Yのときはワイを実行
3 もしA列が、Xのときはエックス、その他のときはソノタを実行
4 もしA列がXかつB列がXのときはエックスを実行
5 もしA列がXまたはB列がXのときはエックスを実行
もしA列が、Xのときはエックス、Yのときはワイを実行
前回『もしA列がXのときはエックスを実行』では、条件分岐処理のもっとも基本的な構文として、
条件式に当てはまったときに、処理を実行するif文を紹介しました。
今回は、二つ以上の各条件式に当てはまったときにそれぞれの処理を実行する
if_elif文を紹介します。
Python-xlwingsのif_elif文とは、
もしA列が、Xのときはエックス、Yのときはワイを実行するというように、
各条件式に当てはまったとき、それぞれの処理を実行するということです。
今回も、セルの値が特定の文字のときに、その右隣りのセルに文字を書きこむようにします。
予め、1~5行目・1列目のセルに『X』、『Z』、『Y』、『』、『X』という値を入れておきます。
今回も、このように1~5行目・1列目のセルに『X』、『Z』、『Y』、『』、『X』という値を入れておいた
Workbookファイル『エックスワイ.xlsx』を読みこみます。
xlwingsをつかいPythonで既存Excelを読みこみ操作するときは、
Workbookファイルをメモリ上に読みこむと同時にWorkbookオブジェクトを生成、
( 『xlwingsをつかい既存Workbookを読みこみファイル保存』参照 )
更に、sheetオブジェクトを生成して、そのsheetを操作します。
Workbookオブジェクト名を『wb』、sheetオブジェクト名を『st』としておきます。
予め、ソースコードパネルに
import xlwings
wb = xlwings.Book(‘エックスワイ.xlsx')
st = wb.sheets[0]
と記述しておきます。
セルの値がAのとき、同じ行で別の列のセルに変数Lを書きこみ、
セルの値がBのとき、同じ行で別の列のセルに変数Mを書きこむ
というケースでは、次のような構文になります。
1. 『X』のときは『エックス』、『Y』のときは『ワイ』
(1)if・elif文(条件分岐処理)
1行目・1列目のセルの値が『X』のときは、1行目・2列目のセルに『エックス』と、
1行目・1列目のセルの値が『Y』のときは、1行目・2列目のセルに『ワイ』と書きこんでみます。
列番号を変数『読取列』と『書込列』、行番号を変数『行番号』とします。
1行目・1列目のセルの値を読みとり、1行目・2列目のセルの値に書きこむのだから、
変数『読取列』の値に1 読取列 = 1
変数『書込列』の値に2 書込列 = 2
変数『行番号』の値に1 行番号 = 1 と記述します。
次に、セルの値がAのとき、同じ行で別の列のセルに変数を書きこむ書きこみ、
セルの値がBのとき、同じ行で別の列のセルに変数を書きこむ書きこむ構文をつかってみます。
1行目・1列目のセルの値が『X』のときは、1行目・2列目のセルに『エックス』と、
1行目・1列目のセルの値が『Y』のときは、1行目・2列目のセルに『ワイ』と書きこむのだから、
if st.range(行番号, 読取列).value == "X":
st.range(行番号, 書込列).value = "エックス"
elif st.range(行番号, 読取列).value == "Y":
st.range(行番号, 書込列).value = "ワイ"
と記述します。
【ソースコードパネル】
import xlwings
wb = xlwings.Book(‘エックスワイ.xlsx’)
st = wb.sheets[0]
読取列 = 1
書込列 = 2
行番号 = 1
if st.range(行番号, 読取列).value == "X":
st.range(行番号, 書込列).value = “エックス”
elif st.range(行番号, 読取列).value == "Y":
st.range(行番号, 書込列).value = “ワイ”
それでは、そのPythonプログラムを実行してみましょう。
1行目・1列目のセルの値が『X』だったので、1行目・2列目のセルに『エックス』と書きこまれました。
(2)for文(ループ処理)とif・elif文(条件分岐処理)の組み合わせ
1~5行目の中で、
1列目のセルの値が『X』のときは、2列目のセルに『エックス』と書きこんで、
1列目のセルの値が『Y』のときは、2列目のセルに『ワイ』と書きこんでみます。
今回は、for文(ループ処理)のブロックの中に、
if_elif文(条件分岐処理)のブロックを組みこんでみます。
次のような構文になります。
for文(ループ処理)のブロックの中に、
if_elif文(条件分岐処理)のブロックを組みこむ構文をつかってみます。
1~5行目の中で、
1列目のセルの値が『X』のときは、2列目のセルに『エックス』と書きこんで、
1列目のセルの値が『Y』のときは、2列目のセルに『ワイ』と書きこむのだから、
読取列 = 1
書込列 = 2
for 行番号 in range(1,6):
if st.range(行番号, 読取列).value == "X":
st.range(行番号, 書込列).value = "エックス"
elif st.range(行番号, 読取列).value == "Y":
st.range(行番号, 書込列).value = "ワイ"
と記述します。
【ソースコードパネル】
import xlwings
wb = xlwings.Book(‘エックスワイ.xlsx’)
st = wb.sheets[0]
読取列 = 1
書込列 = 2
for 行番号 in range(1,6):
if st.range(行番号, 読取列).value == "X":
st.range(行番号, 書込列).value = “エックス”
elif st.range(行番号, 読取列).value == "Y":
st.range(行番号, 書込列).value = “ワイ”
それでは、そのPythonプログラムを実行してみましょう。
1列目、1・5行目のセルの値が『X』だったので、2列目、1・5行目のセルに『エックス』と書きこまれ、
1列目、3行目のセルの値が『Y』だったので、2列目、3行目のセルに『ワイ』と書きこまれました。
2. 『X』のときは『エックス』、『Y』のときは『ワイ』、『』のときは『空白』
1~5行目の中で、
1列目のセルの値が『X』のときは、2列目のセルに『エックス』と書きこんで、
1列目のセルの値が『Y』のときは、2列目のセルに『ワイ』と書きこんで、
1列目のセルの値が『』のときは、2列目のセルに『空白』と書きこんでみます。
if_elif文(条件分岐処理)のブロックの中で、
elif文は何回でもつかうことができます。
次のような構文になります。
今回は、条件式が3個になるので、if文を1回、elif文を2回つかって、
条件式とそのときの処理を3個書いてみます。
for文(ループ処理)のブロックの中に、
if_elif文(条件分岐処理)のブロックを組みこむ構文をつかいます。
読取列 = 1
書込列 = 2
for 行番号 in range(1,6):
if st.range(行番号, 読取列).value == "X":
st.range(行番号, 書込列).value = "エックス"
elif st.range(行番号, 読取列).value == "Y":
st.range(行番号, 書込列).value = "ワイ"
elif st.range(行番号, 読取列).value is None:
st.range(行番号, 書込列).value = "空白"
と記述します。
【ソースコードパネル】
import xlwings
wb = xlwings.Book(‘エックスワイ.xlsx’)
st = wb.sheets[0]
読取列 = 1
書込列 = 2
for 行番号 in range(1,6):
if st.range(行番号, 読取列).value == "X":
st.range(行番号, 書込列).value = “エックス”
elif st.range(行番号, 読取列).value == "Y":
st.range(行番号, 書込列).value = “ワイ”
elif st.range(行番号, 読取列).value is None:
st.range(行番号, 書込列).value = “空白”
それでは、そのPythonプログラムを実行してみましょう。
1列目、1・5行目のセルの値が『X』だったので、2列目、1・5行目のセルに『エックス』と書きこまれ、
1列目、3行目のセルの値が『Y』だったので、2列目、3行目のセルに『ワイ』と書きこまれ、
1列目、4行目のセルの値が『』だったので、2列目、4行目のセルに『空白』と書きこまれました。
3. 『X』のときは『エックス』、『Y』のときは『ワイ』、
『』のときは『空白』、『』でないときは『その他の英字』
1~5行目の中で、
1列目のセルの値が『X』のときは、2列目のセルに『エックス』と書きこんで、
1列目のセルの値が『Y』のときは、2列目のセルに『ワイ』と書きこんで、
1列目のセルの値が『』のときは、2列目のセルに『空白』と書きこんで、
1列目のセルの値が『』でないときは、2列目のセルに『その他の英字』と書きこんでみます。
for文(ループ処理)のブロックの中に、
if_elif文(条件分岐処理)のブロックを組みこむ構文をつかいます。
読取列 = 1
書込列 = 2
for 行番号 in range(1,6):
if st.range(行番号, 読取列).value == "X":
st.range(行番号, 書込列).value = "エックス"
elif st.range(行番号, 読取列).value == "Y":
st.range(行番号, 書込列).value = "ワイ"
elif st.range(行番号, 読取列).value is None:
st.range(行番号, 書込列).value = "空白"
elif st.range(行番号, 読取列).value is not None:
st.range(行番号, 書込列).value = "その他の英字"
と記述します。
【ソースコードパネル】
import xlwings
wb = xlwings.Book(‘エックスワイ.xlsx’)
st = wb.sheets[0]
読取列 = 1
書込列 = 2
for 行番号 in range(1,6):
if st.range(行番号, 読取列).value == "X":
st.range(行番号, 書込列).value = “エックス”
elif st.range(行番号, 読取列).value == "Y":
st.range(行番号, 書込列).value = “ワイ”
elif st.range(行番号, 読取列).value is None:
st.range(行番号, 書込列).value = “空白”
elif st.range(行番号, 読取列).value is not None:
st.range(行番号, 書込列).value = “その他の英字”
それでは、そのPythonプログラムを実行してみましょう。
1列目、1・5行目のセルの値が『X』だったので、2列目、1・5行目のセルに『エックス』と書きこまれ、
1列目、3行目のセルの値が『Y』だったので、2列目、3行目のセルに『ワイ』と書きこまれ、
1列目、4行目のセルの値が『』だったので、2列目、4行目のセルに『空白』と書きこまれ、
1列目、2行目のセルの値が『』でなかったので、2列目、2行目のセルに『その他の英字』と書きこまれました。
このように、for文(ループ処理)のブロックの中に、
if_elif文(条件分岐処理)のブロックを組みこむ構文をつかえば、
ループブロックで二つ以上の各条件式に当てはまったときに
それぞれ特定の処理をすることができます。
試しに、『開始行』・『終了行』の各変数に設定する値、条件式の右辺に設定する値、
セルに書きこむ値を適当な数字や文字に書きかえて、プログラムを実行して、
ループブロックで二つ以上の各条件式に当てはまったときに
それぞれ特定の処理をすることができることを確かめてみてください。
それでは、ループブロックで条件式に当てはまったときに処理を実行し、
条件式に当てはまらないときにも処理を実行するには、どうすればよいのでしょうか。
これについては、次回『もしA列が、Xのときはエックス、その他のときはソノタを実行』で紹介します。