2

Привет всем! Я относительно новичок в кодировании 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 ответ1

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 , циклический просмотр и проверку значений и т.д.).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .