【条件分岐処理でセルの操作を分ける】

 1 もしA列がXのときはエックスを実行

 2 もしA列が、Xのときはエックス、Yのときはワイを実行

 3 もしA列が、Xのときはエックス、その他のときはソノタを実行

 4 もしA列がXかつB列がXのときはエックスを実行

 5 もしA列がXまたはB列がXのときはエックスを実行

もしA列が、Xのときはエックス、その他のときはソノタを実行

 前回『もしA列が、Xのときはエックス、Yのときはワイを実行』では、

 二つ以上の各条件式に当てはまったときにそれぞれの処理を実行するif_elifを紹介しました。


 今回は、条件式に当てはまったときに特定の処理を実行し、

 条件式に当てはまらないときに別の処理を実行するif_else:を紹介します。

Img6_3_1

 Python-xlwingsのif_elseとは、

 もしA列が、Xのときはエックス、その他のときはソノタを実行するというように、

 条件式に当てはまったとき処理Tを実行し、その他のとき処理Fを実行するということです。


 今回も、セルの値が特定の文字のときに、その右隣りのセルに文字を書きこむようにします。

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

Img6_3_2

 今回も、このように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という条件に当てはまったとき同じ行で別の列のセルに変数Tを書きこみ、

 その他のとき同じ行で別の列のセルに変数Fを書きこむというケースでは、

 次のような構文になります。

Img6_3_3


1. 『X』のときは『エックス』、その他のときは『その他』

(1)if・else文(条件分岐処理)

 1行目・1列目のセルの値が『X』という条件式に当てはまったときは、

 1行目・2列目のセルに『エックス』と、

 その条件式に当てはまらないときは、

 1行目・2列目のセルに『その他』と書きこんでみます。

 列番号を変数『読取列』と『書込列』、行番号を変数『行番号』とします。


 1行目・1列目のセルの値を読みとり、

 1行目・2列目のセルの値に書きこむのだから、

 変数『読取列』の値に1  読取列 = 1

 変数『書込列』の値に2  書込列 = 2

 変数『行番号』の値に1  行番号 = 1 と記述します。

 次に、セルの値がAという条件に当てはまったとき

 同じ行で別の列のセルに変数を書きこみ、

 その他のとき同じ行で別の列のセルに変数を書きこむ構文をつかってみます。

 1行目・1列目のセルの値が『X』という条件式に当てはまったときは、

 1行目・2列目のセルに『エックス』と、

 1行目・1列目のセルの値がその条件式に当てはまらないときは、

 1行目・2列目のセルに『その他』と書きこむのだから、

 if st.range(行番号, 読取列).value == "X":

 st.range(行番号, 書込列).value = "エックス"

 else:

 st.range(行番号, 書込列).value = "その他"

 と記述します。


 【ソースコードパネル】

import xlwings

wb = xlwings.Book(‘エックスワイ.xlsx’)

st = wb.sheets[0]

読取列 = 1

書込列 = 2

行番号 = 1

if st.range(行番号, 読取列).value == "X":

st.range(行番号, 書込列).value = “エックス”

else:

st.range(行番号, 書込列).value = “その他”


 それでは、そのPythonプログラムを実行してみましょう。

Img6_3_5

 行目・1列目のセルの値が『X』だったので、1行目・2列目のセルに『エックス』と書きこまれました。



(2)for文(ループ処理)とif・else文(条件分岐処理)の組み合わせ

 1~5行目の中で、

 1列目のセルの値が『X』という条件式に当てはまったときは、

 2列目のセルに『エックス』と書きこんで、

 その条件式に当てはまらないときは、

 2列目のセルに『その他』と書きこんでみます。


 今回は、for(ループ処理)のブロックの中に、

 if_else:(条件分岐処理)のブロックを組みこんでみます。

 次のような構文になります。

Img6_3_6

for(ループ処理)のブロックの中に、

if_else:(条件分岐処理)のブロックを組みこむ構文をつかってみます。

読取列 = 1

書込列 = 2

for 行番号 in range(1,6):

if st.range(行番号, 読取列).value == "X":

st.range(行番号, 書込列).value = "エックス"

else:

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 = “エックス”

else:

st.range(行番号, 書込列).value = “その他”


 それでは、そのPythonプログラムを実行してみましょう。

