プロが教える店舗&オフィスのセキュリティ対策術

A2の数値が10以上50以下の場合B2にaと表示し、
51以上70以下の場合、bと表示、それ以外はcと表示し、空白はエラーと表示したいです。
この作業をデータがある最終行まで処理したいのですが、マクロを使って可能でしょうか?

宜しくお願いします。

質問者からの補足コメント

  • 数式ではなく、マクロを組みたいです!

    No.1の回答に寄せられた補足コメントです。 補足日時:2021/01/26 15:57
  • これは50.1など小数点にも使えるのでしょうか?

    No.2の回答に寄せられた補足コメントです。 補足日時:2021/01/26 19:23
  • 50.1など小数点も判定するにはやはり難しいのでしょうか?

    No.5の回答に寄せられた補足コメントです。 補足日時:2021/01/26 19:25
  • 10.0以上50.0以下の場合:a
    50.1以上70.0以下の場合:b
    どちらでもない場合:c

    9.9の場合:c
    10.0の場合:a
    50.1の場合:b
    50.0の場合:a
    70.1の場合:c
    空白の場合:エラー

    この様な感じでしたいです。
    ややこしくてすみません。

    No.6の回答に寄せられた補足コメントです。 補足日時:2021/01/26 20:34
  • 10.0以上50.0以下の場合:a
    50.1以上70.0以下の場合:b
    どちらでもない場合:c

    9.9の場合:c
    10.0の場合:a
    50.1の場合:b
    50.0の場合:a
    70.1の場合:c
    空白の場合:エラー

    この様な感じでしたいです。

    No.7の回答に寄せられた補足コメントです。 補足日時:2021/01/26 21:03
  • 小数点 第一までで大丈夫です!

    No.8の回答に寄せられた補足コメントです。 補足日時:2021/01/26 21:06
  • 数値でない場合はエラーでお願いします!

    No.9の回答に寄せられた補足コメントです。 補足日時:2021/01/26 22:51

A 回答 (11件中1~10件)

10.0以上50.0以下の場合:a


50.1以上70.0以下の場合:b
どちらでもない場合:c
(50.05はc)
数値以外と空白はエラー
上記の条件です。
標準モジュールへ登録してください。
添付図が実行結果です。

Option Explicit

Public Sub 判定()
Dim maxrow As Long
Dim wrow As Long
Dim val As Variant
Dim judge As Variant
maxrow = Cells(Rows.Count, 1).End(xlUp).row
For wrow = 2 To maxrow
judge = ""
val = Cells(wrow, "A").Value
If val = "" Or IsNumeric(val) = False Then
judge = "エラー"
Else
If val >= 10 And val <= 50 Then
judge = "a"
End If
If val >= 50.1 And val <= 70 Then
judge = "b"
End If
End If
If judge = "" Then
judge = "c"
End If
Cells(wrow, "B").Value = judge
Next
MsgBox ("完了")
End Sub
「Excel vba」の回答画像10
    • good
    • 0

No.5です。


>小数点 第一までで大丈夫です!
つまり、入力データに少数点第一位以下はないと理解しました。
(当方の真意は数値の「穴」や「間」のない表現で指示して欲しいと書いたつもりなのですが、)50.09というようなデータそのものが存在しないのであれば、(そのような事態がおこることはないので)マクロ上はaでもbでもcでもよいということになります。
であれば、前回回答のマクロの「>=51」となっている部分を「>50」に一箇所直すだけです。

Option Explicit
Sub sample()
Dim i As Long
Dim e_row As Long
Dim target As Range
e_row = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To e_row
Set target = Cells(i, 1)
If (target.Value = "") Or Not (IsNumeric(target.Value)) Then
target.Offset(0, 1).Value = "ERROR"
ElseIf (target.Value >= 10) And (target.Value <= 50) Then
target.Offset(0, 1).Value = "a"
ElseIf (target.Value >50) And (target.Value <= 70) Then
target.Offset(0, 1).Value = "b"
Else
target.Offset(0, 1).Value = "c"
End If
Set target = Nothing
Next
End Sub
    • good
    • 0
この回答へのお礼

本当にありがとうございました。

お礼日時:2021/01/28 11:42

