2016-10-07 87 views
4

我已經獲得了大量具有不同值的行,從1000到1,000,000。將文件大小從字節轉換爲Kb或Mb

這是以字節爲單位的數據,我需要分別將它轉換爲Kb或Mb。

我可以將所有的值除以1M,並獲得所有的數據EN MB,但我想有kb和Mb的數據。

我試過使用MOD功能,但不會做伎倆,因爲所有的數字都將被1K和1M整除,所以我有點卡住了!

這裏是我得到的數據樣本:

16000000 
220000 
2048000 
2048000 
230000 
16000000 
230000 
16000000 
220000 
230000 

所以我需要的是,如果單元格中包含6個零,然後用1M的分割或單元格包含3個0 1000

devide

我將添加串聯到每個單獨的結果,以獲得數據區分。

+0

是不是重置0的?16000000/1000000 = 16 –

+0

@Nathan_Sav是的,這將是16Mb,這是我想要顯示在電子表格上,而不是16M字節 –

+0

我不會通過公式或宏實際更改值。使用自定義數字格式通常是一個更好的主意,它爲您提供了更多的自由度,並使得未來的計算更加容易,同時提供了所需的可讀性。 – vacip

回答

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 

如果您正在尋找您可以使用此功能(在A1原始值)的Excel的公式,把這個公式另一列(例如列B)

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

或級聯:

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

這是它的伴侶!輝煌!謝謝!......所有其他答案都很棒,但你的頭腦正是我腦海中的東西,但卻無法投入代碼! –

0

對於任何數量的n,應用此

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

兩次。在第一次運行時,它會將數百萬和數千個單位轉換成單位。在第二次運行時,它會將任何數千個單位轉換成單位。

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

請注意,自1998年以來,千兆字節,兆字節等轉換的IEC(實際ISO)標準爲1000. 1024被稱爲kibibyte,mebibyte等。 – vacip

+0

@vacip:Thx對於這一點,顯然我已經很老了,我瞭解到之前並沒有最微弱的線索!^^ – R3uK

+1

是的,幾年前這對我來說也是一個令人震驚的發現......有趣的部分是,現在已經完全混淆了。硬件製造商通常使用1000,而軟件工程師通常使用1024(因此,您購買1TB硬盤,並在機器中彈出時獲得更少(931 GB))。 – vacip

2

我會避免改變數字本身,並使用數字格式來代替。如果你使用函數或宏來修改數字,那麼你將不能再例如。總結它們。

這個數字格式不正是你所需要的,但使實際數字不變,以字節爲單位,所以你仍然可以在公式中使用它們:

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

注意,這可能是環境與語言有關。對我來說,與匈牙利區域設置,空間必須改用逗號:

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

什麼空間/逗號所做的是每個人的「隱藏」從最終的三個數字。

相關問題