Img6_3_8

 1列目1・5行目のセルの値が『X』だったので、

 2列目1・5行目のセルに『エックス』と書きこまれ、

 1列目2・3・4行目のセルの値が『X』ではなかったので、

 2列目2・3・4行目のセルに『その他』と書きこまれました。



2. 『X』のときは『エックス』、『Y』のときは『ワイ』、その他のときは『その他』

 1~5行目の中で、

 1列目のセルの値が『X』という条件式に当てはまったときは、

 2列目のセルに『エックス』と書きこんで、

 1列目のセルの値が『Y』という条件式に当てはまったときは、

 2列目のセルに『ワイ』と書きこんで、

 その二つの条件式に当てはまらないときは、

 2列目のセルに『その他』と書きこんでみます。


 if_else:(条件分岐処理)のブロックの中で、

 elifは何回でもつかうことができます。

 次のような構文になります。

Img6_3_9

 elifは途中で何回でもつかうことができますが、

 必ずifが最初でelseが最後になるように組みます。


 for(ループ処理)のブロックの中に、

 if_elif_else(条件分岐処理)のブロック

 を組みこむ構文をつかいます。

読取列 = 1

書込列 = 2

for 行番号 in range(1,6):

if st.range(行番号, 読取列).value == "X":

st.range(行番号, 書込列).value = "エックス"

elif st.range(行番号, 読取列).value == "Y":

st.range(行番号, 書込列).value = "ワイ"

else:

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 = “ワイ”

else:

st.range(行番号, 書込列).value = “その他”


 それでは、そのPythonプログラムを実行してみましょう。

Img6_3_11

 1列目1・5行目のセルの値が『X』だったので、

 2列目1・5行目のセルに『エックス』と書きこまれ、

 1列目3行目のセルの値が『Y』だったので、

 2列目3行目のセルに『ワイ』と書きこまれ、

 1列目2・4行目のセルの値が『X』でも『Y』でもなかったので、

 2列目2・4行目のセルに『その他』と書きこまれました。



3. 『X』のときは『エックス』、『Y』のときは『ワイ』、『』のときは『空白』、その他のときは『その他』

 1~5行目の中で、

 1列目のセルの値が『X』という条件式に当てはまったときは、2列目のセルに『エックス』と書きこんで、

 1列目のセルの値が『Y』という条件式に当てはまったときは、2列目のセルに『ワイ』と書きこんで、

 1列目のセルの値が『』という条件式に当てはまったときは、2列目のセルに『空白』と書きこんで、

 その三つの条件式に当てはまらないときは、2列目のセルに『その他』と書きこんでみます。


 for(ループ処理)のブロックの中に、

 if_elif_else(条件分岐処理)のブロックを組みこむ構文をつかいます。

読取列 = 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 = "空白"

else:

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 = “空白”

else:

st.range(行番号, 書込列).value = “その他”


 それでは、そのPythonプログラムを実行してみましょう。

Img6_3_13

 1列目1・5行目のセルの値が『X』だったので、

 2列目1・5行目のセルに『エックス』と書きこまれ、

 1列目3行目のセルの値が『Y』だったので、

 2列目3行目のセルに『ワイ』と書きこまれ、

 1列目3行目のセルの値が『』だったので、

 2列目3行目のセルに『空白』と書きこまれ、

 1列目2行目のセルの値が『X』でも『Y』でも『』でもなかったので、

 2列目2行目のセルに『その他』と書きこまれました。



 このように、for(ループ処理)のブロックの中に、

 if_else(条件分岐処理)のブロックを組みこむ構文をつかえば、

 ループブロック条件式に当てはまったときに特定の処理をして、

 条件式に当てはまらないときに別の処理をすることができます

 試しに、『開始行』・『終了行』の各変数に設定する値、条件式の右辺に設定する値、

 セルに書きこむ値を適当な数字や文字に書きかえて、Pythonプログラムを実行して、

 ループブロック条件式に当てはまったときに特定の処理をして、

 条件式に当てはまらないときに別の処理をすることができることを確かめてみてください。


 それでは、ループブロック二つの条件式に両方とも当てはまったときに、

 特定の処理を実行するには、どうすればよいのでしょうか。

 これについては、次回『もしA列がXかつB列がXのときはエックスを実行』で紹介します。