2016-10-07 3 views
4

Ich habe eine große Anzahl von Zeilen mit unterschiedlichen Werten, von 1000 bis 1.000.000.Konvertieren von Dateigrößen von Bytes in Kb oder Mb

Das sind Daten, die mir in Bytes gekommen sind und ich muss es in Kb oder Mb konvertieren.

Ich könnte alle Werte durch 1M teilen und alle Daten in Mb bekommen, aber ich möchte die Daten in kb und Mb haben.

Ich versuchte mit der MOD-Funktion, aber das wird nicht den Trick tun, da alle Zahlen durch 1K und 1M teilbar sein werden, also bin ich ein bisschen fest!

hier ist ein Beispiel für die Daten, die ich erhalten:

16000000 
220000 
2048000 
2048000 
230000 
16000000 
230000 
16000000 
220000 
230000 

so, was ich brauche, ist, dass, wenn die Zelle dann 6 Nullen enthält durch 1M teilen oder wenn die Zelle 3 Nullen devide enthält von 1000.

Ich werde zu jedem einzelnen Ergebnis Verkettung hinzufügen, um die Daten differenziert zu erhalten.

+0

Ist das nicht replays die 0?16000000/1000000 = 16 –

+0

@Nathan_Sav ja, und das wäre 16MB, was ich in der Tabelle angezeigt werden möchte, nicht 16M Bytes –

+0

Ich würde nicht tatsächlich die Werte über Formel oder Makro ändern. Die Verwendung eines benutzerdefinierten Zahlenformats ist im Allgemeinen eine bessere Idee, es gibt Ihnen mehr Freiheit und ermöglicht einfachere zukünftige Berechnungen, während die erforderliche Lesbarkeit bereitgestellt wird. – vacip

Antwort

3

Wenn Sie für einige VBA-Code suchen Sie könnten diese Funktion:

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 

Wenn Sie eine Excel-Formel suchen Sie diese Funktion (Originalwert in A1) verwenden können, setzen Sie diese Formel in eine andere Spalte (zum Beispiel Spalte B)

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

oder mit Verkettungs:

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

das war es Kumpel! .. brilliant! danke! ... all die anderen Antworten sind toll, aber deins ist genau das, was ich in meinem Kopf hatte, aber ich konnte es nicht programmieren! –

0

für eine beliebige Anzahl n gelten diese

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

zweimal. Beim ersten Durchlauf werden Millionen in Tausende und Tausende in Einheiten konvertiert. Beim zweiten Durchlauf werden tausende in Einheiten umgewandelt.

5

Dies ist die Funktion, die Sie suchen:

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 

Verwenden Sie es einfach so:

Private Sub Test_SizeInStr() 
    MsgBox SizeInStr(1000000) 
End Sub 
+1

Bitte beachten Sie, dass seit 1998 die IEC (praktisch ISO) Standard für Kilobytes, Megabytes etc. Konvertierung 1000 ist. 1024 heißt Kibibyte, Mebibyte usw. – vacip

+0

@Vacip: Thx dafür, anscheinend bin ich schon ziemlich alt, habe ich gelernt vorher und hatte nicht den leisesten Hinweis! ^^ – R3uK

+1

Ja, das war eine schockierende Entdeckung für mich auch vor ein paar Jahren zurück ... Der lustige Teil ist, dass jetzt totale Verwirrung herrscht. Hardwarehersteller verwenden im Allgemeinen 1000, während Softwareingenieure normalerweise 1024 verwenden (daher kaufen Sie eine 1TB HDD und erhalten weniger (931 GB), wenn Sie sie in Ihr Gerät stecken). – vacip

2

ich vermeiden würde die Zahlen sich verändern und ein Zahlenformat stattdessen verwenden. Wenn Sie eine Funktion oder ein Makro verwenden, um die Nummer zu ändern, werden Sie nicht mehr in der Lage sein, z. fasse sie zusammen.

Das Zahlenformat ist genau das, was Sie brauchen, lässt aber die tatsächlichen Zahlen unberührt, in Bytes, so können sie nach wie vor in Formeln verwenden:

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

Beachten Sie, dass diese Umgebung sprachabhängig sein kann.

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

Was Raum/Komma tut, ist jeder von ihnen „versteckt“ drei Stellen vom Ende: Für mich mit ungarischen regionalen Einstellungen, Räume müssen statt Komma verwendet werden.

Verwandte Themen