
Привет всем Я относительно новичок в кодировании VBA в Excel (текущая версия 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, что если он обнаружит строку «Отсутствующие данные», то не следует запускать код длявсе значения в этой строке.
Я ценю любую помощь, которую вы можете оказать. Спасибо!
решение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
, проходя по циклу и проверяя значения и т. д.).