• ベストアンサー

エクセルVBAのIf,Then 構文でOr条件とAnd条件の結合方法?

ワークシート関数で書けば =IF(OR(F18=0,AND(F15>0,F16>0)),TRUE)です。 これをVBAで書こうとして If Sheet1.Range("F18") = 0 Or Sheet1.Range("F15") > 0 And Sheet1.Range("F16") > 0 Then MsgBox True Else MsgBox False End If とやってみたのですが、正しくないようです。 どのように書けばいいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • ki-aaa
  • ベストアンサー率49% (105/213)
回答No.3

>とやってみたのですが、正しくないようです。 式は正しいと思いますよ ANDとORは、ANDが先に演算されます。/*と+-では、/*が先に演算されるようなものです。 でも、わかり易くするために、#1のかたのように括弧をつけるほうが良いですね。

joker999
質問者

お礼

よくわかりました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • Calbee
  • ベストアンサー率25% (1/4)
回答No.2

しゃべるように、そのまま記述したらいかがですか。 -------- IF Sheet1.Range("F18")= 0 then Msgbox Ture Elseif Sheet1.Range("F15") > 0 And Sheet1.Range("F16") > 0 Then Msgbox Ture Else Msgbox Fales End if -------- IF分中に確か二つの条件までしか出来なかったような・・・

joker999
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。
  • kagep
  • ベストアンサー率23% (171/721)
回答No.1

If Sheet1.Range("F18") = 0 Or (Sheet1.Range("F15") > 0 And Sheet1.Range("F16") > 0) Then かな。外してたらごめんなさい

joker999
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルVBA If Then 構文でOR条件の場合のVBA記述方法は?

    仮にセル("A1")が空白か Falseの場合は Then 以下のことをする。 と書きたいのですが If Sheets("Sheet1").Range("A1")="" Then ~略 If Sheets("Sheet1").Range("A1")=False Then ~略 と別々に記載する方法しかわかりません。 ワークシート関数のようにIF(OR(A1="",A1=False),~略)というようにまとめて記述するにはどう書けばいいのでしょうか? AND条件の場合も教えてください。よろしくお願いします。

  • エクセル・マクロでIf Thenの使い方

    このような質問は、ルール(エチケット、マナー)違反になるでしょうか? もしそうならお許し下さい。 名前ボックスに表示される名前を、マクロで非表示にし、元に戻す、という操作を次の二つのボタンで実行するように作りました。エクセル2003です。 Private Sub CommandButton1_Click() Dim tname As Name For Each tname In ThisWorkbook.Names tname.Visible = False Next End Sub Private Sub CommandButton2_Click() Dim tname As Name For Each tname In ThisWorkbook.Names tname.Visible = True Next End Sub これを一つのボタンで、If Then Elseを使い実行できるようにしたいのですが If ・・・ Then の間の書き方が分からずうまくいきません。   If Names.Visible = False Then   If ThisWorkbook.Names.Visible = False Then If ThisWorkbook.tname.Visible = False Then Private Sub CommandButton3_Click() Dim tname As Name If Names.Visible = False Then 'これでは駄目 For Each tname In ThisWorkbook.Names tname.Visible = False Next Else For Each tname In ThisWorkbook.Names tname.Visible = True Next End If End Sub 苦し紛れにこんなことをやってごまかそうとしているのですがこれって邪道ですしかっこうわるいですよね。 Private Sub CommandButton3_Click() Dim tname As Name If Range("g1").Value = " " Then   For Each tname In ThisWorkbook.Names   tname.Visible = False   Next Range("g1").Value = "1" Else   For Each tname In ThisWorkbook.Names   tname.Visible = True   Next Range("g1").Value = " " End If End Sub ど素人ですがよろしくご教導ください。

  • vba if構文 すべて答えが同じになってしまう

    現在vbaの勉強中です。 問題集通りに下記コードを設定しました。 a1に20以下の数値、例えば「5」を入力するも、 「成人です」の結果になってしまいます。 20より小さい場合は未成年ですの表記になるはずですが・・・。 Sub mondai() Sheets("Sheet3").Select Dim nenrei As Long nenrei = Range("a1").Value If nenrei > 20 Then  MsgBox "成人です" Else  MsgBox "未成年です" End If End Sub

    • ベストアンサー
    • XML
  • Excel VBA の if elseについて

     以下は与えられた自然数が素数であるかどうかを判定する、Excel VBA による素朴なコードです。  自然数が2 とそれ以上の場合で処理を分けていますが、5 行目のelseで   対応するifがないという というコンパイルエラーが出ます。私はプログラミング言語は、Pascal しか経験がなく、Pascal の場合 5 行目の else から後の処理したい複数の構文を begin end で囲めば問題なく動きます。  Excel VBA で同じ処理をさせるにはどうしたらいいのでしょうか?  Worksheets("素数").Activate  '"素数"シートをアクティブにする  Flg = 0  Target = Range("D5").Value  if Target = 2 then MsgBox ("2 は素数です。")  else  'else 対応するifがないというエラーが出る  'begin ・・・・・ Pascalの場合    K = Int(Target / 2)    ' 2 以外の素数は奇数なので偶数で割ることを確認する必要はない。    For I = 3 To K Step 2     If Target Mod I = 0 Then      Flg = 1      Exit For     End If    Next I       Snum = Format(Target)    If Flg = 0 Then     MsgBox (Snum + " は素数です。")    Else     MsgBox (Snum + " は素数ではありません。")    End If  'end ・・・・・ Pascalの場合  End If

  • VBAでIf~Thenに条件をもう1つ

     以下のようにExcelのVBAでタイムスタンプを比較するところがあるのですが、比較ファイルがないものがありますその場合もthen以降を実行するには、どうすれば良いのでしょうか? If FileDateTime(Mydoc) > FileDateTime(Mydoc2) Then MsgBox "Mydoc" End If   ここで、Mydoc2が存在しないときも、MsgBox "Mydoc" を実行したいのですが。  ちなみに、Mydoc2のタイムスタンプが新しいときは、飛ばして次の命令文に進みます。  wかりにくい質問ですが、よろしくお願いします。

  • #If Then ~ #Else ~ #End If(エクセルVBA)

    #If Then ~ #Else ~ #End If って何ですか? また、VBAのヘルプで検索する方法ってどうすればいいのですか? どなたか?宜しくお願い致します。

  • EXCEL VBA 比較方法

    こんばんは。 EXCEL VBAで、SUM関数で時間の合計を求めたセル(B15)と8:00 を比較して、8:00より大きければメッセージを表示するとしたいのですが、上手くいきません。また、メッセージ後「はい」の場合は、そのままElseの作業を続行。「いいえ」を押した場合は、セル(b2)を選択し、VBA画面が出てくるのを避けたいのです。 勉強途中でいろいろとお聞きし申し訳ありませんがよろしくお願い致します。 IF ~Then ~~~~ ElseIf Range("B15").Value > "8:00" Then MsgBox "8時間を越えています。" Else Range(Range("b65536").End(xlUp).Offset(0), "c22").Copy

  • エクセルVBA if、Elseifの使い方について

    調べたり、試行錯誤したのですが分からないので教えてください。 A列の最大値により表示されるメッセージを場合分けします。 (1)最大値が1~9の場合→「終了します」のメッセージを表示させる。 (2)最大値が0の場合  →「該当なし。シートを削除しますか?」のメッセージを表示させる。 (3)最大値が10の場合 →「すべて選択しています。シートを削除しますか?」のメッセージを表示させる。 メッセージをクリックした結果 (1)「はい」をクリックして終了。 (2)「はい」をクリックすれば、シートを削除。「いいえ」をクリックして終了。 (3)「はい」をクリックすれば、シートを削除。「いいえ」をクリックして終了。 'メッセージ Dim maxval As Long maxval = Application.Max(sheet1.Range("A:A")) If maxval >= 1 And maxval <= 9 Then MsgBox " 終了します" ElseIf maxval = 0 And vbYes = MsgBox("該当なし。シートを削除しますか?", vbYesNo) Then Application.DisplayAlerts = False sheet1.Delete Application.DisplayAlerts = True ElseIf maxval = 10 And vbYes = MsgBox("すべて選択しています。シートを削除しますか?", vbYesNo) Then Application.DisplayAlerts = False sheet1.Delete Application.DisplayAlerts = True End If End Sub (1)最大値が1~9の場合は成功します。 (2)(3)最大値が0の場合や10の場合に、「該当なし。シートを削除しますか?」と「すべて選択しています。シートを削除しますか?」の両方が、表示されてしまいます。 (2)(3)の場合に、それぞれのメッセージしか表示されないようにするにはどうしたらよいのでしょうか。 よろしくお願いします。

  • Excel、VBAのIF文で

     いつもお世話になります。 エクセルのVBAでセルF4からF65536までを選択していれば印刷して、それ以外を選択していれば「氏名セルを選択してください」と表示させたいのですが、うまくいきません。  全く構文かもしれませんが以下が作成したプロシージャです。VB初心者です。ご指導よろしくお願いします。 Sub 成績個人印刷if() If Range("f5,f65536").Activate = True Then Worksheets("個人カード").Range("a3").Value = ActiveCell.Offset(0, -4) Worksheets("個人カード").PrintOut End If MsgBox "氏名セルを選択してください" End Sub

  • エクセルVBAでセルが数値か数式かの判断方法

    エクセル2000です。 Sub Suuchi() If IsNumeric(Range("A1")) = True Then MsgBox "数値で~す♪" Else MsgBox "数値じゃないよ!" End If End Sub とやってみたんですが、数式も数値となってしまいます。 数値、数式、文字の判断はどうやればいいんでしょうか?

専門家に質問してみよう