>小数点 第一までで大丈夫です!


50.09はcで良いということですね。
あと、数値でない場合も、cで良いですか。(例 abc 等)
この回答への補足あり
    • good
    • 0

No.5,7です。


>10.0以上50.0以下の場合:a
>50.1以上70.0以下の場合:b
>どちらでもない場合:c
これだと、50.09の場合はcとなりますがよいのでしょうか?
この回答への補足あり
    • good
    • 0

No.5です。



>50.1など小数点も判定するにはやはり難しいのでしょうか?

難しくはありません。
数値の範囲を指定する場合、「~以上」「~以下」「~より大きい」「~未満」の表現をきちんと組み合わせて、数値の「穴」や「間(はざま)」が発生しないよう指定すれば、ご心配のような問題は発生しません。
ご質問者の場合「~以上~以下」という範囲指定を複数なさったため、「はざま」が発生しています。
逆に「~以上~以下」を複数使用すると、一つの数値がどちらに属するのかわからなくなる「所属不定」となる場合もあります。
きちんと、数値の「穴」「間(はざま)」「所属不定」が発生しないよう指定していただければ問題は解決可能です。
この回答への補足あり
    • good
    • 0

No2です。


>これは50.1など小数点にも使えるのでしょうか?
使えます。但し、現在では、50.1の場合、c設定されます。
10以上50以下の場合:a
51以上70以下の場合:b
上記のどちらでもないので、cになります。
50.1の場合、どうなさりたいかを再提示していただければ
そのように作り替えることは可能です。
その場合は、要件にもれがないように、要件をきちんと書いてください。
この回答への補足あり
    • good
    • 0

No.4です。


注記するつもりで、書き漏らしてしまったので、追記します。
前回回答のマクロは数値についてはご質問者の指定した範囲条件を「忠実」に指定しています。
例えば50以下と51以上のはざまにある数値50.1などはaでもbでもないのでcと判定されます。
ご承知おき願います。
この回答への補足あり
    • good
    • 0

>数式ではなく、マクロを組みたいです!


思わず「何故?」とツッコミたくなるような、他の回答者さんもご指摘のとおり、ご質問者がマクロに拘る理由がいまひとつ不明です。
また、データに数値でないものが入力されていた場合の処理も不明です。
一応数値でないものはERRORを返すような簡単なサンプルは以下のようなものです。


Option Explicit
Sub sample()
Dim i As Long
Dim e_row As Long
Dim target As Range
e_row = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To e_row
Set target = Cells(i, 1)
If (target.Value = "") Or Not (IsNumeric(target.Value)) Then
target.Offset(0, 1).Value = "ERROR"
ElseIf (target.Value >= 10) And (target.Value <= 50) Then
target.Offset(0, 1).Value = "a"
ElseIf (target.Value >= 51) And (target.Value <= 70) Then
target.Offset(0, 1).Value = "b"
Else
target.Offset(0, 1).Value = "c"
End If
Set target = Nothing
Next
End Sub
    • good
    • 0

#1で回答されているように、関数・数式で処理できるものをわざわざVBAで処理する必要があるのですかね。



というより、
>A2の数値が10以上50以下の場合B2にaと表示し、
51以上70以下の場合、bと表示、それ以外はcと表示し、空白はエラーと表示したいです。
なんて基礎の基礎じゃないですか。
>データがある最終行まで処理したい
これも基礎的なものだろうと思います。
質問者さんはVBAは理解されているのですか?
    • good
    • 0

以下のマクロを標準モジュールに登録してください。



Option Explicit

Public Sub sample()
Dim maxrow As Long
Dim wrow As Long
Dim val As Variant
Dim judge As Variant
maxrow = Cells(Rows.Count, 1).End(xlUp).row
For wrow = 2 To maxrow
judge = ""
val = Cells(wrow, "A").Value
If val = "" Then
judge = "エラー"
Else
If IsNumeric(val) = True Then
If val >= 10 And val <= 50 Then
judge = "a"
Else
If val >= 51 And val <= 70 Then
judge = "b"
End If
End If
End If
End If
If judge = "" Then
judge = "c"
End If
Cells(wrow, "B").Value = judge
Next
MsgBox ("完了")
End Sub
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!