Excel VBA:如果条件满足,则跳过整行处理

Excel VBA:如果条件满足,则跳过整行处理

大家好,我对 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

如果您想跳过一行,您可以将其分解CellsRows,然后使用条件来决定是否应该运行该行​​。实际上,您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、循环并检查值等)。

相关内容