是否可以使用某些指标后缀表示法在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
答案 0 :(得分:2)
根据link by @Vasily,您只能使用条件格式获得所需的结果。这很好,因为这意味着所有您的值都存储为数字而不是文本和数学工作正常。
总体步骤:
条件格式用于设置列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
创建的。如果您在这些单元格上没有任何其他条件格式,这是一个没有实际意义的点。