Switch関数による条件分岐ではエラー出力を防げない

 豆知識です。
 エラーを出力させないためにIIf関数を用いて条件分岐させることがありますが、Switch関数では同じようにはできません。以下で実例を見てみます。

f:id:accs2014:20190214143432p:plain:right:w550

 サンプルとしてこのようなテーブルを用いて、各人の打率を求めるものとします。
 考慮しなければならないのは打数が0の者について割り算するとエラーになることです。

f:id:accs2014:20190214145153p:plain:right:w650

 クエリのデザインビューです。
 まずはIIf関数を使って次のような列を設けます。

打率: IIf([打数]=0,"打数0",IIf([打数]<100,"規定打席未満",[安打数]/[打数]))

 関数がネストとしててちょっと複雑ですが、まず最初(外側)の関数で打数が0の場合には「打数0」と表示させるものとします。そうでない場合は次(内側)の関数に進み、打数が100未満なら「規定打席未満」、そうでなければ割り算して打率を表示する、という流れです。

f:id:accs2014:20190214145150p:plain:right:w550

 データシートビューです。
 打数0の者についてはエラーにはならず「打数0」と表示されています。

f:id:accs2014:20190214150908p:plain:right:w650

 ところで、上記の式はSwitch関数を使って次のような式にしても同じ結果になりそうです。

打率: Switch([打数]=0,"打数0",[打数]<100,"規定打席未満",True,[安打数]/[打数])

 条件1として打数が0なら「打数0」と出力、そうでない場合には条件2として打数が100未満なら「規定打席未満」と出力、それにも該当しない場合は(条件3を「True」とすることにより、必ず)割り算の結果を出力する、という流れです。
 式の長さはIIfの場合と同じような感じですが、ネストしなくていいので読みやすく書きやすいのがメリットです。
 しかしデータシートビューにしてみると……

f:id:accs2014:20190214150905p:plain:right:w550

 打数0の者についてはエラーが出力されてしまいます。
 最初の条件を満たしているのですから後の条件と式はスキップしてくれればよさそうなものですが、Swicth関数ではそうはいかないのです。

 というわけですので、条件がやたら複雑になってIIf関数のネストで書き下すのが面倒な場合は、列をいくつか使って順次処理を進めていくのがよさそうです。