web-dev-qa-db-ja.com

配列に文字列が含まれているかどうかを確認する方法

可能性のある複製:
MS Access VBA配列で文字列を検索する方法

現在、Excelマクロで作業していますが、if array.contains(mystring)のような方法を見つけることができませんでした

私は次のように書きました。「Invaild Qualifier」というメッセージが表示され、Mainframの直後のIfが強調表示されます

Dim Mainfram(4) As String

Mainfram(0) = "Apple"

Mainfram(1) = "pear"

Mainfram(2) = "orange"

Mainfram(3) = "fruit"

    For Each cel In Selection
        If Mainfram.Contains(cel.Text) Then
            Row(cel.Row).Style = "Accent1"
        End If
    Next cel

選択は列です

誰か助けて?

こんにちは、JP私はあなたの提案を試みました、そしてそれはオブジェクトが必要だと言いました。ハイライト表示されたIf IsInArray(cell.Text、Mainfram)ThenHeres my full code

Sub changeRowColor()

Columns("B:B").Select

Dim cel As Excel.Range
Dim Mainfram(4) As String

Mainfram(0) = "Apple"
Mainfram(1) = "pear"
Mainfram(2) = "orange"
Mainfram(3) = "Banana"

For Each cel In Selection
    If IsInArray(cell.Value, Mainfram) Then
        Rows(cel.Row).Style = "Accent1"
    End If
Next cel

End Sub

Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean

    IsInArray = (UBound(Filter(arr, stringToBeFound)) > -1)

End Function

愚かなエラーを見つけました...とにかくありがとう

54
Nicola-V

my answer から非常によく似た質問へのコードを使用する:

Sub DoSomething()
Dim Mainfram(4) As String
Dim cell As Excel.Range

Mainfram(0) = "Apple"
Mainfram(1) = "pear"
Mainfram(2) = "orange"
Mainfram(3) = "fruit"

For Each cell In Selection
  If IsInArray(cell.Value, MainFram) Then
    Row(cell.Row).Style = "Accent1"
  End If
Next cell

End Sub

Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean
  IsInArray = (UBound(Filter(arr, stringToBeFound)) > -1)
End Function
128
JimmyPena

JOINおよびINSTRを使用する別の簡単な方法

Sub Sample()
    Dim Mainfram(4) As String, strg As String
    Dim cel As Range
    Dim Delim As String

    Delim = "#"

    Mainfram(0) = "Apple"
    Mainfram(1) = "pear"
    Mainfram(2) = "orange"
    Mainfram(3) = "fruit"

    strg = Join(Mainfram, Delim)
    strg = Delim & strg

    For Each cel In Selection
        If InStr(1, strg, Delim & cel.Value & Delim, vbTextCompare) Then _
        Rows(cel.Row).Style = "Accent1"
    Next cel
End Sub
17
Siddharth Rout
4
EkoostikMartin

私はこれを行うためのショートカットがあるとは思わない-だれかがVB6のlinqラッパーを書くなら!

配列をループして各エントリをチェックすることでそれを行う関数を書くことができます-あなたはそれよりもきれいになるとは思いません。

ここにいくつかの詳細を提供する記事の例があります: http://www.vb6.us/tutorials/searching-arrays-visual-basic-6

1
Jon Egerton