Конвертировать проценты в числа, например, от 20% до 20 - PullRequest
0 голосов
/ 04 июня 2018

У меня есть столбец, который включает в себя процентные значения.Формат ячеек столбца - «число».enter image description here

Это демонстрационная колонка.Это процентные значения, введенные пользователем.

Код, который я пробовал:

Sub Percent()
Dim cell As Variant
Dim cellValue As Variant
For Each cell In Selection
    With cell
        cellValue = .Text
        MsgBox cellValue
        If (cellValue Like "[0-9]*%") Then
            cellValue = Left(cellValue, Len(cellValue) - 1)
            .Value = cellValue
        Else
            Exit Sub
        End If
    End With
Next
End Sub

При запуске этого я хочу преобразовать «выбранные ячейки» в числа, т.е. я хочу удалитьэтот символ процента, я не хочу значения в десятичных числах.Просто целые числа (без символа%).

Приведенный выше код работает, но столбец должен быть «текстовым» столбцом.Это означает, что в опции «форматировать ячейки» для столбца должен быть текст, а не число, тогда работает только мой код.Но когда я изменяю столбец в «ячейках формата» на «число», код не работает.

Ответы [ 4 ]

0 голосов
/ 04 июня 2018

Вы можете сделать это следующим образом:

Sub Percent()

    Dim cell As Variant
    Dim cellValue As Variant

    For Each cell In Selection
        With cell
            cellValue = .Text
            MsgBox cellValue
            If (cellValue Like "[0-9]*%") Then
                .NumberFormat = "General"    <-- convert the format into number
                .Value = .Value * 100        <--
            Else
                Exit Sub
            End If
        End With
    Next

End Sub
0 голосов
/ 04 июня 2018

Я бы сначала преобразовал ячейку в число, умножил на 100 и преобразовал в текст.

Sub Percent()

    Dim Cel As Range

    For Each Cel In Selection.Cells
        With Cel
            .NumberFormat = "0.00"
            .Value2 = Round(.Value2 * 100, 0)
            .NumberFormat = "@"
        End With
    Next Cel

End Sub
0 голосов
/ 04 июня 2018

Вы можете попробовать это:

Sub Percent()
Dim cell As Variant
Dim cellValue As Variant
For Each cell In Selection
    With cell
         .NumberFormat = "0.00"
        .NumberFormat = "0"
        cellValue = .Value * 100
        .Value = cellValue
    End With
Next
End Sub

или это:

Sub Percent2()
Dim cell As Variant
Dim cellValue As Variant
For Each cell In Selection
    With cell
        cellValue = .Text
        MsgBox cellValue
        If (cellValue Like "[0-9]*%") Then
            Selection.NumberFormat = "0"
            cellValue = Left(cellValue, Len(cellValue) - 1)
            .Value = cellValue
        Else
            Exit Sub
        End If
    End With
Next
End Sub
0 голосов
/ 04 июня 2018

Если вы хотите, чтобы числа как текст:

Sub Percent()
    Dim cell As Variant
    Dim cellValue As Variant
    For Each cell In Selection
        With cell
            cellValue = .Text
            If Right(cellValue, 1) = "%" Then
                cellValue = "'" & Left(cellValue, Len(cellValue) - 1)
                .Value = cellValue
            Else

            End If
        End With
    Next
End Sub

Мы:

  • изменили % тест
  • вставил префиксный символ
  • позволил продолжить цикл
...