将文件大小从字节转换为Kb或Mb

我有大量的不同值的行,从1000到100万。

这是以字节为单位的数据,我需要分别将其转换为Kb或Mb。

我可以将所有的值除以1M,并获得所有的数据EN MB,但我想有在kb和Mb的数据。

我尝试使用MODfunction,但不会做伎俩,因为所有的数字将被1K和1M整除,所以我有点卡住了!

这里是我得到的数据的一个样本:

16000000 220000 2048000 2048000 230000 16000000 230000 16000000 220000 230000 

所以我需要的是,如果该单元格包含6个零,然后除以1M或如果该单元格包含3个由1000分开的零。

为了获得不同的数据,我将在每个结果上添加连接。

如果你正在寻找一些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公式,则可以使用此函数(A1中的原始值),将此公式放在另一列(例如列B)

 =IF(A1>1000000,A1/1000000,A1/1000) 

或串联:

 =IF(A1>1000000,CONCATENATE(A1/1000000," Mb"),CONCATENATE(A1/1000," Kb")) 

这是你正在寻找的function:

 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 

我会避免改变自己的数字,并使用数字格式。 如果你使用函数或macros来修改数字,那么你将不能再例如。 总结起来。

这个数字格式正是你所需要的,但是保持实际的数字不变,以字节为单位,所以你仍然可以在公式中使用它们:

 [>1000000]0,,"Mb";[>1000]0,"kb";0"b" 

请注意,这可能是与环境语言相关的。 对于匈牙利地区的设置,必须使用空格而不是逗号:

 [>1000000]0 "Mb";[>1000]0 "kb";0"b" 

每个空格/逗号所做的是从最后“隐藏”三位数字。

对于任何数字n ,应用这个

 If n Mod 1000 = 0 Then n = n / 1000 End If 

两次。 在第一次运行它将转换成数以百计,成千上万单位。 在第二次运行时,它将把任何数千个单位转换成单位。