Excel VBA:格式化为百分比,无百分比符号

时间:2018-08-07 11:19:15

标签: excel vba number-formatting percentage

为了使问题尽可能简单:

在excel单元格A1中有一个数字值:0.11

我想将单元格格式化为百分比值,但没有%符号。 我想要:11;不是11%

我没有问如何在常规excel中执行此操作;它必须是VBA。

我猜想Range("A1").NumberFormat = ....是路要走;但是使用此方法时,总是会显示%符号。

有没有一种格式可以在没有百分号的情况下格式化? 请注意,该值不能更改,必须保持0.11。

4 个答案:

答案 0 :(得分:1)

尝试一下

Range("A5").NumberFormat = "0.00" & Chr(10) & "%"
Range("A5").WrapText = True

答案 1 :(得分:1)

这是一种解决方法,但请尝试以下方法:

Sub Test()

Dim i As Long
Dim STRNG As String

For i = 2 To Range("A1").Height / 11.25
    STRNG = STRNG & Chr(10)
Next i
Debug.Print STRNG
Range("A1").NumberFormat = STRNG & "0" & Chr(10) & "%"

End Sub

它将查看单元格的高度,并计算出隐藏“%”号所需的换行符。

您可能想要添加它,例如在更改表事件时调用它,而不是仅查看单元格A1,然后从A1循环到A&Lastrow .....

或将其分配给远程按钮区

答案 2 :(得分:1)

另一种解决方法是显示单元格内容x100。

Sub Macro1()

    Dim cell As Range
    For Each cell In Range("A:A")   ' Change with your Range
        If cell.Value > 0 Then
            cell.NumberFormat = Str(cell.Value * 100)
        End If
    Next cell

End Sub

这可以工作,但是每次更改都必须重新运行。例如,在工作表中使用以下代码:

Private Sub Worksheet_Change(ByVal Target As Range)

   If Not Intersect(Target, Range("A:A")) Is Nothing Then 
       Call Macro1            
   End If

End Sub

Sub Macro1()

        Dim cell As Range
        For Each cell In Range("A:A")   ' Change with your Range
            If cell.Value > 0 Then
                cell.NumberFormat = Str(cell.Value * 100)
            End If
        Next cell

    End Sub

答案 3 :(得分:0)

这将按要求工作:

Private Sub remove_percent(where As Range)

    Dim cell As Range
    For Each cell In where
        If (cell.NumberFormat = "0.00") Then
            cell = Round(cell * 100, 0)
            cell.NumberFormat = "0"

            ' if we exceed 100%, let's round it to 100
            If (cell > 100) Then
                cell = 100
            End If     
        End If
    Next cell

End Sub

然后您可以通过以下方式调用它(例如):

Call remove_percent(Range("A1:A5"))