excel - 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
解决方案
在确定这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
)。
推荐阅读
- python - 使用嵌套字段加载/反序列化对象
- javascript - 如何在 C# 中生成 HMAC 签名
- java - 如何使 TableView 的这个 PairTable 模型可编辑?
- apache-spark - 检查一列是否全部为空
- python - 如何在 Airflow 的 PythonOperator 的 python_callable 中提供异步函数?
- elasticsearch - 需要有关如何解决 Elastic OOM JVM 崩溃问题的建议
- asp.net - 如何使用 SFTP 部署 Net Core razor pages 应用程序?
- ios - 强制 YTPlayerView 以编程方式退出全屏
- python - Windows“路径”环境变量如何工作?
- java - 如何在 Java 中删除标点符号但保留首字母缩写词和连字符?