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

程式碼包括您的條件並添加一個外部循環來遍歷Selectionby 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、循環和檢查值等)。

相關內容