2016-10-25 3 views
0

У меня есть предопределенный массив. Позволяет называть его arr = {"ok", "okay", "k"}
Теперь у меня есть рабочий стол с заголовками столбцов, как Fine, Great, okay, excellent
Я хочу найти вхождение столбца и выбрать этот столбец.
В этом примере, так как «хорошо» матчей, ответ должен быть 3Проверьте, содержит ли строка значение из заданного массива в vba

For i = 1 To Lastc 
    if sh.Cells(1,i)=?array? then ColSel = i 

Здесь Lastc последний столбец листа
ш является рабочий лист, где я проверяю
ColSel будет хранить индексный номер столбца, где это совпадение в массиве
? array? не является правильным. Я не уверен, что вставить здесь

ответ

0

Насколько я знаю, VBA не имеет функции, которая ищет в массиве определенное значение. Вы можете сделать это сами, пройдя все значения в вашем массиве. Это решение отлично работает для меня:

Sub test() 
Dim arr(2) As String 
Dim Lastc As Integer 
arr(0) = "ok" 
arr(1) = "okay" 
arr(2) = "k" 
Lastc = 4 
Set sh = Sheets("Arkusz2") 

For i = 1 To Lastc 
    For j = 0 To UBound(arr) 
     If sh.Cells(1, i) = arr(j) Then 
      MsgBox "The answer is: " & i 
      End 
     End If 
    Next j 
Next i 

End Sub 
0
Sub Test() 

    arr = Array("A", "B", "C") 

    For i = 1 To Lastc 
    For j = 0 To UBound(arr) 

    If Sh.Cells(1, i) = arr(j) Then 
    ColSel = i 
    Exit For 
    End If 
    Next 
    Next 

End Sub 
1

Вы можете перевернуть его вокруг, и цикл по элементам обр вместо:

For Each el In arr 
    If Not IsError(Application.Match(el, Range(Cells(1, 1), Cells(1, LastC)), 0)) Then 
     ColSel = Application.Match(el, Range(Cells(1, 1), Cells(1, LastC)), 0) 
    End If 
Next el 
0

Незначительные вариации на других ответах искать массив с одним петля.

Sub x() 

Dim arr, i As Long, j As Long, colsel As Long 

arr = Array("ok", "okay", "k") 

For i = 1 To 4 
    If IsNumeric(Application.Match(Cells(1, i), Application.Index(arr, 1, 0), 0)) Then 
     colsel = i 
     Exit For 
    End If 
Next 

End Sub 
Смежные вопросы