在vba中散列和传递参数

时间:2017-01-05 03:39:51

标签: excel vba excel-vba dictionary hash

我有vba代码,我需要满足特定字符串模式的单元格数。例如:

Sub WBR()
    Dim wf As WorksheetFunction
    Set wf = Application.WorksheetFunction
    Dim MinDate As String
    Dim MaxDate As String
    MinDate = InputBox("Minimum Date")
    MaxDate = InputBox("Maximum Date")
    If Not (IsDate(MinDate) And IsDate(MaxDate)) Then
        MsgBox "You should have specified valid dates!"
        Exit Sub
    End If
    If CDate(MinDate) > CDate(MaxDate) Then
        MsgBox "You should have specified sensible dates!"
        Exit Sub
    End If

    With ActiveWorkbook.Worksheets("Latency")
        [AE4] = wf.CountIf(.Range("O:O"), "Pass")
        [AE5] = wf.CountIf(.Range("O:O"), "Fail")
        [AE2] = wf.CountIfs(.Range("K:K"), ">=" & CLng(CDate(MinDate)), _
                .Range("K:K"), "<=" & (CLng(CDate(MaxDate)) + 1), _
                .Range("O:O"), "Pass")
    End With

    With ActiveWorkbook.Worksheets("TT")                
        [AE43] = wf.CountIfs(.Range("I:I"), "<>Duplicate TT", _
              .Range("G:G"), "<>Not Tested", _
              .Range("U:U"), "Item")
    End With

    With ActiveWorkbook.Worksheets("TT")                
        [AE44] = wf.CountIfs(.Range("G:G"), "Not Tested")
    End With

此代码搜索特定文本,如果满足则给出指定单元格中的计数。

我需要为30多个单元格实现相同的代码。

那么如何创建一个哈希并在此处传递“关键字”作为参数,如果满足该条件,则应该在单元格中更新计数。

2 个答案:

答案 0 :(得分:0)

我正在努力完全理解你的代码正在做什么,但你可以做一个临时的&#34;哈希&#34;通过基本上有一个带有一些分隔符的大字符串,然后在最后分割这些分隔符...

YourHash="Key_1:Value_1->Key_2:Value_2->Key_3:Value_3"
Split_1 = Split(YourHash,"->")
For i = 0 to UBound(Split_1)
    Split_2 = Split(Split_1(i),":")
    DesiredKey = Split_2(0)
    DesiredValue = Split_2(1)
Next

这样的事可能对你有用,但我可能无法完全理解你的需要。

答案 1 :(得分:0)

我想知道你为什么要在VBA开始这样做。为什么不将您在VBA代码中使用的工作表函数作为正常函数放在要放置结果的单元格中,并使用两个单元格作为开始日期和结束日期?