是否可以在 excel 中使用公制 "k" 符号?

Is it possible to use metric "k" notations in excel?

是否可以在 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

基于,您可以仅使用条件格式获得所需的结果。这很好,因为这意味着所有 您的值都存储为数字而不是文本,并且数学工作正常

总体步骤:

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

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

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

相同
  • 个 = 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 创建的。如果您在这些单元格上没有任何其他条件格式,那么这是一个有争议的问题。