Excel VBA 条件式
If文で、2つの条件
x = 0
1/x > 1
のどちらかを満たす場合
…というのを1文で書けます?
x = 0 or 1/x > 1
にすると、0除算が生じてエラーになります。
条件を0≦x<1に置き換えればいい、という事ではなくて、
『分母となる変数が0の場合も「正」として処理したい』
ということと、
各々の条件でフラグを立てて、フラグを根拠として処理をするとか、逃げ方はありますが、
『Ifの条件として1文で書けるか』
という部分で質問になります。
よろしくお願いします。
No.3
- 回答日時:
No.1です。
なんと回答したコードは問題が生じるのですね。
勉強になりましたけど、初級レベルなジジィではどのような問題になるのかがわからないのでその要因ってどうやって調べられるのかなぁ?
No.2
- 回答日時:
Visual Basic なら短絡評価の OrElse で解決できますが、
https://docs.microsoft.com/ja-jp/dotnet/visual-b …
VBA には短絡評価の演算子が実装されていないので、
0除算が起きないように条件式を変えるしかなさそうです。
(例)
x = 0 Or 1/x > 1
↓ 元の条件と同じ結果になるように変形
1 / IIf(x=0,0.5,x) > 1
ただしこれでは、仕様がぼやけて後々問題が生まれそうなので、
迂遠のようですが条件判定を関数化するのがお勧めです。
関数名で目的を明確にすれば、とても読みやすくなるオマケつきです。
(例)
If CheckHogehogeX(x) Then ...
...
Function CheckHogehogeX(x As Double) As Boolean
_ If x = 0 Then
_ _ CheckHogehogeX = True
_ ElseIf 1 / x > 1 Then
_ _ CheckHogehogeX = True
_ Else
_ _ CheckHogehogeX = False
_ End If
End Function
ありがとうございます。
関数化までは頭が回りませんでしたが、
頂いた回答のような方法までは考えてたんだけど、
「or」で片付きそうなのに複数行になるのが悔しくてお知恵を求めてました。
「短絡評価」初めて耳にしたので検索しました。
私が求めてたのは「短絡評価」だったのか!
同じ事態に陥ったときにこの言葉を思い出せるか自身はありませんけど…
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA初心者です。 VBAで行単位で条件付き書式の色をカウントしたいです。 大量のデータがあるExc 3 2022/06/08 10:00
- Visual Basic(VBA) VBA初心者です。 VBAで行単位で条件付き書式の色をカウントしたいです。 大量のデータがあるExc 3 2022/06/08 10:02
- Visual Basic(VBA) Excel(VBA) 特定の条件に該当する行の値、書式を同じセルにコピ&ペーストしたいです 1 2022/05/21 18:18
- Visual Basic(VBA) ExcelのVBAを使い、複数シートの同一箇所を、同一条件にて一括でソルバーを回す方法について 1 2022/04/23 11:49
- Visual Basic(VBA) VBAの繰り返し処理表記と複数の処置条件について 1 2023/01/23 20:08
- Visual Basic(VBA) 3つの条件を指定してVBAで行を削除したい 条件1:分類1が重複 条件2:分類2が重複 条件3:個数 6 2022/06/24 11:07
- Visual Basic(VBA) VBA 「,」・空白・カタカナ等の複数条件のマクロ 2 2023/08/23 11:57
- Excel(エクセル) beforecloseの中からの抜け出し方 1 2023/08/10 18:01
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- Visual Basic(VBA) VBA エクセル 条件の設定 1 2022/03/28 10:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
-
switch の範囲指定
-
【Excel】特定の文字を含むセル...
-
Do~Loopした回数をカウントしたい
-
VBの質問#if 0 then ってどう...
-
EXCEL VBA マクロ 実行する度に...
-
DoEventsがやはり分からない
-
メルカリのメルカードで買い物...
-
インタラクティブの反対語は?
-
リョウ・・・量?料?
-
2重のDo~Loopは?
-
VB.NET Excelを読み込んでDataT...
-
FFTの結果ついて
-
タッチパッドはチャタリングは...
-
C# 画面のちらつきを解消したい
-
セルの値が0はクリアするマクロ
-
VBA SaveChanges 上書きされない
-
UMLでの例外処理
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
メルカリのメルカードで買い物...
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
-
【Excel】特定の文字を含むセル...
-
EXCEL VBA マクロ 実行する度に...
-
switch の範囲指定
-
DoEventsがやはり分からない
-
VBの質問#if 0 then ってどう...
-
UMLでの例外処理
-
Do~Loopした回数をカウントしたい
-
VB.NET Excelを読み込んでDataT...
-
月度は何て読みますか?
-
findは動くがfindnextがマクロ...
-
リョウ・・・量?料?
-
iD
-
VBA SaveChanges 上書きされない
-
Select Case文でこのようなこと...
-
Loadイベント中にほかのイベン...
-
セルの値が0はクリアするマクロ
おすすめ情報
回答くださった方々、ありがとうございました。
参考になる回答ばかりで感謝いたします。
私が個人的に直感的にわかりやすかったIIf関数の使用案をベストアンサーにさせていただきました。