Округление любой ячейки с числами с использованием VBA - PullRequest
0 голосов
/ 13 марта 2019

У меня есть нефиксированный набор данных, который может различаться по строкам и столбцам.

Я намерен использовать VBA для поиска во всем наборе данных и округления всех ячеек с числами до указанного десятичного знака.(или округляется до ближайших 100 или 10 с)

У меня есть следующий код:

Sub roundthissheet()
Dim cell As Range, rng As Range

rng = Range("A1", ActiveCell.SpecialCells(xlLastCell)).Select

For Each cell In rng.cells
    If cell.Value <> "" And IsNumeric(cell.Value) Then
        cell.Value = Round(cell.Value, -2)
    End If
Next cell
End Sub

Однако, мое утверждение if, кажется, не выполняется вообще, и я получаю сообщение об ошибке "Переменная объекта или переменная блока не установлена ​​"

Как мне поступить с этой ошибкой?

Ответы [ 3 ]

1 голос
/ 13 марта 2019

Если вы просто хотите установить формат числа, попробуйте это

Sub Sample()
    Dim ws As Worksheet
    Dim rng As Range

    Set ws = Sheet1 '<~~ Change this to the relevant sheet

    With ws
        On Error Resume Next
        Set rng = .Cells.SpecialCells(xlCellTypeConstants, 1)
        On Error GoTo 0

        If Not rng Is Nothing Then rng.NumberFormat = "0.00"
    End With
End Sub

Если вы хотите округлить его, вам не нужно циклически перебирать все ячейки.Используйте SpecialCells для просмотра только тех ячеек, которые имеют номер

Sub Sample()
    Dim ws As Worksheet
    Dim rng As Range, aCell As Range

    Set ws = Sheet1 '<~~ Change this to the relevant sheet

    With ws
        On Error Resume Next
        Set rng = .Cells.SpecialCells(xlCellTypeConstants, 1)
        On Error GoTo 0

        If Not rng Is Nothing Then
            For Each aCell In rng
                aCell.Value = Round(aCell.Value, 2)
            Next
        End If
    End With
End Sub
1 голос
/ 13 марта 2019

Если вы устанавливаете диапазон, вам нужна команда SET, и вы не должны .Select при установке:

rng = Range("A1", ActiveCell.SpecialCells(xlLastCell)).Select

становится:

Set rng = Range("A1", ActiveCell.SpecialCells(xlLastCell))

Также, при округлении вы указали отрицательное значение.

cell.Value = Round(cell.Value, -2)

Становится:

cell.Value = Round(cell.Value, 2)

Таким образом, код заканчивается так:

Sub roundthissheet()
    Dim cell As Range, rng As Range
    Set rng = Range("A1", ActiveCell.SpecialCells(xlLastCell))
    For Each cell In rng.Cells
        If cell.Value <> "" And IsNumeric(cell.Value) Then
            cell.Value = Round(cell.Value, 2)
        End If
    Next cell
End Sub
0 голосов
/ 13 марта 2019

Вы можете это.

Sub RoundValues()
Dim cel As Range, rng As Range

Set rng = Range("A1", Range("A1").End(xlDown).Address)

    For Each cel In rng
        If cel.Value <> "" And IsNumeric(cel.Value) Then
            cel.Value = Round(cel.Value2, 2)
        End If
    Next cel

End Sub
...