尝试将值与多个多维数组进行比较

时间:2015-05-27 14:08:51

标签: arrays excel vba comparison

我有一个包含多列数据的电子表格。在VBA中,我试图在每行中设置一个值,具体取决于其他三列中任何一列中的数据。它始终是这些数据之间的OR比较,需要返回五个值中的一个。

所以我创建了五个数组(它们是多维的,因为它们在范围内读取它们,但是,如果需要它们可能是一维的,我想),我打算将这三个列与那些使用一堆的数组进行比较IF-THEN语句返回必要的值。

创建数组很简单,但我不知道如何正确创建IF-THEN过程。该过程的一个例子是:

IF A1 is in ArrayA THEN

 D1="Dog"

ELSEIF A1 is in ArrayB THEN

 D1="Cat"

ELSEIF B1 is in ArrayC THEN

 D1="Bird"

ELSEIF B1 is in ArrayD THEN

 D1="Monkey"

ELSEIF C1 is in ArrayE THEN

 D1="Blue"

ELSE

 D1="Other"

我不确定这是否是实现我想要做的最有效的方式,所以我绝对愿意采用不同的方法。谢谢。

2 个答案:

答案 0 :(得分:0)

好的,这就是我的工作方式。大多数来自另一个人,但他们删除了他们的评论,所以我不能感谢他们。

arrCols = Array(arrA, arrB, arrC, arrD, arrE)
arrVals = Array("Dog", "Cat", "Bird", "Monkey", "Blue")
For i = 2 To rCnt
    pID = Cells(i, 2).Value
    pName = Cells(i, 3).Value
    pGroup = Cells(i, 4).Value
    ans = ""
    For j = LBound(arrCols) To UBound(arrCols)
        If Not IsError(Application.Match(pGroup, arrCols(j), 0)) Then
            ans = arrVals(j)
            Exit For
        ElseIf Not IsError(Application.Match(pName, arrCols(j), 0)) Then
            ans = arrVals(j)
            Exit For
        ElseIf Not IsError(Application.Match(pID, arrCols(j), 0)) Then
            ans = arrVals(j)
            Exit For
        End If
    Next j
 Cells(i, 5) = IIf(ans = "", "Other", ans)
 Next i

我创建了一个数组数组来搜索。 i循环遍历所有行。 j循环遍历主阵列中的数组。检查三个不同的列需要三个IF语句。除非在其中一个数组中找到,否则返回的值默认为“Other”。

我唯一可以添加到此代码中的是检查行中三个不同列所需的内容。

答案 1 :(得分:0)

以下是如何在不循环

的情况下执行此操作的示例
print_r($conn->errorInfo());

将数组连接到一个字符串,然后使用关键字(Range(“A1”))替换为no来检查字符串len的len。在两边放一个逗号,以确保它是完整的单词(不要像Catfish这样的东西作为猫返回)

使用InStr代替相同的事情:

If Len("," & Join(ArrayA, ",") & ",") <> Len("," & Replace(Join(ArrayA, ","), "," & Range("A1").Value & ",", "") & ",") Then
    Range("D1").Formula = "Dog"
ElseIf Len("," & Join(ArrayB, ",") & ",") <> Len("," & Replace(Join(ArrayB, ","), "," & Range("A1").Value & ",", "") & ",") Then
    Range("D1").Formula = "Cat"
ElseIf Len("," & Join(ArrayC, ",") & ",") <> Len("," & Replace(Join(ArrayC, ","), "," & Range("A1").Value & ",", "") & ",") Then
    Range("D1").Formula = "Bird"
ElseIf Len("," & Join(ArrayD, ",") & ",") <> Len("," & Replace(Join(ArrayD, ","), "," & Range("A1").Value & ",", "") & ",") Then
    Range("D1").Formula = "Monkey"
ElseIf Len("," & Join(ArrayE, ",") & ",") <> Len("," & Replace(Join(ArrayE, ","), "," & Range("A1").Value & ",", "") & ",") Then
    Range("D1").Formula = "Blue"
Else
    Range("D1").Formula = "Other"
End If
相关问题