首页 > 解决方案 > VBA将值输入循环内过滤数据的前X个可见单元格

问题描述

我正在为我的 QA 团队开发采样解决方案,其中 Excel 上的生产文件是随机的,并且每个用户的样本都被考虑用于 QA 目的。我需要遍历过滤范围的可见单元格并选择前 x 行(变量定义)。由于客户系统的限制,我无法粘贴我拥有的代码,因此只需在我遇到的确切区域输入代码即可。我在下面的循环中尝试了不同的组合,但是所有可见单元格都获得了“QA Selected”值,或者它只是第一行。根据样本,我只需要它的行数。一旦满足样本计数,For Each cell in range 部分不会停止。

例如,如果用户 John123 在某一天处理了 500 个警报,我的 10% 样本将意味着 50 个随机选择的警报。在任何一天,我都有大约 20 个不同的用户处理警报。我的代码目前选择数据,随机化,打开自动过滤器并循环遍历每个用户的生产数据。我只需要 VBA 通过在单元格中输入“QA Selected”来选择前 50 个(在这种情况下)警报,即可见行。然后代码将过滤下一个用户并选择前 30 个警报(如果生产是 300 个警报)等等。

       Set filter_rng = Sheets("PS_Extract").Range("AL2:AL" & lastrow2)
 
       For i = 1 to lastrow
         Sheets("PS_Extract").Range("A:AL").Autofilter
         Sheets("PS_Extract").Range("A:AL").Autofilter field:=21, Criteria:=Sheets("Notes").Range("A") & i)

     SampleSize = Sheets("Notes").Range("C" & i)
     
     For each cell in filter_rng.SpecialCells(xlCellTypeVisible) 'this loop is the block where I am facing the issue
        For j = 1 to SampleSize
           Sheets("PS_Extract").Range("AL" & cell.Row).Value = "QA Selected"
           j = j + 1
           If j = SampleSize Then Exit For
        Next j
     Next cell

标签: excelvba

解决方案


在确定这SampleSize是一个整数值(整数)后,您可以尝试以下操作:

j = 0
For Each cell In filter_rng.SpecialCells(xlCellTypeVisible)
   j = j + 1
   Sheets("PS_Extract").Range("AL" & cell.Row).Value = "QA Selected"
   If j = SampleSize Then Exit For ' maybe '> SampleSize - 1' if not integer
Next cell

在内部循环中计数时,您必须重置计数器 ( j = 0)。


推荐阅读