Microsoft Excel

Herbers Excel/VBA-Archiv

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

 AB
1511,48 MB512 MB
23.063,03 MB3072 MB
34.001,15 MB4096 MB
4255,43 MB512 MB
5503,36 MB512 MB
6503,36 MB512 MB
71.909,75 MB2048 MB
8503,45 MB512 MB
91.909,75 MB2048 MB
101.909,75 MB2048 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


GrußformelHomepage


  

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?

 ABC
1511,48 MB511,48512
23.063,03 MB3063,033072
34.001,15 MB4001,154096
4255,43 MB255,430
5503,36 MB503,36512
6503,36 MB503,36512
71.909,75 MB1909,752048
8503,45 MB503,45512
91.909,75 MB1909,752048
101.909,75 MB1909,752048

ZelleFormel
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 "