首页 > 解决方案 > 自动过滤和打印电子表格

问题描述

我有一个包含 3 列值的电子表格。我想用 VBA 循环代码过滤和打印。我写的代码如下。如果我使用数值,criteria 1:="<26"那么它会过滤下面的所有值26。但我希望它与循环值一起工作,例如低于2627 to 50等的值。

过滤后,我可以使用打印命令,然后转到下一个值过滤器并打印,依此类推,直到全部打印到最后一行。不知道如何解决这个问题。

Sub loopi()    
    Dim i As Integer
    Dim lrow As Integer

    i = 1        
    lrow = Cells(Rows.Count, 1).End(xlUp).Row

    Do While i < lrow        
        i = i + 25        
        ActiveSheet.Range("A1").AutoFilter Field:=1, Criteria1:="<i"        
        ActiveSheet.AutoFilterMode = False  
    Loop    
End Sub

标签: excelvba

解决方案


  1. i不被识别为变量,Criteria1:="<i"而是字符i。您必须将其更改为Criteria1:="<" & i才能将循环中的计数器i用作条件。

  2. 您的行计数变量需要是类型Long,因为 Excel 的行数超出了Integer处理能力。

  3. 如果您想要数据,例如来自 25…50 的数据,那么您需要 2 个条件,And过滤器中有一个运算符。所以你需要计算开始和结束的标准。


Option Explicit

Public Sub PrintSplitData()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.ActiveSheet
       'better to name the sheet unless you do it on many different sheets
       'Set ws = ThisWorkbook.Worksheets("YouDataSheetName")

    Dim LastRow As Long
    LastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    Dim iStartRow As Long, iEndRow As Long
    For iStartRow = 1 To LastRow Step 25
        iEndRow = iStartRow + 24
        iEndRow = IIf(iEndRow > LastRow, LastRow, iEndRow) 'limit it to LastRow

        Debug.Print iStartRow, iEndRow 'this is just for illustrating

        ws.Range("A1").AutoFilter Field:=1, Criteria1:=">=" & iStartRow, Operator:=xlAnd, Criteria2:="<=" & iEndRow
        ws.AutoFilterMode = False
    Next iStartRow
End Sub

推荐阅读