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