使用Excel VBA

时间:2016-02-13 23:23:33

标签: arrays excel vba excel-vba multidimensional-array

建立我过去的一个questions
我想要完成的事情:

我希望根据多个条件使用VBA代码查找并突出显示重复的Upcharge:

  1. 产品的XID(A栏)
  2. 上升标准1(列CT)
  3. 上行标准2(列CU)
  4. 上电类型(列CV)和
  5. 上升电平(CW列)
  6. 如果电子表格中有多个实例/行共享/匹配所有这些条件,则表示Upcharge是重复的。正如我上面链接的帖子所示:

    我尝试了什么:

    1. 创建一个通用公式(见下文),该公式插入Helper列并在电子表格中一直复制,指出哪些Upcharges是重复的。这种方法资源太重,耗时太长(所有公式计算时间为8-10分钟,但过滤时不会滞后)。然后我试了
    2. 将通用公式演变为条件格式公式,并通过VBA代码将其应用于Upcharge Name列。(过滤时花费相同的时间和滞后)
    3. 我也考虑过可能使用scripting.dictionary,但我不确定如何(或者如果)使用多维数组。
    4. 现在我终于找到了我认为会更快的方法,

      我想要使用的更快的方法: 将上述列转储到多维数组中,在数组中找到重复的“行”,然后突出显示相应的电子表格行。

      我尝试更快的方法: 这是我填充多维数组的方法

      Sub populateArray()
          Dim arrXID() As Variant, arrUpchargeOne() As Variant, arrUpchargeTwo() As Variant, arrUpchargeType() As Variant, arrUpchargeLevel() As Variant
          Dim arrAllData() As Variant
          Dim i As Long, lrow As Long
          lrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
      
          arrXID = Range("A2:A" & lrow) 'amend column number
          arrUpchargeOne = Range("CT2:CT" & lrow)
          arrUpchargeTwo = Range("CU2:CU" & lrow)
          arrUpchargeType = Range("CV2:CV" & lrow)
          arrUpchargeLevel = Range("CW2:CW" & lrow)
      
          ReDim arrAllData(1 To UBound(arrXID, 1), 4) As Variant
              For i = 1 To UBound(arrXID, 1)
                  arrAllData(i, 0) = arrXID(i, 1)
                  arrAllData(i, 1) = arrUpchargeOne(i, 1)
                  arrAllData(i, 2) = arrUpchargeTwo(i, 1)
                  arrAllData(i, 3) = arrUpchargeType(i, 1)
                  arrAllData(i, 4) = arrUpchargeLevel(i, 1)
              Next i
      End Sub
      

      我可以将列添加到数组中,但是我从那里被卡住了。我不确定如何检查数组中的重复“行”。

      我的问题:

      1. 有没有办法可以在我上一篇文章的第一次尝试中应用我的公式(见下文)并将其应用到数组中?:
      2. 或者,更好的是,有更快的方法可以在数组中找到重复的“行”吗?
      3. 那么我怎样才能突出显示电子表格行中的上传名称(CS)单元格,该单元格与数组中标记为重复项的“行”相对应?
      4. 上一篇文章中的公式供参考:

        =AND(SUMPRODUCT(($A$2:$A$" & lastRow & "=$A2)*($CT$2:$CT$" & lastRow & "=$CT2)*($CU$2:$CU$" & lastRow & "=$CU2)*($CV$2:$CV$" & lastRow & "=$CV2)*($CW$2:$CW$" & lastRow & "=$CW2))>1,$CT2 <> """")"
        Returns TRUE if Upcharge is a duplicate 
        

0 个答案:

没有答案