IFで以上以下の条件でエラーにならない方法

exce-vba VBA

テストの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関数を組み合わせたら・・・

If関数とAND

=IF(AND(C3>=70,C3<=89),”〇”,”×”)

このような数式になり、正常に計算してくれます。

これそのまま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 >= 70Range(“C3”).Value <= 89ですよね。

<span class="fz-12px">とりっぷぼうる</span>
とりっぷぼうる

気づきました?もう完成していますよ!

ANDにするだけ!

IfとANDを使って以上以下をVBAコードで書く

If Range(“C3”).Value >= 70 And Range(“C3”).Value <= 89 Then
Range(“D3”).Value = “B”

これで、70点以上89点以下はB評価というのができましたので、5段階評価ができるようにVBAコードを書いてみましょう。

Ifを使って5段階評価するVBAコード

Private Sub CommandButton1_Click()
If Range(“C3”).Value >= 90 Then
Range(“D3”).Value = “A”
ElseIf Range(“C3”).Value >= 70 And Range(“C3”).Value <= 89 Then
Range(“D3”).Value = “B”
ElseIf Range(“C3”).Value >= 50 And Range(“C3”).Value <= 69 Then
Range(“D3”).Value = “C”
ElseIf Range(“C3”).Value >= 30 And Range(“C3”).Value <= 49 Then
Range(“D3”).Value = “D”
ElseIf Range(“C3”).Value <= 29 Then
Range(“D3”).Value = “E”
End If
End Sub

  • 「A評価」90点以上
  • 「B評価」70点以上89点以下
  • 「C評価」50点以上69点以下
  • 「D評価」30点以上49点以下
  • 「E評価」29点以下

このように5段階評価もできるようになりましたね。

個人的にはこのように〇か×ぐらいならばIf~Thenを使いますが3つ以上になったらSelect Caseステートメントをおススメします。

VBAコード自体もシンプルになり短くなるので、見た目もスッキリしますよ。

VBA
スポンサーリンク
参考になりましたらシェア宜しくお願い致します
Excel VBA