数组未在For循环中返回答案

时间:2019-05-27 16:06:08

标签: arrays excel vba

我有一个数组,该数组接收电子表格的单行(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 个答案:

答案 0 :(得分:2)

只需将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 :(得分:1)

可以如屏幕截图所示访问值:

Cells(aRow, bCol) = qCountry(1, i)