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

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

このQ&Aのポイント
  • VBAを使用して、分岐条件に名前をつける方法について教えてください。
  • また、条件の外にIf文の条件を持ち出し、その中で論理演算を行うプログラムも作りたいです。
  • Excel VBAでこれらのことが可能なのでしょうか?

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

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.2

> ’こういう名前の付け方はできないが、要はS1>0という条件に条件1と名づけたい。 ご提示の例であれば、「変数を宣言して、そこに演算結果を格納」とすることで、 目的を達せられるかと思います。 (話を単純化させるための例で、実際にはこれでは対処できないようでしたら  すみません(汗)) Sub Test()   '「提示された式の演算結果」を格納する変数を宣言   '(式そのものが格納されるわけではないのでご注意を)   Dim 条件1 As Boolean, 条件2 As Boolean   '「Cells(1,1)」をRangeオブジェクトとして格納する変数を宣言   Dim objCell As Range   S1 = 36   S2 = 48   Set objCell = Cells(1, 1)   条件1 = (S1 > 0)  '「36 > 0」の演算結果「True」が格納される   条件2 = (S2 > 0)  '「48 > 0」の演算結果「True」が格納される   If (条件1 * 条件2) Then     objCell = 1   ElseIf (条件1) Then     objCell = 2   ElseIf (条件2) Then     objCell = 3   Else     objCell = 0   End If   'オブジェクトを参照する変数は、念のため、明示的にメモリを解放   Set objCell = Nothing End Sub 【補足・蛇足】  ・上記で使用している「( )」は、すべて省略可能ですが、個人的には   つけた方が見た目としてわかりやすい感じがしたため、つけています。  ・2個目以降の分岐条件では、「Else If」ではなく「ElseIf」(間にSpace   なし)にしないと、エラーになります(多分普段はそうされているのだろう   とは思いますが、念のためということでご了承下さい)。  ・分岐条件では「=True」は省略可能なため、これについては省略しています。  ・上記の例では条件1・条件2ともブール型(Boolean)なので、   「条件1 * 条件2」は、masa_peeさんの回答にもある通り   「条件1 And 条件2」でも同じ結果になりますが、実際に使用する場面では   バイト型などを使用される場合もあるかと考え、上記の式としました。   (例えば「条件1=1, 条件2=2」の場合、「(条件1 And 条件2) 」という式は    「False」と判断されてしまいます) ・・・長文、失礼致しました。

Kokorochaniuna
質問者

お礼

これこそ求めていた回答です。分岐条件がたくさんになりすぎると、 書くのも見るのも面倒ですが、修正する場合には最悪 なので、なんとかすっきりさせられぬものかと思ってました。 また、Dim objCell As Rangeの件も先読みするかのように 教えていただきありがとうございました。 本当にたすかりました。 As Booleanで変数宣言するというのが、 本質ですね。一応バリアントでもうまくいきました。 ということで、自分が使う場合に近いものを、後の人のため? 以下、参考として付します。 P.S ElseIfの件、失礼いたしました。 Sub Test() '「提示された式の演算結果」を格納する変数を宣言 '(式そのものが格納されるわけではないのでご注意を) Dim 条件(2) As Boolean '「Cells(1,1)」をRangeオブジェクトとして格納する変数を宣言 Dim objCell As Range S1 = 36 S2 = 48 Set objCell = Cells(1, 1) 条件1 = (S1 > 0) '「36 > 0」の演算結果「True」が格納される 条件2 = (S2 > 0) '「48 > 0」の演算結果「True」が格納される If (条件1 * 条件2) = True Then objCell = 1 ElseIf (条件1) = True Then objCell = 2 ElseIf (条件2) = True Then objCell = 3 Else objCell = 0 End If End Sub

その他の回答 (1)

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