値y
があり、その値がこの値のセット内にあるかどうかを確認したい:x1, x2, ... xn
。
私はこのようにそれを行うことができます:
if(y = x1 or y = x2 or .....)
しかし、もっと良い方法はありますか?擬似コード:
if(y in (x1, x2, ...., xn))
値y
があり、その値がこの値のセット内にあるかどうかを確認したい:x1, x2, ... xn
。
私はこのようにそれを行うことができます:
if(y = x1 or y = x2 or .....)
しかし、もっと良い方法はありますか?擬似コード:
if(y in (x1, x2, ...., xn))
次のようなヘルパー関数を作成できます。
Public Function FindValue(ByVal ValueToFind As Variant, ParamArray SearchIn() As Variant)
Dim i As Integer
For i = 0 To UBound(SearchIn)
If SearchIn(i) = ValueToFind Then
FindValue = True
Exit Function
End If
Next
End Function
2番目のパラメーター(ParamArray
)は配列であるため、実際には無数のパラメーターを渡すことができます。
したがって、すべての値をこの関数に渡すことができます。最初に検索したい関数、その後に検索したいすべての値です。
Dim Found As Boolean
Found = FindValue(y, x1, x2, x3, xn)
Select Caseは、次の場合と同じ方法で使用できます。
Select Case Y
Case X1, X2, X3, ...
Do if True
Case Else
Do if False
End Select
配列を使用する:
dim x(10)
x(1)=....
x(2)=....
y=....
for i=1 to 10
if x(i)=y then
....
end if
next i
さらに別の方法
MS-Access 2000+にアクセスできますか?その場合、Access Objectsライブラリ参照を追加すると、Eval関数を使用できるようになります。
result = Eval("'y' IN ('x1', 'x2', '...' 'xn')")
文字列式を評価します。のようなSQL演算子のいくつかをIN
使用できます。ドキュメントを参照してください
dim values as string
values = "1,2,3,4,5," 'Note that comma is a separator and added towards the end as well.
dim lookupValue as string
lookupValue = ",4,"
dim found as Boolean
found = (instr(1, values, lookupValue) <> 0)
if found then
end if
編集:別の方法
dim lookupValue as long
lookupValue = 21000
dim values
set values = CreateObject("Scripting.Dictionary")
with values
.Add 1, 1
.Add 10, 1
.Add 100, 1
.Add 1000, 1
.Add 10000, 1
end with
dim found as Boolean
found = values.Exists(lookupValue)
値が存在するかどうかを確認する非常に簡単なアイデアは、Match
関数を使用することです。
Dim myTBL As Variant
myTBL = Array(20, 30, 40, 50, 60)
'if value '30' exists in array than the position (which is >0) will be returned
Debug.Print WorksheetFunction.Match(30, myTBL, 0)
唯一の問題は、値が存在しない場合、Match関数がエラーを返すことです。したがって、エラー処理手法を使用する必要があります。
これは、存在しない値「70」の場合のようになります。
'if doesn't exists error would be returned
On Error Resume Next
Debug.Print WorksheetFunction.Match(70, myTBL, 0)
If Err.Number <> 0 Then
Debug.Print "not exists"
Err.Clear
End If
残念ながら、これはExcelでのみ機能します。
どの値にも存在しない区切り文字(パイプ "|"など)を選択すると、1行で実行できます。
If "|x1|x2|...|xn|" Like "*|" & y & "|*" Then