首页 > 解决方案 > 使用 VBA 获取 2 个数组中的等效索引值

问题描述

我需要根据 A 列中的条件在 B 列上分配一个值。我使用 IF...ElseIf 条件制定了一个简单的代码(请参见下面的代码)。我有 1000 个条件,我正在考虑是否可以将 2 个单独的数组用于 A 列的值,并将 A 列中的值的索引获取到第一个数组(Array1)并将其与第二个数组(AssignedArray)匹配。例如,对于在 A 列中找到的每个值,检查 Array1 是否存在该值并获取索引并将索引与 AssignedArray 匹配。例如,

Array1 = Array("DL2005", "EFRUEN", "DESTDIDIER", "EOGRADY3", "EKARLSON1", "EOKUTOMI1")
AssignedArray = Array("Trader", "Trader", "Operations", "Trader", "Analyst", "Operations")

代码

For x = 1 To Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
    For Each wrd In Sheets(1).Cells(x, 1)
        val = wrd

        If UCase(val) = "DL2005" Then
            Sheets(1).Cells(x, 3).Value = "Trader"
        ElseIf UCase(val) = "EFRUEN" Then
            Sheets(1).Cells(x, 3).Value = "Trader"
        ElseIf UCase(val) = "DESTDIDIER" Then
            Sheets(1).Cells(x, 3).Value = "Operations"
        ElseIf UCase(val) = "EOGRADY3" Then
            Sheets(1).Cells(x, 3).Value = "Trader"
        ElseIf UCase(val) = "EKARLSON1" Then
            Sheets(1).Cells(x, 3).Value = "Analyst"
        ElseIf UCase(val) = "EOKUTOMI1" Then
            Sheets(1).Cells(x, 3).Value = "Operations"
        End If
    Next wrd
Next x

有可能这样做吗?或者有什么方法可以简化我的代码而不是使用 IF ELSEIF 条件。

标签: excelvba

解决方案


保持简单;使用For循环比较Array1每个单元格column A,如果有匹配项,使用Offset将相应的元素AssignedArray放入右侧的单元格中。

Dim Array1 As Variant, AssignedArray As Variant
Dim x As Long, i As Long

Array1 = Array("DL2005", "EFRUEN", "DESTDIDIER", "EOGRADY3", "EKARLSON1", "EOKUTOMI1")
AssignedArray = Array("Trader", "Trader", "Operations", "Trader", "Analyst", "Operations")

For x = 2 To Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
    For i = LBound(Array1) To UBound(Array1)
        If Cells(x, 1).Value = Array1(i) Then
            Cells(x, 1).Offset(, 1).Value = AssignedArray(i)
        End If
    Next i
Next x

推荐阅读