【问题标题】:Count columns based on date range根据日期范围计算列数
【发布时间】:2017-05-16 06:02:38
【问题描述】:

我是 VBA 新手。我正在尝试在 VBA 中完成以下事情,但不知道该怎么做。

  1. 在“延迟”表的“K”列中,我的日期格式为“2016 年 11 月 10 日 16:17”。 (列中会有多个日期)
  2. 在“O”列中,单元格“通过”或“失败”中的值很少

我想要做的是,当脚本运行时,它应该首先抛出一个对话框,要求用户输入日期范围。一旦用户给出日期范围,它应该选择那些列并在“o”列中寻找“Pass”并计算值并在特定单元格中更新它。

我尝试了以下代码,但我不确定如何使用日期范围条件添加计数值:

Sub WBR()
Dim s As String
Dim r As Range
Dim wf As WorksheetFunction
Dim xlSheet As Worksheet
Set xlSheet = ActiveWorkbook.Worksheets("Latency") 'sets the worksheet
Set wf = Application.WorksheetFunction
Set r = xlSheet.Range("O:O")                       'sets the range to search
s = "Pass"
[AE4] = wf.CountIf(r, s)
s = "Fail"
[AE5] = wf.CountIf(r, s)

With ActiveWorkbook.Worksheets("TT")
    [AE119] = wf.CountIfs(.Range("G:G"), "Yes", _
                          .Range("K:K"), "Tablet")
 End With

With ActiveWorkbook.Worksheets("TT")                'no of tickets processed
    [AE119] = wf.CountIfs(.Range("G:G"), "Yes", _
                          .Range("I:I"), "<>Duplicate TT", _
                          .Range("K:K"), "Tablet")
End With

结束子

【问题讨论】:

    标签: vba excel date


    【解决方案1】:

    这只是对现有代码的轻微改动:

    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")
    
            [AE6] = wf.CountIfs(.Range("K:K"), ">=" & CLng(CDate(MinDate)), _
                                .Range("K:K"), "<=" & Clng(CDate(MaxDate)), _
                                .Range("O:O"), "Pass")
        End With        
        With ActiveWorkbook.Worksheets("TT")
            [AE119] = wf.CountIfs(.Range("G:G"), "Yes", _
                                  .Range("K:K"), "Tablet")
            'no of tickets processed
            [AE119] = wf.CountIfs(.Range("G:G"), "Yes", _
                                  .Range("I:I"), "<>Duplicate TT", _
                                  .Range("K:K"), "Tablet")
        End With
    End Sub
    

    【讨论】:

    • @walterwhile - 另请注意,您的最后两个 CountIfs 当前将它们的结果存储在同一个单元格中。
    • 我运行上面的代码很累,但是它在一个不寻常的地方显示语法错误,之前没有错误:With ActiveWorkbook.Worksheets("Latency") [AE4] = wf.CountIf(.Range("O:O", "Pass") [AE5] = wf.CountIf(.Range("O:O", "Fail") @YowE3K
    • @walterwhile - 抱歉 - 我从 Range("O:O") 末尾丢失了 ) - 我将编辑答案
    • 将对此进行测试。另一个基于条件的问题。假设 col“X”有 A、B、C、D。如果它只有 A 或只有 B 或来自 col X 的 A 和 B 以及来自不同列的另一个条件,我想要计数。我如何提出这个条件?
    • @walterwhile - 你的意思是(X 有“A”)还是(X 有“B”)或(X 有“A”或“B”,而 Y 列有“Z “)?这与(X 有一个“A”)或(X 有一个“B”)相同。但是,如果您的意思是(X 有一个“A”)或(X 有一个“B”)或(X 有“A”和“B”,而 Y 列有“Z”),那么这是零 - 单个单列(即单元格)中的行不能同时包含两个值。
    猜你喜欢
    • 1970-01-01
    • 2022-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多