是否可以在Excel中使用度量“k”符号?

时间:2015-05-30 10:22:05

标签: excel vba excel-vba formatting

是否可以使用某些指标后缀表示法在Excel中工作: 如果我写1000,则单元格显示1k。如果我写1000000,则单元格显示1M

我做了两个功能来解决方法,但也许有更合适的解决方案。

Function lecI(cadena) As Double
    u = Right(cadena, 1)
    If u = "k" Then
        mult = 1000
    ElseIf u = "M" Then
        mult = 1000000
    ElseIf u = "m" Then
        mult = 0.001
    End If
    lecI = Val(Left(cadena, Len(cadena) - 1)) * mult
End Function

Function wriI(num) As String
    If num > 1000000 Then 'M
        wriI = Str(Round(num / 1000000, 2)) & "M"
    ElseIf num > 1000 Then 'k
        wriI = Str(Round(num / 1000, 1)) & "k"
    ElseIf num < 0.01 Then 'm
        wriI = Str(Round(num * 1000, 1)) & "m"
    Else: wriI = Str(num)
    End If

1 个答案:

答案 0 :(得分:2)

根据link by @Vasily,您只能使用条件格式获得所需的结果。这很好,因为这意味着所有您的值都存储为数字而不是文本和数学工作正常

总体步骤:

  • 为应用该块的数字格式的每个1000块创建一个新的条件格式
  • 在顶部添加最大条件,使其首先格式化
  • 冲洗并重复以获得所需的所有

条件格式用于设置列C的样式,它只是十个不同幂的随机数据。它与列D的编号相同,只是样式不同。

conditional setup

数字格式非常简单,因为它们与that link, see Large Numbers section相同。

  • ones = 0 " "
  • 千位= 0, " k"
  • 数百万= 0,, " M"
  • 等等,无论你想要多少

自动化,如果您不想全天点击并输入,这里有一些VBA将为您创建所有条件格式(对于当前Selection)。这个例子可以达到数十亿。通过使用更多条目扩展Array来继续增加3的幂。

Sub CreateConditionalsForFormatting()

    'add these in as powers of 3, starting at 1 = 10^0
    Dim arr_markers As Variant
    arr_markers = Array("", "k", "M", "B")

    For i = UBound(arr_markers) To 0 Step -1

        With Selection.FormatConditions.Add(xlCellValue, xlGreaterEqual, 10 ^ (3 * i))
            .NumberFormat = "0" & Application.WorksheetFunction.Rept(",", i) & " "" " & arr_markers(i) & """"
            .StopIfTrue = False
        End With

    Next

End Sub

我更改了StopIfTrue值,这样就不会破坏可能存在的其他条件格式。如果最大条件位于顶部(首先添加),则该NumberFormat保持不变。默认情况下,这些是使用StopIfTrue = True创建的。如果您在这些单元格上没有任何其他条件格式,这是一个没有实际意义的点。