【问题标题】:VBA loop to select rows based on cell value?VBA循环根据单元格值选择行?
【发布时间】:2023-02-02 05:20:28
【问题描述】:

我有一台机器的数据,我将其导入到 excel 中,它提供了一个大约 7 列宽的数据集,66000 行深. (有时会更多,有时会更少)。

我想要的是能够根据 E 列选择数据,然后选择到目前为止的所有行,我可以将其镜像到另一张表。

顺便说一句,E 列基本上包含几千行零,然后在几千行中变为大于零的数字。然后它循环回到零等。它将对每个数据集执行此循环约 25 次。 (每个循环的行数等总是不同)。

所以我认为我想要的基本上是两个循环(在我通常只使用 VBA 进行绘图和其他操作之前,我从未做过任何循环工作)。

循环 1:

查看 E 列​​,如果它等于零,则选择该行。

这样做直到 E 列不等于零

将这个选择(我可以使用 Range.Resize 方法)镜像到不同的区域

删除选择

向上移动单元格

然后我会为大于零的值调用一个类似的循环,然后再次调用循环 1 并执行 25 次(但这并不重要)......

我需要帮助的是:

如何创建循环以根据单元格/列的值选择单元格/数据行?一旦选择了单元格,循环就应该结束,因为每个组都将移动到工作簿上的不同区域......

或者有什么比循环更好用的东西吗?

希望这一切都是有道理的,我听起来不傻......

干杯

【问题讨论】:

  • 我们能否得出结论,数据具有交替的零区域和感兴趣区域,并且您想将感兴趣区域复制到不同的目的地?如果是这样,您能否解释一下需要将这些感兴趣的区域复制到哪里?此外,您的数据集是否采用表格格式(第一行是标题,没有空行或空列)?数据从哪个单元格开始?添加更多细节,可能或多或少相关的代码,以使事情变得更容易(可能)。将其添加到您的帖子中。

标签: excel vba loops


【解决方案1】:

检索非零区域

Option Explicit

Sub RetrieveNonZeroAreas()
    
    Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
    
    Dim sws As Worksheet: Set sws = wb.Worksheets("Sheet1")
    If sws.AutoFilterMode Then sws.AutoFilterMode = False ' turn off AutoFilter
    
    Dim srg As Range: Set srg = sws.Range("A1").CurrentRegion
    Dim sdrg As Range: Set sdrg = srg.Resize(srg.Rows.Count - 1).Offset(1)
    
    srg.AutoFilter 5, "<>0"
    
    Dim svdrg As Range
    On Error Resume Next
        Set svdrg = sdrg.SpecialCells(xlCellTypeVisible)
    On Error GoTo 0
    sws.AutoFilterMode = False
    
    If svdrg Is Nothing Then Exit Sub
    
    Dim arg As Range
    For Each arg In svdrg.Areas
        ' Now do what you need to do with each of the 25 or so datasets, e.g.:
        
        Debug.Print arg.Address
        
    Next arg
    
    MsgBox "Data... done.", vbInformation
    
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    • 1970-01-01
    • 2021-03-11
    • 2014-02-21
    相关资源
    最近更新 更多