Excel VBA将值输入循环中过滤数据的前X个可见单元格中

Excel VBA将值输入循环中过滤数据的前X个可见单元格中,excel,vba,Excel,Vba,我正在为我的QA团队制定抽样解决方案,其中excel上的生产文件是随机的,每个用户的样本都是出于QA目的考虑的。我需要在过滤范围的可见单元格中循环,并选择顶部的x(变量定义)行。我无法粘贴我的代码,因为我的客户的系统的限制,所以只需要在我卡住的确切区域键入代码。我在下面的循环中尝试了不同的组合,但要么所有可见单元格都获得值“QA Selected”,要么它只是第一行。我只需要它的行数根据样本。一旦满足采样计数,范围内每个单元格的“For”部分不会停止 例如,如果用户John123在某一天处理了5

我正在为我的QA团队制定抽样解决方案,其中excel上的生产文件是随机的,每个用户的样本都是出于QA目的考虑的。我需要在过滤范围的可见单元格中循环,并选择顶部的x(变量定义)行。我无法粘贴我的代码,因为我的客户的系统的限制,所以只需要在我卡住的确切区域键入代码。我在下面的循环中尝试了不同的组合,但要么所有可见单元格都获得值“QA Selected”,要么它只是第一行。我只需要它的行数根据样本。一旦满足采样计数,范围内每个单元格的“For”部分不会停止

例如,如果用户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

确保
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
)。

只需删除j=…循环的
,将循环中的内容保留为isHi Chris,感谢您的响应。移除For j循环将在过滤器的所有单元格中填充“QA Selected”。我需要循环停止在SampleSize。我很尴尬,我很粗心地忽略了这一点。这工作做得很好!这就是为什么像我这样的初学者不能这样做。先生,你是个天才。谢谢你,上帝保佑。