
大家好,我對 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
by 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
、循環和檢查值等)。