プロが教えるわが家の防犯対策術!

Dim flag(4) as boolean で配列とした変数に一つずつ処理結果を代入していきます。

「もし、flag(0)から(4)までがすべでtrueだったら」という記述をしたいのですが、

if flag(0) = true and flag(1) = true and ...
と羅列する以外に、すっきりとした記述方法はないでしょうか?

A 回答 (5件)

申し訳ありません


記述方法間違えていました

filter(flag,"false",true,vbtextcompare)

上記が正しいfilterの記述です。
これをuboundで囲って下さい
    • good
    • 0

No.3です


書き忘れてしまいましたが、前述した方法はvbaでは実装できません。
(indexofが無いので…)

代替案としてブール型に拘らないのであれば以下のような手法もあります。

Dim flag(4) as string ‘型を文字列に変更

if ubound(filter(flag,”false”,vbtextcompare))<0 then
end if

前述したものと概ね同じ様な判定で、
第1引数に入れた配列から第2引数を含む要素を配列で返し、その要素数をuboundでカウントします。
これも要素がなければ-1です。
filterの第3引数は大文字/小文字を区別しない為のものです。

以上ご参考まで
    • good
    • 0

配列化されているのでindexofを使って見ては如何でしょうか。



例: if array.indexof(frag,false)<0 then

indexofは第1引数に含まれる最初の第2引数の位置を返り値とする関数で、第2引数が含まれない場合は-1を返します。

以上ご参考まで
    • good
    • 0

そのような判定機会が多い場合、私なら専用の判定ルーチンを作ります。


以下は、全ての要素がtrueならtrueを返す判定ルーチン(AllTrue)です。
flag1,flag3は全てtrueです。
flag2が一部falseです。
判定ルーチンは呼び出し側の要素数がいくつでも対応可能です。
ーーーーーーーーーーーーーーーーーーーーーーー
Option Explicit

Sub Macro1()
Dim flag1(4) As Boolean
Dim flag2(3) As Boolean
Dim flag3(2) As Boolean
flag1(0) = True
flag1(1) = True
flag1(2) = True
flag1(3) = True
flag1(4) = True
flag2(0) = True
flag2(1) = True
flag2(2) = False
flag2(3) = True
flag3(0) = True
flag3(1) = True
flag3(2) = True
Debug.Print AllTrue(flag1)
Debug.Print AllTrue(flag2)
Debug.Print AllTrue(flag3)
End Sub


Private Function AllTrue(ByRef ArrayFlag() As Boolean) As Boolean
Dim i As Long
AllTrue = False
For i = 0 To UBound(ArrayFlag)
If ArrayFlag(i) = False Then Exit Function
Next
AllTrue = True
End Function
---------------------
実行結果
True
False
True
    • good
    • 0
この回答へのお礼

いつも具体的なソースコードのご提示ありがとうございます。とても勉強になります。

お礼日時:2017/12/07 21:09

調べる数がうんと多ければループにするんでしょうが、中途半端な個数だとそれもちょっとですよね。



多少なりとも簡単に書くなら、= True を省略することじゃないですか?

If flag(0) And flag(1) And ...

みたいにです。Boolean型の変数は、それ自体がTrue/Falseの値を持っているので、True判定がしたければ= Trueは書かなくても一緒です。値として展開すれば、True=Trueって書いてあるのと同じことですからね。True=Trueの評価結果はTrueなので、True一個あれば事足りるわけです。
    • good
    • 0
この回答へのお礼

true判定の時は書かなくてもよいということは知りませんでした。ひとつ勉強になりました。ご回答ありがとうございました。

お礼日時:2017/12/07 21:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています