59

重複の可能性:
MSAccessVBAアレイで文字列を検索する方法

私は現在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)を強調表示し、ここに 私の完全なコードを示します

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

気にしないでください、私はその愚かなエラーを見つけました...とにかくありがとう

4

4 に答える 4

140

非常によく似た質問に対する私の回答のコードを使用する:

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
于 2012-06-20T03:08:22.383 に答える
17

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
于 2012-06-20T03:57:31.913 に答える
5

ここに示すようにFilter()メソッドを使用します-https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/filter-function

于 2012-06-19T21:46:42.797 に答える
1

恐れ入りますが、これを行うためのショートカットはないと思います。誰かがVB6のlinqラッパーを作成するだけなら!

配列をループして各エントリをチェックすることで、それを実行する関数を作成できます。それ以上にクリーンになるとは思いません。

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

于 2012-06-19T21:45:57.497 に答える