web-dev-qa-db-ja.com

IFステートメントの値のリストに対してチェックする方法は?

私はこのようなIF文を書き込もうとしています:

if var [is any of 1,4,5,6,12] then do stuff

しかし、私はこれ以外のVBAの構文を知りません:

if var=1 or var=4 or var=5...

それは少し不器用なようです。別の方法はありますか?

9
horace_vr

ケースの選択 ステートメントを使用できます。

select case var
case 1,4,5,6,12
  'do something
case else
  'alternative
end select
13
psychicebola

数字のリストを作成し、forループでこれらを比較できます。

dim newNumber as Integer
dim compareList as new List Of(int)

for count as integer = 0 to compareList.count - 1
    if newNumber = compareList(nCount)
       'Do Stuff
    end if
next

これは私がやりたい簡単な方法ですが、リストが本当に大きい場合や「if」ループで多くのコードを実行したい場合は、パフォーマンスが集中する可能性があります。

1
SeanS

私は「パーティー」に少し遅れていますが、どうですか:

If InStr(1, ",1,5,8", "," & lVal1, vbTextCompare) > 0 Then

「lVal1」が1、5、または8に等しいかどうかを確認します。

そして

If InStr(1, ",6,8,10,12", "," & lVal2, vbTextCompare) = 0 Then

「lVal2」が6、8、10、12に等しくないことを確認します。

コンマ区切り文字は重要です。コンマ区切り文字がないと、最初の例では、「lVal」がこれらの値のいずれかを取得できた場合、「15」または「58」または「158」がすべて一致します。

チェック対象の値にあいまいさがある可能性がある場合は、使用する区切り文字に注意する必要があります。

同様に、検出される値の範囲に関する知識を使用して、最初の文字列の先頭の区切り文字の不格好さ、および区切り文字を検索値の前に連結することを削除できます。

0
William Bell