首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对已自动筛选的行应用大于逻辑

对已自动筛选的行应用大于逻辑
EN

Stack Overflow用户
提问于 2020-05-27 18:14:45
回答 2查看 68关注 0票数 0

我已经将下面的筛选器应用于一个excel工作表,它根据开始日期和结束日期自动筛选列O。

代码语言:javascript
复制
sht1.Range("$A$1:$X$3432").AutoFilter Field:=15, Criteria1:= _
        ">=" & CDbl(StartDate), Operator:=xlAnd, Criteria2:="<=" & CDbl(EndDate)

在这里,我根据开始日期和结束日期计算了可见的筛选行。

代码语言:javascript
复制
With sht1
    Total_DCR = WorksheetFunction.Subtotal(102, ActiveSheet.Range("O1:O5000").Columns(1))
    Debug.Print Total_DCR
End With

Dim i, delay_count As Integer

现在,我想要比较筛选列O和X中的日期是否大于logic.If O2 >X2,然后将计数器递增1。

代码语言:javascript
复制
For i = 2 To Total_DCR
    If sht1.Range("O" & i).Value > sht1.Range("X" & i).Value Then
    delay_count = delay_count + 1
    Debug.Print delay_count
End If
Next

执行上述比较代码后,O列中大于日期的计数显示错误的数据。我觉得它也在考虑隐藏的行。在O列中,有79个日期介于开始日期和结束日期之间。当我使用IF(O2>X2,"YES","NO")逻辑在过滤的O和X之间选择大于逻辑时,大于行数为53。我想使用vba代码实现相同的功能。但是我的行数超过了76行。我不知道这里出了什么问题。热心的帮助

EN

回答 2

Stack Overflow用户

发布于 2020-05-28 01:50:53

您可以获得没有标题的可见单元格:

代码语言:javascript
复制
Sub ZZZ()
    Dim rng As Range, rngVisible As Range, rngRow As Range, delay_count As Double
    Set rng = Range("$A$1:$X$3432")
    '// Get visible cells excluding header
    With rng
        Set rngVisible = .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible)
    End With
    '// Must use "Cells" when dealing with "Rows" property
    For Each rngRow In rngVisible.Rows
        delay_count = delay_count + IIf(rngRow.Cells(1, "O") > rngRow.Cells(1, "X"), 1, 0)
    Next
End Sub
票数 0
EN

Stack Overflow用户

发布于 2020-05-28 19:46:09

代码语言:javascript
复制
Private Sub CommandButton1_Click()

Dim F11, F22, Month, Year As Variant
  Dim f_name1, f_name2
  Dim wb1, wb2, wb3, wb4 As Workbook
  Dim sht1, sht2, sht3, sht4 As Worksheet
  Dim Total_DCR As Long
  Dim StartDate, EndDate As Date

'Select Product Backlog File
 F11 = Application.GetOpenFilename("check (*.xlsm*), *.xlsm*")
  If (F11 <> vbNullString) Then
    If (F11 <> "False") Then
      f_name1 = F11
    End If
  End If
  If (f_name1 = "") Then
    MsgBox "The check file must be specified."
    Exit Sub
  End If

Set wb1 = Excel.Workbooks.Open(f_name1)
Set sht1 = wb1.Sheets("Product Backlog")


Set wb3 = ThisWorkbook
Set sht3 = wb3.Sheets("check")
With sht3

        StartDate = sht3.Range("J3").Value
        'Debug.Print StartDate

        If IsDate(StartDate) = True Then
        MsgBox ("The following string is a valid date expression")
        Else
        'if its not a date expression show a message box
        MsgBox ("The following string is not a valid date expression")
        End If

        EndDate = sht3.Range("J4").Value
        'Debug.Print EndDate

End With

wb1.Activate
sht1.Activate
    sht1.Columns("O:O").Select
    wb1.Worksheets("Product Backlog").Sort.SortFields.Clear
    wb1.Worksheets("Product Backlog").Sort.SortFields.Add2 Key:=Range( _
        "O1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal

With wb1.Worksheets("Product Backlog").Sort
        .SetRange Range("O1:O3437")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply

End With


sht1.Range("$A$1:$X$3432").AutoFilter Field:=15, Criteria1:= _
        ">=" & CDbl(StartDate), Operator:=xlAnd, Criteria2:="<=" & CDbl(EndDate)

With sht1
    Total_DCR = WorksheetFunction.Subtotal(102, ActiveSheet.Range("O1:O5000").Columns(1))
    Debug.Print Total_DCR
End With
 Dim rng As Range, rngVisible As Range, rngRow As Range, delay_count As Double
    Set rng = Range("$A$1:$X$5000")
    '// Get visible cells excluding header
    With rng
        Set rngVisible = .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible)
    End With
    '// Must use "Cells" when dealing with "Rows" property
    For Each rngRow In rngVisible.Rows
        delay_count = delay_count + IIf(rngRow.Cells(1, "O") > rngRow.Cells(1, "X"), 1, 0)
    Next
MsgBox ("total delay DCR is" & delay_count)

End Sub

@JohnyL这是我的全部代码。检查工作簿包含从2017年到2020年的随机日期,按照列O中的每个月。同样,列X也包含日期。代码必须将它们过滤为2020年2月日期,然后在O和X日期之间进行比较。开始日期:01-02-2020结束日期:20-02-2020

所有的A-X列都添加了过滤器下拉菜单。当应用自动筛选时,它将仅筛选2020年2月的日期。A-X行位于第一行,具有标题

@EylM你介意回答这个问题吗

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62040677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档