Excel VBA比较数组

问题描述 投票:0回答:1

我是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
arrays excel vba excel-vba
1个回答
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),"")

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

© www.soinside.com 2019 - 2024. All rights reserved.