IFで以上以下の条件でエラーにならない方法
テストの5段階評価をVBAでやろうと思ったら、70点以上89点以下ってどうやるの?って思いませんでしたか?
同じは「=」、90点以上は「>=」、69点以下は「<=」で表せますよね。
念の為VBAコードでセルC3の値が・・・をVBAコードでまとめるとこうなります。
Range(“C3”).Value > 90 | 90点よりも大きい(91点以上) |
Range(“C3”).Value >= 90 | 90点以上 |
Range(“C3”).Value = 90 | 90点(一致) |
Range(“C3”).Value <= 90 | 90点以下 |
Range(“C3”).Value < 90 | 90点よりも小さい(89点以下) |
VBAのIfとIf関数は配置が違う?
〇点以上×点以下や~の間の点数をVBAコードで「〇 To ×」では、Select Caseで使えたからといてもIf~Thenではエラーになります。
そこで、ワークシート上にIf関数で数式を書くのと同じように、70点以上89点以下をIf関数とAND関数を組み合わせたら・・・
このような数式になり、正常に計算してくれます。
これそのままVBAのIfでも使ってしまった例が以下です。
If Range(“C3”).Value >= 70 And <= 89 Then
Range(“D3”).Value = “B”
セルC3が70点以上と(AND)89点以下の時セルD3に「B」と入力の予定でしたが、If~Thenの時はIF関数とAND関数をワークシート上と同じようにVBAコードを使ってしまうとエラーになってしまいます。
「Range(“C3”).Value >= 70」の70点以上というVBAコードは、正常に動いてくれるので、ANDで「<= 89」89点以下を足したのですが、よく見るとバランス悪いの気づきましたか?
- 70点以上には Range(“C3”).Value >= 70 と書いている
- 89点以下には <=89 しか書いていない
VBAに向き合い始めた頃はこんな失敗日常茶飯事でしたね。
If関数とAND関数の数式はバランスよく書いているのに(C3>=70,C3<=89)、VBAコードの時になぜすぐに気づかなかったのだろうって自分自身思いましたね。
バランス良くするには、Range(“C3”).Value >= 70とRange(“C3”).Value <= 89ですよね。
気づきました?もう完成していますよ!
とをANDにするだけ!
これで、70点以上89点以下はB評価というのができましたので、5段階評価ができるようにVBAコードを書いてみましょう。
- 「A評価」90点以上
- 「B評価」70点以上89点以下
- 「C評価」50点以上69点以下
- 「D評価」30点以上49点以下
- 「E評価」29点以下
このように5段階評価もできるようになりましたね。
個人的にはこのように〇か×ぐらいならばIf~Thenを使いますが3つ以上になったらSelect Caseステートメントをおススメします。
VBAコード自体もシンプルになり短くなるので、見た目もスッキリしますよ。