Vba 是否可以使用公制“;k";excel中的符号?
是否可以在Excel中使用一些度量后缀符号: 如果我写1000,单元格显示Vba 是否可以使用公制“;k";excel中的符号?,vba,excel,formatting,Vba,Excel,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 = "
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
函数lecI(cadena)为双精度
u=右(卡德纳,1)
如果u=“k”,则
mult=1000
ElseIf u=“M”那么
mult=1000000
ElseIf u=“m”那么
mult=0.001
如果结束
lecI=Val(左(卡德纳,左(卡德纳)-1))*mult
端函数
函数wriI(num)作为字符串
如果num>1000000,则为'M
wriI=Str(整数(num/1000000,2))和“M”
ElseIf num>1000然后'k
wriI=Str(圆形(数字/1000,1))和“k”
ElseIf num<0.01则'm
wriI=Str(圆形(数字*1000,1))和“m”
其他:wriI=Str(num)
如果结束
基于,仅使用条件格式即可获得所需的结果。这很好,因为这意味着所有的值都存储为数字,而不是文本和数学,就像普通的一样
总体步骤:
- 为每个1000块创建一个新的条件格式,为该块应用数字格式
- 在顶部添加最大条件,使其先格式化
- 冲洗并重复,以获得所有您想要的
C
的样式,该列只是十次幂不同的随机数据。它与列D
相同,只是样式不同
数字格式非常简单,因为它们与相同
- 一个=
0”“
- 千=
0,“k”
- 百万=
0,,“M”
- 等等,不管你想要多少
选择
)。这个例子涉及数十亿美元。通过使用更多条目扩展数组
,继续增加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
创建的。如果这些单元格上没有任何其他条件格式,这是一个没有实际意义的问题。看到这一点,OP用完美的数字创建字符串后,他至少可以很好地将它们格式化以创建函数字符串<代码>格式(num,“#,##0”)。或者,他可以使用Range.NumberFormat
方法,至少具有函数编号。OFF/Rant:“这被称为mosqear,它既不是蚊子也不是熊。”/匈牙利谚语/@Vasily,我将你的链接转化为一个通用帮助器,它使用条件格式来决定将数字放入哪一组。在将单元格值作为字符串丢失之前,最好先考虑使用数字格式。