
No.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

No.12
- 回答日時:
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
No.8
- 回答日時:
No.5,7です。
>10.0以上50.0以下の場合:a
>50.1以上70.0以下の場合:b
>どちらでもない場合:c
これだと、50.09の場合はcとなりますがよいのでしょうか?
No.7
- 回答日時:
No.5です。
>50.1など小数点も判定するにはやはり難しいのでしょうか?
難しくはありません。
数値の範囲を指定する場合、「~以上」「~以下」「~より大きい」「~未満」の表現をきちんと組み合わせて、数値の「穴」や「間(はざま)」が発生しないよう指定すれば、ご心配のような問題は発生しません。
ご質問者の場合「~以上~以下」という範囲指定を複数なさったため、「はざま」が発生しています。
逆に「~以上~以下」を複数使用すると、一つの数値がどちらに属するのかわからなくなる「所属不定」となる場合もあります。
きちんと、数値の「穴」「間(はざま)」「所属不定」が発生しないよう指定していただければ問題は解決可能です。
No.6
- 回答日時:
No2です。
>これは50.1など小数点にも使えるのでしょうか?
使えます。但し、現在では、50.1の場合、c設定されます。
10以上50以下の場合:a
51以上70以下の場合:b
上記のどちらでもないので、cになります。
50.1の場合、どうなさりたいかを再提示していただければ
そのように作り替えることは可能です。
その場合は、要件にもれがないように、要件をきちんと書いてください。
No.5
- 回答日時:
No.4です。
注記するつもりで、書き漏らしてしまったので、追記します。
前回回答のマクロは数値についてはご質問者の指定した範囲条件を「忠実」に指定しています。
例えば50以下と51以上のはざまにある数値50.1などはaでもbでもないのでcと判定されます。
ご承知おき願います。
No.4
- 回答日時:
>数式ではなく、マクロを組みたいです!
思わず「何故?」とツッコミたくなるような、他の回答者さんもご指摘のとおり、ご質問者がマクロに拘る理由がいまひとつ不明です。
また、データに数値でないものが入力されていた場合の処理も不明です。
一応数値でないものは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
No.3
- 回答日時:
#1で回答されているように、関数・数式で処理できるものをわざわざVBAで処理する必要があるのですかね。
というより、
>A2の数値が10以上50以下の場合B2にaと表示し、
51以上70以下の場合、bと表示、それ以外はcと表示し、空白はエラーと表示したいです。
なんて基礎の基礎じゃないですか。
>データがある最終行まで処理したい
これも基礎的なものだろうと思います。
質問者さんはVBAは理解されているのですか?
No.2
- 回答日時:
以下のマクロを標準モジュールに登録してください。
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
同じシート内にイベントプロシ...
-
WinSCPでLinux(CentOS6.10)に...
-
【マクロ】元データと同じお客...
-
VBAで保存しないで閉じると空の...
-
WPSOffice_マクロの有効化について
-
【Excel VBA】マクロでExcel自...
-
エクセルのvbaにて thisworkboo...
-
エクセル関数>参照ファイル名...
-
Excel マクロの編集がグレーに...
-
マクロの保存先、開いてるすべ...
-
複数のマクロボタンをまとめて...
-
エクセル ボタンに設定したマク...
-
Excelのマクロでボタンを押すと...
-
エクセルでマクロ(Excel 4.0)...
-
【Excel】マクロの保存先について
-
エクセル;相対パスを絶対パスへ...
-
エクセルで、「いいね」のよう...
-
エクセルの、記録を終了したマ...
-
エクセル マクロ名にブック名...
-
エクセル連番自動印刷について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
WinSCPでLinux(CentOS6.10)に...
-
同じシート内にイベントプロシ...
-
お久しぶりです。awkに関する質...
-
Excel vba
-
リストボックスで選択したexcel...
-
【マクロ】元データと同じお客...
-
VBAで保存しないで閉じると空の...
-
WPSOffice_マクロの有効化について
-
Excel マクロの編集がグレーに...
-
【Excel VBA】マクロでExcel自...
-
複数のマクロボタンをまとめて...
-
エクセル関数>参照ファイル名...
-
エクセル ボタンに設定したマク...
-
Excelのマクロでボタンを押すと...
-
マクロの保存先、開いてるすべ...
-
エクセルのvbaにて thisworkboo...
-
エクセルで、「いいね」のよう...
-
エクセル マクロ名にブック名...
-
エクセルでマクロ(Excel 4.0)...
-
VBA Shapes コピーと名前
おすすめ情報
数式ではなく、マクロを組みたいです!
これは50.1など小数点にも使えるのでしょうか?
50.1など小数点も判定するにはやはり難しいのでしょうか?
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
空白の場合:エラー
この様な感じでしたいです。
ややこしくてすみません。
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
空白の場合:エラー
この様な感じでしたいです。
小数点 第一までで大丈夫です!
数値でない場合はエラーでお願いします!