Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 是否可以使用公制“;k";excel中的符号?_Vba_Excel_Formatting - Fatal编程技术网

Vba 是否可以使用公制“;k";excel中的符号?

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 = "

是否可以在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
函数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”
  • 等等,不管你想要多少
自动化,如果您不想整天单击和键入,下面是一些VBA,它将为您创建所有条件格式(对于当前的
选择
)。这个例子涉及数十亿美元。通过使用更多条目扩展
数组
,继续增加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,我将你的链接转化为一个通用帮助器,它使用条件格式来决定将数字放入哪一组。在将单元格值作为字符串丢失之前,最好先考虑使用数字格式。