マクロの不等号についての質問です。
マクロ初心者でネットで検索しながら自己流で勉強をしていますのでトンチンカンで初歩的な質問でしたら申し訳ありません。
現在不等号を使用して入力した値から外れていたらメッセージが出るようにはしているのですが、セル内で計算をしているせいか規定値内に入っていてもメッセージがでてきてしまいます。
現状行なっている仮定となりますが
(絶対値での計算ですので)
ABS(A1)+ ABS(A2)の結果をB1にセットし
範囲の設定は条件によって変わりますので
事前にマクロのフォームを使用して入力した値がD1に入力されるようにしいますのでその結果に応じて
最小値がE1に最大値がE2へと入力されるように計算式を入れました。
実際の計算式は
E1が=D1-6 E2が=D1
となっています。
以上の前提条件からB1で計算された値がE1E2の間にない場合はメッセージが出るようにしたく質問いたします。
今回行なったマクロは
If Range("B1").Value > Range("E1") And Range("B1").Value < Range("E2").Value Then
Else
MsgBox "値から外れています" & vbCrLf "確認を行ってください", vdExclamation
Cancel = True
End If
です。
申し訳ありませんがよろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
今回のIFでうまくいかないのは、Range("E1") > Andって書いてある(Valueプロパティが抜けている)せいじゃないですか?CellsだったらValueを省略してもデフォルトプロパティがValueなので問題ないですが、RangeのデフォルトプロパティはValueじゃないんですよ。
なんじゃそりゃ?な_Defaultがデフォルトです。ちなみに私だったら異常値を捕まえたい場合は、先に異常値かどうかを判定します。で、範囲のように異常になる条件が複数ある場合はすり抜けがあると嫌なので、AndではなくOrで「どれか一つでも異常だったらTrueになる」ようにIFを書きます。以下みたいな感じで。まあ「全部正常だったら処理する」ってのとどっちが良いかは、完全に好みやどちらのケースが多いかで変わる問題ですけどね。
If (Range("B1").Value < Range("E1").Value) Or (Range("B1").Value > Range("E2").Value) Then
MsgBox "値から外れています" & vbCrLf "確認を行ってください", vdExclamation
Cancel = True
Else
正常な場合の処理
End If
この場合はカッコは付けなくても動作するはずですが、自分で後で見て迷うくらいなら不要であってもカッコを省略しない方が身のためです。また正常な場合の処理が不要な場合は、Elseも不要です(当たり前)。
外部アクセスできないPCからスマホでの手入力でしたので構文にミスがあり申し訳ありませんでした。ご指摘の.Valueは入力されています。
ですがORでの括りを行い範囲外である場合を指定した方がわかりやすいですね!
まだ私にはElseを扱うには勉強が足りず時期尚早だったようです。
非常に勉強になりましたありがとうございます。
No.2
- 回答日時:
単に書き方だけの話ですが、
変更前
If Range("B1").Value > Range("E1") And Range("B1").Value < Range("E2").Value Then
変更後
a=Range("E1").Value
b=Range("B1").Value
c=Range("E2").Value
if a<b and b<c then
こっちの方が見やすいですよ。何を言いたいのかというと、表記ミスではないですか?
コードにおいては可読性(読みやすさ)も重要です。
ご指摘ありがとうございます
SymphonicMarchさんのおっしゃる通り読みやすさの点から
定義づけする方がわかりやすいのは重々承知でやった方がいいのは頭にはあったのですが
不等号対象のB1セルを次の処理でB2に移りB3,B4,G1,G2と対象が変わるので
一個々々構文を作成していたので何とも読みづらいものとなってしまいまい
わけがわからなくなってしまったのが実情かもしれません。
何とも初心者が陥りそうなことで申し訳なかったです。
何度も似たような処理をするならそれこそ定義づけしろよと言われると思います(泣
ご指摘の通り一度定義づけして構文の見直しを行ってみたいと思います。
定義づけの正しい方法もいまだ理解が曖昧な部分も多々あるので
いじりながら使い方を勉強していきたいと思います。
ご回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- Excel(エクセル) Excel2007での条件付き書式について 6 2023/05/02 10:56
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/03/02 08:40
- Excel(エクセル) ワードのマクロについて教えてください。 1 2023/03/11 13:50
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/03/07 14:05
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/03/08 09:08
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) エクセルのマクロについて教えてください。 5 2023/06/02 08:44
- Excel(エクセル) 並べ替え、ソートの構文がわからない。 お世話になります。VBA超初心者です。 エクセルでワークシート 2 2023/06/28 21:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで特定の列が0表示の場...
-
Excel マクロ VBA プロシー...
-
Excel・Word リサーチ機能を無...
-
メッセージボックスのOKボタ...
-
ExcelのVBA。public変数の値が...
-
一つのTeratermのマクロで複数...
-
特定のPCだけ動作しないVBAマク...
-
エクセルで別のセルにあるふり...
-
Excel VBAからAccessマクロを実...
-
ExcelVBAでPDFを閉じるソース
-
Excel2013 VBA マクロ実行中に...
-
エクセルに張り付けた写真のフ...
-
IF関数を使ってマクロを実行さ...
-
Excel 改ページのVBAうまくい...
-
エクセルのマクロについて教え...
-
ExcelVBA 図形をクリックした...
-
EXCELのVBAでRange("A1:C4")を...
-
Excelのマクロについて教えてく...
-
有効数字N桁のマクロについて
-
MSアクセスのマクロ・モジュー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel・Word リサーチ機能を無...
-
特定のPCだけ動作しないVBAマク...
-
エクセルで特定の列が0表示の場...
-
Excel マクロ VBA プロシー...
-
メッセージボックスのOKボタ...
-
一つのTeratermのマクロで複数...
-
エクセルで別のセルにあるふり...
-
ExcelのVBA。public変数の値が...
-
エクセルに張り付けた写真のフ...
-
ExcelVBAでPDFを閉じるソース
-
EXCELのVBAでRange("A1:C4")を...
-
Excel VBAからAccessマクロを実...
-
TERA TERMを隠す方法
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
マクロ実行時、ユーザーフォー...
-
Excelのマクロについて教えてく...
-
ソース内の行末に\\
おすすめ情報
構文が汚いのは許してください泣