Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 根据日期范围计算列数_Vba_Excel_Date - Fatal编程技术网

Vba 根据日期范围计算列数

Vba 根据日期范围计算列数,vba,excel,date,Vba,Excel,Date,我是VBA新手。我试图在VBA中完成下面的事情,但不确定如何做到这一点 在“延迟”表中的“K”列中,我的日期格式为“11/10/2016 16:17”。(列中将有多个日期) 在“O”列中,单元格中有几个值“通过”或“失败” 我想做的是,当脚本运行时,它应该首先弹出一个对话框,要求用户输入日期范围。一旦用户给出日期范围,它应该选择该列,并在“o”列中查找“Pass”,计算值并在特定单元格中更新 我尝试了以下代码,但不确定如何使用日期范围条件添加计数值: Sub WBR() Dim s As Str

我是VBA新手。我试图在VBA中完成下面的事情,但不确定如何做到这一点

  • 在“延迟”表中的“K”列中,我的日期格式为“11/10/2016 16:17”。(列中将有多个日期)
  • 在“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
    
    子WBR()
    像线一样变暗
    调光范围
    将wf设置为工作表功能
    将工作表设置为工作表
    Set xlSheet=ActiveWorkbook.Worksheets(“延迟”)设置工作表
    设置wf=Application.WorksheetFunction
    Set r=xlSheet.Range(“O:O”)'设置要搜索的范围
    s=“通过”
    [AE4]=wf.CountIf(r,s)
    s=“失败”
    [AE5]=wf.CountIf(r,s)
    使用ActiveWorkbook.Worksheets(“TT”)
    [AE119]=wf.CountIfs(.Range(“G:G”),“是”_
    .范围(“K:K”),“片剂”)
    以
    使用ActiveWorkbook.Worksheets(“TT”)处理的票证数量
    [AE119]=wf.CountIfs(.Range(“G:G”),“是”_
    .范围(“I:I”),“重复TT”_
    .范围(“K:K”),“片剂”)
    以
    

    End Sub

    这只是对现有代码的一个细微变化:

    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
    
    子WBR()
    将wf设置为工作表功能
    设置wf=Application.WorksheetFunction
    模糊的心弦
    将MaxDate设置为字符串
    MinDate=输入框(“最小日期”)
    MaxDate=输入框(“最大日期”)
    如果不是(IsDate(MinDate)和IsDate(MaxDate)),则
    MsgBox“您应该指定有效日期!"
    出口接头
    如果结束
    如果CDate(MinDate)>CDate(MaxDate),则
    MsgBox“您应该指定合理的日期!"
    出口接头
    如果结束
    使用ActiveWorkbook.Worksheets(“延迟”)
    [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”),“@walterwhile-还请注意,您最近的两个
    CountIfs
    当前正在将其结果存储在同一个单元格中。我已经厌倦了运行上述代码,但它在一个不寻常的地方显示了语法错误,在此之前没有出现错误:
    使用ActiveWorkbook.Worksheets(“Latency”)[AE4]=wf.CountIf(.Range(“O:O”,“Pass”)[AE5]=wf.CountIf(.Range(“O:O”,“Fail”)
    @YowE3K@walterwhile-抱歉-我丢失了
    范围(“O:O”)
    末尾的
    -我将编辑答案,并将对此进行测试。另一个基于条件的问题。假设是列“X”有A,B,C,D。我想要计数,如果它只有A或只有B,或者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”),那么这就是零-一列中的一行(即单元格)不能同时包含两个值。