![Excel VBA:如果条件满足,则跳过整行处理](https://linux22.com/image/1453617/Excel%20VBA%EF%BC%9A%E5%A6%82%E6%9E%9C%E6%9D%A1%E4%BB%B6%E6%BB%A1%E8%B6%B3%EF%BC%8C%E5%88%99%E8%B7%B3%E8%BF%87%E6%95%B4%E8%A1%8C%E5%A4%84%E7%90%86.png)
大家好,我对 Excel 中的 VBA 编码还比较陌生(当前版本为 2010),我正在尝试改进一个简单的程序,该程序可以抑制我组织发布的表中的小值。我的数据格式如下。
在最左边的列(通常是 C)中,我有行标签(例如,医院、家庭、其他、缺失数据)。在下一列中,我们有该类别的记录数。在最后一列中,我们有该行的百分比值。
报告结果时,我们始终会隐藏 1-5 的单元格大小。但是,我们不会隐藏“缺失数据”行中的记录数。
在本论坛其他用户的帮助下,我生成了以下宏,该程序将表格中的所有 n 值替换为“<6”。使用格式语句的原因是我不想隐藏百分比,并且它们始终被格式化为带有一个小数点的数字。
Sub SuppressN()
Dim rng As Range, cell As Range
Set rng = Selection
If rng Is Nothing Then Exit Sub
For Each cell In rng.Cells
If cell.NumberFormatLocal = "#,##0" And cell.Value >= 1 And
cell.Value <= 5 Then cell.Value = "<6"
Next
End Sub
我想做的是告诉 Excel,如果它发现字符串“Missing Data”,则不要运行代码该行中的所有值。
感谢您提供的任何帮助。谢谢!
答案1
如果您想跳过一行,您可以将其分解Cells
成Rows
,然后使用条件来决定是否应该运行该行。实际上,您Rows
首先将其分解成,然后对每一行执行。如果您知道将出现在Cells
哪里,这是最容易做到的。Missing Data
代码包括您的条件并添加一个外循环来Selection
通过Rows
。
Sub SuppressN()
Dim rng As Range
Set rng = Selection
If rng Is Nothing Then Exit Sub
'go through by rows first
Dim rng_row As Range
For Each rng_row In rng_data.Rows
If rng_row.Cells(1, 1) <> "Missing Data" Then
'if good keep going on all the cells
Dim cell As Range
For Each cell In rng_row.Cells
If cell.NumberFormatLocal = "#,##0" And cell.Value >= 1 And cell.Value <= 5 Then
cell.Value = "<6"
End If
Next
End If
Next
End Sub
图片显示之前和之后
请注意,我运行该代码时NumberFormat
排除了条件,因为我不想模拟这种情况。我将其放回到最终代码中,这样您就不必更改任何内容。
此代码要求您有某种可靠的方法来检查行中某处是否Missing Data
存在。我刚刚检查了列的第一个单元格(听起来就像您拥有的),但您可以通过许多其他方式进行此检查(例如使用Find
、循环并检查值等)。