Aufrunden von Speicherkapazität
 |
Betrifft: Aufrunden von Speicherkapazität
von: Riman
Geschrieben am: 13.10.2014 14:50:20
Hallo,
habe die Spalte
Gesamter physischer Speicher
511,48 MB
3.063,03 MB
4.001,15 MB
255,43 MB
503,36 MB
503,36 MB
1.909,75 MB
503,45 MB
1.909,75 MB
1.909,75 MB
Möchte das die Speicherkapazittät aufgerundet werden.
Bsp.: von 0 bis 512 soll stehen=> 512 MB
Problem ist, dass in die Zellen, die Zahlen noch das Bezeichung MB haben.
Wie kann ich mit VBA die Spalte einordnen, also aufrunden auf die Zahlen, zb.
512 MB
1024 MB
2048 MB
usw...
Also mit der Quellcode hat es leider nicht funktiniert :(
Sub HaputspeichFormatierung()
'
' CPU_Geschwindkeit_Ersätzen Makro
' 561-562-563-564-565=566 331-332=333
'
AbisZ = Sheets(1).Range("I2").End(xlDown).Row
For i = 1 To AbisZ
W = Sheets(1).Cells(i, 9).Value
'Wr = Int(W + 0.1)
Select Case W
Case 0 To 514
Sheets(1).Cells(i, 9).Value = 512
Case 501 To 1024
Sheets(1).Cells(i, 9).Value = 1024
End Select
Next
End Sub
Betrifft: AW: Aufrunden von Speicherkapazität
von: yummi
Geschrieben am: 13.10.2014 15:01:10
Hallo Riman,
kannst du auch ohne VBA machen:
=VRUNDEN(LINKS(D3;LÄNGE(D3)-2);2)
In D3 steht in dem Fall dein Ausgangswert
Gruß
yummi
Betrifft: AW: Aufrunden von Speicherkapazität
von: Hajo_Zi
Geschrieben am: 13.10.2014 15:02:10
Warum VBA?
Tabelle1
| A | B |
1 | 511,48 MB | 512 MB |
2 | 3.063,03 MB | 3072 MB |
3 | 4.001,15 MB | 4096 MB |
4 | 255,43 MB | 512 MB |
5 | 503,36 MB | 512 MB |
6 | 503,36 MB | 512 MB |
7 | 1.909,75 MB | 2048 MB |
8 | 503,45 MB | 512 MB |
9 | 1.909,75 MB | 2048 MB |
10 | 1.909,75 MB | 2048 MB |
verwendete Formeln | |
Zelle | Formel | Bereich | N/A |
B1:B10 | =AUFRUNDEN(LINKS(A1;LÄNGE(A1)-2)*1/512;0)*512 &" MB" | | |
Excel-Inn.de |
Hajo-Excel.de |
XHTML-Tabelle zur Darstellung in Foren, einschl. der neuen Funktionen ab Version 2007 |
Add-In-Version 18.17 einschl. 64 Bit |

Betrifft: AW: Aufrunden von Speicherkapazität
von: Daniel
Geschrieben am: 13.10.2014 15:05:57
HI
liste in einer Hilfsspalte (z.B. Spalte X) die gerundeten MB-Werte auf
(aufsteigende sortiert, beginnend mit 0)
0
512
1024
2048
usw...
wenn in A1 der ungerundete MB-Wert steht, kannst du mit folgender Formel den passenden gerundeten MB-WErt ermitteln:
=Index(X:X;Vergleich(A1;X:X;1)+1)
zur Erläuterung: die Vergleichsfunktion ermittelt die Zeilennummer des nächstkleineren Wertes, da du den nächstgrösseren brauchst, wird einfach 1 zur Zeilennummer hinzuaddiert.
problematisch wären hier nur genaue Treffer, dh auch bei genau 512 MB würde auf 1024 aufgerundet.
wenn das nicht passieren soll:
=Index(X:X;Vergleich(A1;X:X;1)+(SVerweis(A1;X:X;1;1)
hier wird dann auf genaue Übereinstimmung geprüft, so genau 512 nicht aufgerundet wird.
Gruß Daniel
Betrifft: AW: Aufrunden von Speicherkapazität
von: RPP63
Geschrieben am: 13.10.2014 15:06:46
Hallo!
Etwas in dieser Richtung?
| A | B | C |
1 | 511,48 MB | 511,48 | 512 |
2 | 3.063,03 MB | 3063,03 | 3072 |
3 | 4.001,15 MB | 4001,15 | 4096 |
4 | 255,43 MB | 255,43 | 0 |
5 | 503,36 MB | 503,36 | 512 |
6 | 503,36 MB | 503,36 | 512 |
7 | 1.909,75 MB | 1909,75 | 2048 |
8 | 503,45 MB | 503,45 | 512 |
9 | 1.909,75 MB | 1909,75 | 2048 |
10 | 1.909,75 MB | 1909,75 | 2048 |
Zelle | Formel |
B1 | =LINKS(A1;LÄNGE(A1)-3)^1 |
C1 | =RUNDEN(B1/512;0)*512 |
Gruß, Ralf
Betrifft: ... und ja, es ist AUFRUNDEN() statt RUNDEN() kwT
von: RPP63
Geschrieben am: 13.10.2014 15:11:21
... und ja, es ist AUFRUNDEN() statt RUNDEN()
Betrifft: AW: Aufrunden von Speicherkapazität
von: Riman
Geschrieben am: 13.10.2014 15:28:41
Gibt es auch eine Lösung per VBA, weil meine Tabelle mehrere VBA Schritte durchführt... und ich das gerne per VBA haben möchte.
Betrifft: AW: Aufrunden von Speicherkapazität
von: Daniel
Geschrieben am: 13.10.2014 16:01:49
HI
das geht prinzipell schon mit deinem Code.
da sind halt nur ein paar Fehler drin.
zunächst einmal müsste man wissen, ob in den Zellen
a) eine Zahl steht (511,48) und dann das MB durch das zahlenformat hinzugefügt wird oder in einer seperaten Spalte steht
b) tatsächlich der Text "511,48 MB" steht
im zweiten Fall müsstest du erst den Text noch in eine Zahl wandeln:
W = CDbl(Replace(Sheets(1).Cells(i, 9).Value, " MB", "")
desweiteren sollten sich die Bereiche die du da angibst im Select Case nicht überlappen.
für den Ersten Fall ist deine Grenze 514, der zweite Fall soll aber schon ab 501 beginnen, das ist Unsinn.
Ich würde hier die Fälle so unterscheiden:Select Case W
Case Is <= 512
Sheets(1).Cells(i, 9).Value = 512
Case Is <= 1024
Sheets(1).Cells(i, 9).Value = 1024
Case Is <= 2048
Sheets(1).Cells(i, 9).Value = 2048
Case Else
Sheets(1).Cells(i, 9).Value = "Verdammt gross"
End Select
bei Select Case ist es so, dass nach der ersten zutreffenen Bedinung abgebrochen wird.
dh wenn <=512 zutrifft, wird das <=1024 nicht mehr ausgeführt (obwohl es eigentlich wahr ist)
Gruß Daniel
Betrifft: AW: Aufrunden von Speicherkapazität
von: Riman
Geschrieben am: 14.10.2014 08:56:21
Hallo Daniel,
dein Code gefällt mir sehr und ist auch sehr gut zu verstehen.
Also beim öffnen der Datei, hat die Spalte I die Format "Standard"
Hab es dann in Text umgewandelt und dann dein Code laufen lassen...
Fehler gibt nur bei der Zeile W = CDbl(Replace(Sheets(1).Cells(i, 9).Value, " MB", "")
"Typen unverträglich"
Soll ich die Spalte davor in Text oder in Zahl formatiren??
Danke
Gruß Riman
Betrifft: AW: Aufrunden von Speicherkapazität
von: Daniel
Geschrieben am: 14.10.2014 09:21:50
Hi
das nachträgliche Formatieren bringt nicht viel.
Ich sollte wissen, was tatsächlich in der Zelle drin steht, wenn der Fehler auftritt.
Tritt der Fehler schon beim ersten Schleifendruchlauf auf oder erst später?
Wie ist die Variable W deklariert?
am besten ist, du lädst mal deine Datei hoch.
Gruß Daniel
Betrifft: AW: Aufrunden von Speicherkapazität
von: Riman
Geschrieben am: 14.10.2014 09:42:21
https://www.herber.de/bbs/user/93151.xlsx
Betrifft: AW: Aufrunden von Speicherkapazität
von: Daniel
Geschrieben am: 14.10.2014 09:55:59
Hi
wenn ich versuche in der Datei das Marko zu starten passiert nichts.
Es kommt keine Fehlermeldung, aber es passiert auch nichts.
Kannst du mir sagen woran das liegt?
Gruß Daniel
Betrifft: AW: Aufrunden von Speicherkapazität
von: Riman
Geschrieben am: 14.10.2014 10:06:10
Keine Ahung, versuch mal einfach dein Code, auf die Spalte einzupassen.
Danke
Betrifft: Danke für dein Desinteresse! :-[ owT
von: Luc:-?
Geschrieben am: 14.10.2014 12:13:44
:-?
Betrifft: ArchivNachtrag
von: Luc:-?
Geschrieben am: 15.10.2014 17:58:57
Riman
:-?
Betrifft: AW: ArchivNachtrag
von: Riman
Geschrieben am: 16.10.2014 10:50:03
Danke dir Sehr Luc:-?
Betrifft: AW: Aufrunden von Speicherkapazität
von: Daniel
Geschrieben am: 14.10.2014 11:21:20
Sub HaputspeichFormatierung()
Dim AbisZ As Long
Dim W As Double
AbisZ = Sheets(1).Range("A2").End(xlDown).Row
For i = 2 To AbisZ
W = CDbl(Replace(Sheets(1).Cells(i, 1).Value, " MB", ""))
Select Case W
Case 0 To 512
Sheets(1).Cells(i, 1).Value = 512
Case 512 To 1024
Sheets(1).Cells(i, 1).Value = 1024
End Select
Next
End Sub
Betrifft: Die mögliche ZellFormel (mit UDF) ...
von: Luc:-?
Geschrieben am: 13.10.2014 16:59:56
…B1[:B10]:=VRUNDEN(AUFRUNDEN(--Splint(WECHSELN(A1;".";"");;1;1);0);512)
…kann in eine VBA-SubProzedur wie folgt eingebunden wdn (noch auf deine speziellen Verhältnisse anzupassen!):
Sub MB_Runden()
Const adRelBer$ = "A1:A10"
Dim ix As Long, avRelBer, vKap, xW As Variant, relBer As Range, wf As WorksheetFunction
Set wf = WorksheetFunction
Set relBer = Range(adRelBer): avRelBer = wf.Transpose(relBer)
ReDim vKap(UBound(avRelBer) - LBound(avRelBer))
For Each xW In avRelBer
vKap(ix) = wf.MRound(wf.RoundUp(Split(Replace(xW, ".", ""))(0), 0), 512)
ix = ix + 1
Next xW
relBer = wf.Transpose(vKap): relBer.NumberFormat = "#.##0\ \M\B"
Set relBer = Nothing: Set wf = Nothing
End Sub
Gruß, Luc :-?
Besser informiert mit …
Betrifft: Falls auch reine 0-Werte berücksichtigt wdn ...
von: Luc:-?
Geschrieben am: 13.10.2014 18:43:39
…sollen, Riman,
müsste (bzw könnte) die genannte Fml (bei Verkürzung durch Einsatz der ursprünglichen als benannte Fml) allerdings wie folgt lauten:
B1[:B10]:=GANZZAHL(MAX(Runden512MB;512/(1+512*(Runden512MB=0))))
…für Runden512MB: =VRUNDEN(AUFRUNDEN(--Splint(WECHSELN(A1;".";"");;1;1);0);512)
Der entsprd Teil der SubProzedur sähe dann so aus:
For Each xW In avRelBer
vKap(ix) = wf.MRound(wf.RoundUp(Split(Replace(xW, ".", ""))(0), 0), 512)
vKap(ix) = wf.Max(vKap(ix), 512 \ (1 + 512 * Abs(vKap(ix) = 0))): ix = ix + 1
Next xW
Das setzt natürlich voraus, dass stets auf ein Vielfaches von 512 aufgerundet wdn soll!
Luc :-?
Betrifft: AW: nochmal ne grundsätzliche Verständnis
von: Daniel
Geschrieben am: 13.10.2014 17:11:42
frage:
auf was soll denn aufgerundet werden:
a) ein vielfaches von 512 (512-1024-1536-2048-2560-...
b) die 2er-Potzenzreihe ab 2^9 (512-1024-2048-4096-8192...
c) auf eine andere Reihe, die sich nicht berechnen lässt sondern die du vorgibst.
Gruß Daniel
Beiträge aus den Excel-Beispielen zum Thema "Aufrunden von Speicherkapazität "