Страницы: 1
RSS
Округление числовых значений в диапазоне содержащим текст
 
Добрый день, уважаемые форумчане!
В столбцах с D по H находится некоторое количество значений. При этом первая строка это заголовок, а в целевом диапазоне встречаются нечисловые значения.
Код
Range("D:H").SpecialCells(xlCellTypeConstants).Select
Set D_Range = Application.Selection
    For Each myCell In D_Range
         myCell.Value = Application.WorksheetFunction.round(myCell.Value, 2)
    Next
Функция отрабатывает при условии, что в диапазоне все значения числовые.
Необходимо изменить ее таким образом чтобы выполнялось следующее: если ячейка содержит "<0.2", заменить значение на 0.1, иначе если ячейка содержит "-", очистить ячейку, иначе если ошибка (поскольку текст нельзя округлить), значение не менять (чтобы остались заголовки, иначе округлить результат до 2 знаков после запятой.
Код
=ЕСЛИ(СЧЁТЕСЛИ(RC[-1];"*<0.2*");0.1;ЕСЛИ(СЧЁТЕСЛИ(RC[-1];"*-*");"";ЕСЛИОШИБКА(ОКРУГЛ(RC[-1];2);RC[-1])))
Не смог это условие прописать в цикле vba для всего диапазона, пример файла со значениями прилагаю.
Пожалуйста помогите с реализацией.
 
Добрый день, вариант.
Вредить легко, помогать трудно.
 
Код
Set D_Range = Application.Selection
On Error Resume Next
    For Each myCell In D_Range
    myCell.Value = Application.WorksheetFunction.Round(myCell.Value, 2)
    Next

Код
Set D_Range = Application.Selection
    For Each myCell In D_Range
    If IsNumeric(myCell.Value) Then myCell.Value = Application.WorksheetFunction.Round(myCell.Value, 2)
    Next
 
Всем огромное спасибо!
Изменил начальное условие, теперь прочерки просто становятся пустыми ячейками.
Получившийся код:
Код
Range("D:H").SpecialCells(xlCellTypeConstants).Select
Set Select_Range = Application.Selection

    For Each Cell In Select_Range
        If IsNumeric(Cell.Value) Then
            Cell.Value = VBA.Round(Cell.Value, 2)
        End If
        If Cell.Value Like "*<0.20*" Then
            Cell.Value = 0.1
        End If
    Next Cell
    
Range("B:H").SpecialCells(xlCellTypeConstants).Select
Set Select_Range = Application.Selection

    For Each Cell In Select_Range
        If Cell.Value Like "*-*" Then
            Cell.Value = ""
        End If
    Next Cell
 
Цитата
Павел Маерков: VBA.Round
использует НЕ математическое (банковское) округление
Изменено: Jack Famous - 28.05.2022 11:00:33
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Наверх