Массив не возвращает ответ в цикле For - PullRequest
1 голос
/ 27 мая 2019

У меня есть массив, который принимает значения из одной строки таблицы (1 строка, 185 столбцов).Затем я хочу пройтись по массиву в поисках соответствия между значениями в массиве и значениями в конкретной ячейке.

Однако каждый раз, когда я запускаю код, он говорит, что находит совпадение, ноне возвращает значение в ячейку.

Соответствующие строки кода:


Dim qCountry()

Worksheets("Data").Activate

    qCountry = Range("A1:GC1").Value
    For i = 1 To 185
          If Cells(aRow, bCol) <> vbNullString Then
              Exit For
          ElseIf InStr(1, Cells(aRow, 4), "*" & qCountry(i) & "*") = 1 Then
              Cells(aRow, bCol) = qCountry(i)
          End If
    Next i

Скриншот моего массива:

Array

Ответы [ 2 ]

2 голосов
/ 27 мая 2019

Просто определите qCountry как нормальную Variant переменную, например:

Dim qCountry as Variant

Это избавит от одного дополнительного измерения, но у вас все еще есть многомерный массив.


Если вы хотите иметь дело с массивом одного измерения , вы можете использовать Application.Transpose() Функция :

qCountry = Application.Transpose(Range("A1:GC1").Value)

Но поскольку у вас есть данные в строке , вам нужно сделать это дважды:

qCountry = Application.Transpose(Application.Transpose(Range("A1:GC1").Value))

На данный момент ваш код будет работать:

Dim qCountry
Worksheets("Data").Activate
qCountry = Application.Transpose(Application.Transpose(Range("A1:GC1").Value))

For i = 1 To 185
      If Cells(aRow, bCol) <> vbNullString Then
          Exit For
      ElseIf InStr(1, Cells(aRow, 4), "*" & qCountry(i) & "*") = 1 Then
          Cells(aRow, bCol) = qCountry(i)
      End If
Next i

Надеюсь, это поможет.

1 голос
/ 29 мая 2019

Значения доступны, как показано на скриншоте:

Cells(aRow, bCol) = qCountry(1, i)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...