• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAで分岐条件に名前をつける)

VBAで分岐条件に名前をつける

noname#223623の回答

noname#223623
noname#223623
回答No.1

条件1 と 条件2 をそれぞれ Function にしたらいいんじゃないかな。 Function foo(…) As Boolean  条件1を判定して TRUE/FALSE を返す End Function Function bar(…) As Boolean  条件2を判定して TRUE/FALSE を返す End Function 使うときは if foo = TRUE then … とかできる。 気になるのは質問文の「IF 条件1*条件2」だけど、たとえば「条件1がTRUE かつ 条件2がTRUE」とかのつもりなら「IF 条件1 And 条件2」にしたほうがいいんじゃないか。最近はこういう書き方のほうが多いんかな?

Kokorochaniuna
質問者

お礼

回答ありがとうございました。 関数として明示するということで、 複雑な条件のときには役立つかもしれません。 ありがとうございました。

関連するQ&A

  • 【VBA】if文中のinstrの条件2つ

     質問させていただきます。どうぞよろしくお願いいたします。 環境:Excel2010でございます。  If InStr(.Cells(line, 10), "test1") > 0 And InStr(.Cells(line, 10), "test2") > 0 Then'(1) だとIf文の中に入ってきてくれる状況でございます。  If InStr(.Cells(line, 10), "test1") Then'(2)  If InStr(.Cells(line, 10), "test2") Then'(3) の場合は両者ともIf文の中に入ってくるのに、何故  If InStr(.Cells(line, 10), "test1") And InStr(.Cells(line, 10), "test2") Then'(4) だとIf文の中に入ってきてくれないのでしょうか? 自分の考えでは、おそらく(2)も(3)もTrueを返してくれているので (4)の場合は True and Trueで条件に合致するのでは、と思うのでございますが 条件を複数にすると(1)のように数字の比較にしてやらねばいけなくなるのかがよく分かっておりません。 (時々これに気づかずに(4)のようにコーディングしてしまってデバッグしなければいけなくなり手間がかかりますので、できれば理解しておきたい次第でございます。)  もしお詳しい方がいらっしゃいましたら、どうぞよろしくお願いいたします。

  • 2つのVBAを組み合わせる方法

    お世話になります、2つのVBAを組み合わせる方法で迷っています。 1つ目が Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Long, k As Long, myNum As Long If Intersect(Target, Range("C1,B9:B39")) Is Nothing Or Target.Count > 1 Then Exit Sub Application.EnableEvents = False With Target If .Column = 3 Then myNum = WorksheetFunction.Max(Range("B9:B39")) If IsDate(.Value) Then For i = 9 To 39 If Cells(i, "A").Value = "" Then Cells(i, "B").Value = "" Else Cells(i, "B") = myNum + i - 8 End If Next i End If Else i = .Row If .Value = "" Then Range(Cells(i + 1, "B"), Cells(39, "B")).ClearContents Else For k = i + 1 To 39 If Cells(k, "A").Value = "" Then Cells(k, "B").Value = "" Else Cells(k, "B") = Cells(k - 1, "B") + 1 End If Next k End If End If End With Application.EnableEvents = True End Sub です。 2つめが Private Sub Worksheet_Change(ByVal Target As Range)  Application.EnableEvents = True If Intersect(Target, Range("R8:R38")) Is Nothing Then Exit Sub Application.EnableEvents = False Range(Cells(Target.Row, 18), Cells(39, 18)).Value = Target.Value Application.EnableEvents = True End Sub です。2つのPrivate Sub Worksheet_Change(ByVal Target As Range)イベントのVBAですが、どのようにして組み合わせれば良いのでしょうか?

  • エクセルVBAでShapesまたはDrawingObjects

    シート上のフォームなどを表示/非表示するためtest04を書きましたが、「実行時エラー438 オブジェクトはこのプロパティまたはメッソッドをサポートしていません」となります。 しかし、Test05のように同じことをForNextで回せばうまくいきます。 また、Test06のようにShapesをDrawingObjectsに書き換えただけでもうまくいきます。 では、Test04がエラーになるのはなぜでしょうか? Sub test04() With ActiveSheet.Shapes If .Visible = False Then .Visible = True Else .Visible = False End If End With End Sub Sub test05() For Each sp In ActiveSheet.Shapes If sp.Visible = False Then sp.Visible = True Else sp.Visible = False End If Next End Sub Sub test06() With ActiveSheet.DrawingObjects If .Visible = False Then .Visible = True Else .Visible = False End If End With End Sub

  • マクロ IF分岐 空白行は空白を返す

    指定の2列に条件付き書式設定で太字が設定してあり、2行とも太字ならその行に〇を付けるというマクロを作ってみたのですが、空白行がある場合にうまくいきません。空白行だったら、空白を返す、というふうにしたいのですが、elseのところを Cells(nRow, 21) = ""にしてもCells(nRow, 21) .clearcontentsにしても空白にならず〇が入力されてしまいます。他の空白行ではない行は正しく太字なら〇が付いているのですが、空白行は空白にするにはどうすればいいですか? Sub test() ' For nRow = 7 To 233 If Cells(nRow, 9).DisplayFormat.Font.Bold = True And Cells(nRow, 10).DisplayFormat.Font.Bold = True Then Cells(nRow, 21) = "○" Else Cells(nRow, 21) = "" End If Next nRow End Sub

  • VBA の if 文の質問です

    下記のようなif文を実行したのですが Or のあとの条件が無視されてしまっているようなのですが、このような書き方ではだめなのでしょうか? else if で地道に分岐させたほうがいいのでしょうか? If Cells(1, 1).Value <> "" Or Cells(1, 2).Value <> "test" Or Cells(1,3) <> 0 Then 処理内容 End If

  • エクセル

    TEXTBOX1 button1 button2 button3 TEXTBOX2 button4 button5 button6 comanndobuton1 Private Sub CommandButton1_Click() Dim cnt As Long cnt = Cells(Rows.Count, 1).End(xlUp).Offset(1).Row If Me.OptionButton1 = True Then Cells(cnt, 1) = Me.TextBox1 Else Cells(cnt, 1) = "" If Me.OptionButton4 = True Then Cells(cnt + 1, 1) = Me.TextBox2 Else Cells(cnt + 1, 1) = "" End If End If If Me.OptionButton2 = True Then Cells(cnt, 2) = Me.TextBox1 Else Cells(cnt, 2) = "" If Me.OptionButton5 = True Then Cells(cnt + 1, 2) = Me.TextBox2 Else Cells(cnt + 1, 2) = "" End If End If If Me.OptionButton3 = True Then Cells(cnt, 3) = Me.TextBox1 Else Cells(cnt, 3) = "" If Me.OptionButton6 = True Then Cells(cnt + 1, 3) = Me.TextBox2 Else Cells(cnt + 1, 3) = "" End If End If End Sub これで実行するとbutton1がtrueでありbutton4がtrueのように    bu2とbu5 bu3とbu6が一緒の時だけうまく以下なのですが ご指摘いただけないでしょうか

  • エクセルVBAについて

    お世話になりなります。 以下のように条件が合わない場合、何もせずにNの値を増やして同じくIF文で判断する場合 ***にどのように書けばいいのでしょうか? よろしくお願いします。 Sub ボタン1_Click() Dim a As String For n = 1 To 30 a = Cells(n, 1) aa = Left(a, 1) aaa = Val(aa) If aaa = "" Then *** If aaa <= cha(30) Then *** If aaa >= cha(40) Then *** Else Cells(n, 3) = a Next End Sub

  • Excel VBAを簡素化したいのですが動きません

    お世話になります。VBA初心者です。 下記TESTは動くのですが、『If myINT= Then』が永遠に続くので簡素化したく 『Rows("myINT : myINT").Select』これを入れてみたのですが全く動きません。 簡素化した記述を教えて下さい。宜しくお願い致します。 Sub TEST() Dim myINT As Integer myINT = ActiveSheet.Cells.SpecialCells(xlLastCell).Row   If myINT = 1 Then    Rows("1:1").Select    ElseIf myINT = 2 Then    Rows("2:2").Select   ElseIf myINT = 3 Then    Rows("3:3").Select   Else MsgBox "TEST" End If End Sub

  • 【VBA】IF構文の条件式で範囲が同一の場合

    いつもこちらの識者の方々にはお世話になっています。 VBAの質問です。 IF構文でorを使って複数条件を指定したいのですが、下記のような場合、冗長な気がします。 Sub test() IF Left$(Cells(1, 1), 1) = "あ" or Left$(Cells(1, 1), 1) = ”い" or Left$(Cells(1, 1), 1) = ”う" Then Cells(1, 1).EntireRow.Delete End Sub 条件式で範囲が同一の場合、例えば IF Left$(Cells(1, 1), 1) = ”あ","い","う" Then Cells(1, 1).EntireRow.Delete のように、もっとスッキリした記述方法はありますでしょうか。

  • 【VBA】 IFの中にIF

    いつもこちらの識者の方々にはお世話になっています。 VBAの質問です。 やりたいことは下記構文を見ていただければわかると思うのですが、 ------------------------------------------------------------------------------ Sub Test() Dim f As Long Dim lRow As Long lRow = Cells(Rows.Count, 1).End(xlUp).Row For f = lRow To 2 Step -1 If Cells(f, 2).Value = "りんご" Then Cells(f, 2).EntireRow.Delete Else Cells(f, 2).Value = Cells(f, 2) & "0" & Cells(f, 3) Cells(f, 18).Value = If Cells(f, 4).value = 1 Then Cells(f, 13) Else Cells(f, 14) Endif End If Next f End Sub ------------------------------------------------------------------------------ Cells(f, 18).Value = If Cells(f, 4).value = 1 Then Cells(f, 13) Else Cells(f, 14) Endif の部分が解決したい部分になります。 IFで条件分岐したあとの処理にさらにIFで分岐を加えたいのですが、無茶だと思いつつやってみたらやはり通りませんでした。 こういうのはなんというのでしょうか、ネストとも違うと思うのですが・・・ 上記のような場合、どのような構文が適していますでしょうか。