我有大量的行,其中包含不同的值,从1000s到1,000,000s。
这是以字节为单位的数据,我需要将其转换为Kb或Mb。
我可以将所有值除以1M并获得所有数据和Mb,但我希望将数据分为kb和Mb。
我尝试使用MOD功能,但不会这样做,因为所有数字都可以被1K和1M整除,所以我有点卡住了!
这是我得到的数据样本:
16000000
220000
2048000
2048000
230000
16000000
230000
16000000
220000
230000
所以我需要的是,如果单元格包含6个零,则除以1M,或者如果单元格包含3个零,则除以1000.
我将为每个单独的结果添加连接,以便区分数据。
答案 0 :(得分:5)
这是您正在寻找的功能:
Public Function SizeInStr(ByVal Size_Bytes As Double) As String
Dim TS()
ReDim TS(4)
TS(0) = "b"
TS(1) = "kb"
TS(2) = "Mb"
TS(3) = "Gb"
TS(4) = "Tb"
Dim Size_Counter As Integer
Size_Counter = 0
If Size_Bytes <= 1 Then
Size_Counter = 1
Else
While Size_Bytes > 1
Size_Bytes = Size_Bytes / 1000
''Or
'Size_Bytes = Size_Bytes / 1024
Size_Counter = Size_Counter + 1
Wend
End If
SizeInStr = Format(Size_Bytes * 1000, "##0.0#") & " " & TS(Size_Counter - 1)
''Or
'SizeInStr = Format(Size_Bytes * 1024, "##0.0#") & " " & TS(Size_Counter - 1)
End Function
使用它就像这样:
Private Sub Test_SizeInStr()
MsgBox SizeInStr(1000000)
End Sub
答案 1 :(得分:3)
如果您要查找某些VBA代码,可以使用此功能:
Public Function yourFunction(ByVal number)
If number > 1000000 Then
'number as MB
yourFunction = number / 1000000
'or use the following to add MB
'yourFunction = (number / 1000000) & " Mb"
Else
'number in kB
yourFunction = number / 1000
'or use the following to add kB
'yourFunction = (number / 1000) & " Kb"
End if
End Function
如果您正在寻找Excel-Formula,您可以使用此函数(A1中的原始值),将此公式放在另一列(例如B列)中
=IF(A1>1000000,A1/1000000,A1/1000)
或连接:
=IF(A1>1000000,CONCATENATE(A1/1000000," Mb"),CONCATENATE(A1/1000," Kb"))
答案 2 :(得分:3)
我会避免更改数字本身,而是使用数字格式。如果您使用函数或宏来修改数字,那么您将无法再例如。总结一下。
这个数字格式完全符合您的需要,但保留实际数字不变,以字节为单位,因此您仍然可以在公式中使用它们:
[>1000000]0,,"Mb";[>1000]0,"kb";0"b"
请注意,这可能与环境语言有关。对于匈牙利语区域设置,必须使用空格而不是逗号:
[>1000000]0 "Mb";[>1000]0 "kb";0"b"
每个空格/逗号的作用是什么&#34;隐藏&#34;最后三位数。
答案 3 :(得分:0)
对于任何数字n
,请应用此
If n Mod 1000 = 0 Then
n = n / 1000
End If
两次。在第一次运行时,它将数百万转换为数千,而数千转换为单位。在第二次运行时,它会将任意数千个转换为单位。