Excel VBA比较数组

时间:2018-01-02 18:00:32

标签: arrays excel vba excel-vba

我是VBA的新手,我试图将这两个表放入数组中。一个是主人,一个是来源。我想比较两个数组并将价格从源数组带到主数组。如果变量不相同,请将单元格留空。请帮忙,我需要一些提示/建议。

Tables

Sub createarray()
    Dim masterarray(11, 3) As Variant
    Dim sourcearray(25, 3) As Variant

    For i = 1 To 25
        sourcearray(i, 1) = Range("H" & i + 2)
        sourcearray(i, 2) = Range("I" & i + 2)
        sourcearray(i, 3) = Range("J" & i + 2)
        Debug.Print sourcearray(i, 1); sourcearray(i, 2); sourcearray(i, 3)
    Next

    For i = 1 To 11
        masterarray(i, 1) = Range("D" & i + 2)
        masterarray(i, 2) = Range("E" & i + 2)
        masterarray(i, 3) = Range("F" & i + 2)
        Debug.Print masterarray(i, 1); masterarray(i, 2); masterarray(i, 3)
    Next
End Sub

1 个答案:

答案 0 :(得分:0)

为什么不使用vlookupConcat函数代替VBA?您的代码需要改进几行才能工作:更好地定义数组并嵌套for循环,并创建条件If来比较两个表

'Note: This is a code example no exactly what you need
 Sub createarray()
    Dim i, j as integers
    Dim wb As Workbook
    Dim masterarray As Range: Set wb.worksheet("sheet1").Range("D3:F12")
    Dim sourcearray As Range: Set wb..worksheet("sheet1").Range("H3:J26")

    'You'll need to concat Cost Centry and Variables

    For i = 1 To 11
        For j = 1 to 25
            If masterarray(i, 2).value = sourcearray(j, 2).value then
                masterarray(i, 3).value = sourcearray(j, 3).value
            Else
                masterarray(i, 3).value = ""
            End If
        Next j
    Next i
End Sub

或选项二

使用Concat合并“费用中心”& “C3”单元格中的“变量”为:=$D$3&E3并填写下来,你会得到这样的结果:

| 104Enhacement |

| 104IT运营|

| ... |

“G3”中的

执行相同的=$H$3&I3并填写(当“呼叫中心”代码更改时要小心),您将得到以下内容:

| 106Enhacement |

| 106IT运营|

| ... |

| 104Enhacement |

| 104IT共享服务|

| ... |

然后在“F3”单元格中使用=iferror(vlookup("C3","$G$3:$J$26",4,0),"")

因为您使用“格式为表格”,功能可能会稍微改变,但这不是一个大问题。