【条件分岐処理でセルの操作を分ける】
1 もしA列がXのときはエックスを実行
2 もしA列が、Xのときはエックス、Yのときはワイを実行
3 もしA列が、Xのときはエックス、その他のときはソノタを実行
4 もしA列がXかつB列がXのときはエックスを実行
5 もしA列がXまたはB列がXのときはエックスを実行
もしA列がXかつB列がXのときはエックスを実行
条件分岐処理をつかって、場合によって処理を分けてみます。
今回は、二つの条件式に両方とも当てはまったときに処理してみます。
次のような構文になります。
『and』(かつ)は、二つ以上の条件式をつないで、
いずれも成り立つ状態ということを示す演算子です。
Python-xlwingsのand条件のif文とは、
もしA列がXのとき、かつ、B列がXのときは
エックスを実行するというように、
条件式Aと条件式Bの両方とも当てはまったとき、
処理を実行するということです。
今回は、1列目と2列目のセルの値が両方とも特定の文字のときに、
3列目のセルに文字を書きこむようにします。予め、
1~9行目・1列目のセルに、『X』、『X』、『X』、『』、『』、『』、『Y』、『Y』、『Y』
1~9行目・2列目のセルに、『X』、『Y』、『』、『X』、『Y』、『』、『X』、『Y』、『』
という値を入れておきます。
今回は、このように予め
1~9行目・1列目のセルに、『X』、『X』、『X』、『』、『』、『』、『Y』、『Y』、『Y』
1~9行目・2列目のセルに、『X』、『Y』、『』、『X』、『Y』、『』、『X』、『Y』、『』
という値を入れておいたWorkbookファイル『エックスワイ2列.xlsx』を読みこみます。
xlwingsをつかいPythonで既存Excelを読みこみ操作するときは、
Workbookファイルをメモリ上に読みこむと同時にWorkbookオブジェクトを生成、
( 『xlwingsをつかい既存Workbookを読みこみファイル保存』参照 )
更に、sheetオブジェクトを生成して、そのsheetを操作します。
Workbookオブジェクト名を『wb』、sheetオブジェクト名を『st』としておきます。
予め、ソースコードパネルに
import xlwings
wb = xlwings.Book(‘エックスワイ2列.xlsx')
st = wb.sheets[0]
と記述しておきます。
読取列Xのセルの値がA、かつ、読取列Yのセルの値がBのとき、
書込列のセルに変数を書きこむというケースでは、次のような構文になります。
『\』(バックスラッシュ ※Windows環境では円記号)は、非常に長いコードを、
読みやすくするために、複数行に分けて表示したいときにつかう行接続文字です。
1行のコードを複数行に改行するには、改行したい位置に、
『\』(バックスラッシュ)を入力します。
1. 両方が『X』のときは『両方エックス』
(1)if文(条件分岐処理)
1行目で、1列目のセルの値が『X』、かつ、2列目のセルの値が『X』のとき、
3列目のセルに『両方エックス』と書きこんでみます。
列番号を変数『読取列X』と『読取列Y』と『書込列』、行番号を変数『行番号』とします。
1行目・1列目のセルと1行目・2列目のセルの値を読みとり、
1行目・3列目のセルの値に書きこむのだから、
変数『読取列X』の値に1 読取列X = 1
変数『読取列Y』の値に2 読取列Y = 2
変数『書込列』の値に3 書込列 = 3
変数『行番号』の値に1 行番号 = 1 と記述します。
次に、読取列Xのセルの値がA、かつ、読取列Yのセルの値がBのとき、
書込列のセルに変数を書きこむ構文をつかってみます。
1列目のセルの値が『X』、かつ、2列目のセルの値が『X』のとき、
3列目のセルに『両方エックス』と書きこむのだから、
if st.range(行番号, 読取列X).value == "X" \
and st.range(行番号, 読取列Y).value == "X":
st.range(行番号, 書込列).value = "両方エックス"
と記述します。
【ソースコードパネル】
import xlwings
wb = xlwings.Book(‘エックスワイ2列.xlsx’)
st = wb.sheets[0]
読取列X = 1
読取列Y = 2
書込列 = 3
行番号 = 1
if st.range(行番号, 読取列X).value == "X": \
and st.range(行番号, 読取列Y).value == "X":
st.range(行番号, 書込列).value = “両方エックス”
それでは、そのPythonプログラムを実行してみましょう。
1行目で、1列目のセルの値が『X』、かつ、2列目のセルの値が『X』だったので、
3列目のセルに『両方エックス』と書きこまれました。
(2)for文(ループ処理)とif文(条件分岐処理)の組み合わせ
1~9行目の中で、
1列目のセルの値が『X』、かつ、2列目のセルの値が『X』のとき、
3列目のセルに『両方エックス』と書きこんでみます。
今回は、for文(ループ処理)のブロックの中に、
if and 文(条件分岐処理)のブロックを組みこんでみます。
次のような構文になります。
for文(ループ処理)のブロックの中に、
if and 文(条件分岐処理)のブロックを組みこむ構文をつかいます。
読取列X = 1
読取列Y = 2
書込列 = 3
for 行番号 in range(1,10):
if st.range(行番号, 読取列X).value == "X" \
and st.range(行番号, 読取列Y).value == "X":
st.range(行番号, 書込列).value = "両方エックス"
と記述します。
【ソースコードパネル】
import xlwings
wb = xlwings.Book(‘エックスワイ2列.xlsx’)
st = wb.sheets[0]
読取列X = 1
読取列Y = 2
書込列 = 3
for 行番号 in range(1,10):
if st.range(行番号, 読取列X).value == "X" \
and st.range(行番号, 読取列Y).value == "X":
st.range(行番号, 書込列).value = “両方エックス”
それでは、そのPythonプログラムを実行してみましょう。
1行目で、1列目のセルの値が『X』、かつ、2列目のセルの値が『X』だったので、
3列目のセルに『両方エックス』と書きこまれました。
2. 両方が『Y』のときは『両方ワイ』
1~9行目の中で、
1列目のセルの値が『Y』、かつ、2列目のセルの値が『Y』のとき、
3列目のセルに『両方ワイ』と書きこんでみます。
for文(ループ処理)のブロックの中に、
if and 文(条件分岐処理)のブロックを組みこむ構文をつかいます。
読取列X = 1
読取列Y = 2
書込列 = 3
for 行番号 in range(1,10):
if st.range(行番号, 読取列X).value == "Y" \
and st.range(行番号, 読取列Y).value == "Y":
st.range(行番号, 書込列).value = "両方ワイ"
と記述します。
【ソースコードパネル】
import xlwings
wb = xlwings.Book(‘エックスワイ2列.xlsx’)
st = wb.sheets[0]
読取列X = 1
読取列Y = 2
書込列 = 3
for 行番号 in range(1,10):
if st.range(行番号, 読取列X).value == "Y" \
and st.range(行番号, 読取列Y).value == "Y":
st.range(行番号, 書込列).value = “両方ワイ”
それでは、そのPythonプログラムを実行してみましょう。
8行目で、1列目のセルの値が『Y』、かつ、2列目のセルの値が『Y』だったので、
3列目のセルに『両方ワイ』と書きこまれました。
3. 両方が『』のときは『両方空白』
1~9行目の中で、
1列目のセルの値が『』、かつ、2列目のセルの値が『』のとき、
3列目のセルに『両方空白』と書きこんでみます。
for文(ループ処理)のブロックの中に、
if and 文(条件分岐処理)のブロックを組みこむ構文をつかいます。
読取列X = 1
読取列Y = 2
書込列 = 3
for 行番号 in range(1,10):
if st.range(行番号, 読取列X).value is None \
and st.range(行番号, 読取列Y).value is None:
st.range(行番号, 書込列).value = "両方空白"
と記述します。
【ソースコードパネル】
import xlwings
wb = xlwings.Book(‘エックスワイ2列.xlsx’)
st = wb.sheets[0]
読取列X = 1
読取列Y = 2
書込列 = 3
for 行番号 in range(1,10):
if st.range(行番号, 読取列X).value is None \
and st.range(行番号, 読取列Y).value is None:
st.range(行番号, 書込列).value = “両方空白”
それでは、そのPythonプログラムを実行してみましょう。
6行目で、1列目のセルの値が『』、かつ、2列目のセルの値が『』だったので、
3列目のセルに『両方空白』と書きこまれました。
このように、for文(ループ処理)のブロックの中に、
if and 文(条件分岐処理)のブロックを組みこむ構文をつかえば、
ループブロックで二つの条件式に両方とも当てはまったときに
特定の処理をすることができます。
試しに、『開始行』・『終了行』の各変数に設定する値、条件式の右辺に設定する値、
セルに書きこむ値を適当な数字や文字に書きかえて、Pythonプログラムを実行して、
ループブロックで二つの条件式に両方とも当てはまったときに
特定の処理を自由自在にすることができることを確かめてみてください。
それでは、ループブロックで二つの条件式の一方が当てはまったときに、
特定の処理を実行するには、どうすればよいのでしょうか。
これについては、次回『もしA列がXまたはB列がXのときはエックスを実行』で紹介します。