2012-06-19 32 views
50

thể trùng lặp:
How to search for string in MS Access VBA arrayLàm thế nào để tìm thấy nếu một mảng chứa một chuỗi

Tôi hiện đang làm việc trên một macro Excel, và tôi không thể tìm thấy một cách để làm như if array.contains(mystring)

Tôi đã viết thông tin sau đây và nó cung cấp cho tôi thông báo "Bộ kiểm định Invaild" và đánh dấu Mainfram ngay sau 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 

Việc lựa chọn là một cột

Bất cứ ai giúp đỡ?

Xin chào, JP Tôi đã thử đề xuất của bạn và đối tượng được yêu cầu. Và Highlightd các Nếu IsInArray (cell.Text, Mainfram) Sau đó Heres mã đầy đủ của tôi

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 

Nevermind, tôi thấy rằng lỗi ngu ngốc ... Cảm ơn bạn anyways

+0

FYI, điều này đã được hỏi và trả lời [ở đây] (http://stackoverflow.com/q/10951687/190829). – JimmyPena

+1

@JP .: Yup, sau đó hãy đóng bản sao này làm bản sao chính xác. –

+0

@ Jean-FrançoisCorbett được gắn cờ – JimmyPena

Trả lời

118

Sử dụng mã từ my answer cho một câu hỏi rất giống nhau:

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 
+0

Tôi nhớ điều đó. Tôi đã bình chọn cho nó và tôi là người bỏ phiếu cho điều này :). –

+1

+ 1 Đẹp nhất như thường lệ :) –

+0

Tôi đang upvoting câu trả lời cũ của bạn, và bỏ phiếu để đóng câu hỏi này vì nó là một bản sao chính xác, và do đó, là câu trả lời này! –

1

tôi Tôi sợ tôi không nghĩ rằng có một phím tắt để làm điều này - nếu chỉ có ai đó sẽ viết một wrapper linq cho VB6!

Bạn có thể viết một hàm thực hiện nó bằng cách lặp qua mảng và kiểm tra từng mục nhập - tôi không nghĩ bạn sẽ sạch hơn.

Có một bài viết ví dụ cung cấp một số chi tiết ở đây: http://www.vb6.us/tutorials/searching-arrays-visual-basic-6

5
+6

Câu trả lời hay. Ví dụ mã sẽ làm cho nó trở nên tốt hơn! –

+0

[Câu trả lời là chỉ chứa các liên kết thực sự là "câu trả lời hay"?] (http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers) Phần lớn ý kiến ​​dường như –

+1

Vì vậy, nếu tôi sao chép/dán ví dụ từ liên kết, câu trả lời của tôi sẽ tốt hơn?Liên kết chứa một ví dụ chính xác mà OP có thể sử dụng nguyên văn trong mã của mình để hoàn thành mục tiêu của mình. – EkoostikMartin

15

Một cách đơn giản bằng cách sử dụng JOININSTR

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 
+0

Vâng, nhưng điều này có khả năng thất bại nếu chuỗi tìm kiếm xảy ra chứa ký tự được sử dụng làm dấu phân cách tùy ý của bạn ('#' hoặc bất kỳ thứ gì được chọn). –

+1

Hmm, Có lẽ tôi đang thiếu cái gì đó? Bạn có thể cho tôi một ví dụ? –

+0

'lê # cam' sẽ là số dương dương. Ngẫu nhiên, 'apple' sẽ trả về giá trị âm sai với mã hiện tại của bạn ... nhưng bạn có thể giải quyết điều đó bằng cách thêm chuỗi tìm kiếm với dấu phân tách:' strg = "#" & strg'. –

Các vấn đề liên quan