7

yがあり、その値がこの値のセット内にあるかどうかを確認したい:x1, x2, ... xn

私はこのようにそれを行うことができます:

if(y = x1 or y = x2 or .....)

しかし、もっと良い方法はありますか?擬似コード:

if(y in (x1, x2, ...., xn))
4

7 に答える 7

4

次のようなヘルパー関数を作成できます。

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)
于 2013-03-17T18:19:38.393 に答える
3

Select Caseは、次の場合と同じ方法で使用できます。

Select Case Y
       Case X1, X2, X3, ...
            Do if True
       Case Else
            Do if False
End Select
于 2016-07-15T17:39:23.893 に答える
1

配列を使用する:

dim x(10)

x(1)=....
x(2)=....

y=....

for i=1 to 10
    if x(i)=y then
         ....
    end if
next i
于 2013-03-17T17:56:51.477 に答える
1

さらに別の方法

MS-Access 2000+にアクセスできますか?その場合、Access Objectsライブラリ参照を追加すると、Eval関数を使用できるようになります。

result = Eval("'y' IN ('x1', 'x2', '...' 'xn')")

文字列式を評価します。のようなSQL演算子のいくつかをIN使用できます。ドキュメントを参照してください

于 2013-03-17T20:49:41.423 に答える
0
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)
于 2013-03-17T18:06:53.167 に答える
0

値が存在するかどうかを確認する非常に簡単なアイデアは、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でのみ機能します。

于 2013-03-17T18:09:54.410 に答える
0

どの値にも存在しない区切り文字(パイプ "|"など)を選択すると、1行で実行できます。

If "|x1|x2|...|xn|" Like "*|" & y & "|*" Then
于 2018-11-28T03:57:51.033 に答える