Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1732to1736
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zahlenformat ändern mit Array

Zahlenformat ändern mit Array
05.01.2020 17:04:14
Barbara
Hallo
Kann man die Zahlenformate (Numberformat) aller Zellen eines Bereichs mit dem Format "#0" in "General" schneller umwandeln als in meinem Makro?
Ich habe zwei Varianten probiert:
1. Alle Zahlenformate in ein Array geben, die "#0" durch "General" ersetzen, und dann wieder in die Tabelle zurückgeben.
2. Jede Zelle einzeln prüfen und das Zahlenformat ändern.
Das Makro kann mit einer leeren Tabelle ausgeführt werden.

Sub ZahlenformatNeu()
Dim dDauerArr     As Double
Dim dDauerDirekt  As Double
'Zur Auswahl des gewünschten Bereichs
ActiveSheet.Range("A1:E100").Select     'Auswahl 500 Zellen
ActiveSheet.Range("A1:A500").Select     'Auswahl 500 Zellen
ActiveSheet.Range("A1:A10000").Select   'Auswahl 10000 Zellen
'    ActiveSheet.Range("A1:D10000").Select   'Auswahl 40000 Zellen
'Zum Testen der Laufzeit:
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
'Format ändern
Selection.Cells.NumberFormat = "#0"
dDauerArr = FormatÄndern_mit_Arrays         'Variante mit Arrays
Selection.Cells.NumberFormat = "#0"
dDauerDirekt = FormatÄndern_in_den_Zellen      'Variante Direkt
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
End Sub
Function FormatÄndern_mit_Arrays()
Dim arrFeld()
Dim lZeile      As Long
Dim lSpalte     As Long
Dim dSekunden   As Double
dSekunden = Timer
With Selection
ReDim arrFeld(1 To .Rows.Count, 1 To .Columns.Count)
'Die Zahlenformate aller Zellen in das Feld schaufeln
For lZeile = LBound(arrFeld, 1) To UBound(arrFeld, 1)
For lSpalte = LBound(arrFeld, 2) To UBound(arrFeld, 2)
arrFeld(lZeile, lSpalte) = Selection(lZeile, lSpalte).NumberFormat
Next lSpalte
Next lZeile
'Alle Zahlenformate "#0" in "General" umwandeln
For lZeile = LBound(arrFeld, 1) To UBound(arrFeld, 1)
For lSpalte = LBound(arrFeld, 2) To UBound(arrFeld, 2)
If arrFeld(lZeile, lSpalte) = "#0" Then arrFeld(lZeile, lSpalte) = "General"
Next lSpalte
Next lZeile
'Alle Zahlenformate in die Tabelle zurückstellen
For lZeile = LBound(arrFeld, 1) To UBound(arrFeld, 1)
For lSpalte = LBound(arrFeld, 2) To UBound(arrFeld, 2)
.Cells(lZeile, lSpalte).NumberFormat = arrFeld(lZeile, lSpalte)
Next lSpalte
Next lZeile
End With
FormatÄndern_mit_Arrays = Timer - dSekunden
End Function
Function FormatÄndern_in_den_Zellen()
Dim rZelle      As Range
Dim dSekunden   As Double
dSekunden = Timer
For Each rZelle In Selection.Cells
With rZelle
If .NumberFormat = "#0" Then .NumberFormat = "General"
End With
Next rZelle
FormatÄndern_in_den_Zellen = Timer - dSekunden
End Function
Bei 40.000 Zellen sind beide Varianten ca. gleich schnell.
Kann man vielleicht die Zahlenformate schnell ein ein Array kopieren und wieder zurück stellen?
Etwa so, wie man es auch mit Zellenwerten machen kann. Da sind Arrays ja klar im Vorteil gegenüber der Einzelbearbeitung der Zellen.
LG Barbara

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zahlenformat ändern mit Array
05.01.2020 17:24:59
Nepumuk
Hallo Barbara,
wenn alle Zellen in dem Bereich das selbe Zahlenformat haben dann liefert dir die NumberFormat-Eigenschaft das Format zurück. Hat nur eine Zelle ein anderes Format, liefert dir die Eigenschaft den Wert Null zurück. Mit anderen Worten, das geht nicht.
Gruß
Nepumuk
AW: Zahlenformat ändern mit Array
05.01.2020 17:47:39
onur
Wieso nicht so:
RangeXY.NumberFormat = "General"

AW: Zahlenformat ändern mit Array
05.01.2020 18:18:16
onur
Wenn sowieso alle Zellen im Bereich haben, warum nicht den ganzen Bereich auf einmal ändern?
Oder war das nur zum Testen gedacht?
Der Code hier braucht bei 40.000 Zellen 3,05 s für Einzelüberprüfung und 0,16 s um den ganzen Bereich zu ändern.
https://www.herber.de/bbs/user/134182.xlsm
Anzeige
AW: Zahlenformat ändern mit Array
06.01.2020 20:00:50
Barbara
Hallo
unglücklicherweise habe ich nicht deutlich genug erwähnt, dass die Zellen unterschiedliche Formate haben können. Denn daraus ergibt sich erst die Problematik.
Mein Beispiel hat diesen Umstand in der Versuchsanordnung nicht berücksichtigt.
Onur, für die Einzelbearbeitung, wo Du 3,05 s brauchst liege ich mit 8 s weit hinten. Aber das liegt vielleicht an meiner lahmen Kiste. Andererseits bin ich mit der Einzelüberprüfung in 0,01 s fertig. Offensichtlich gibt es keine schnellere Methode.
Vielen Dank für Eure Hilfe.
LG, Barbara
PS: Leider funktioniert bei dieser Frage die Email-Benachrichtigung vom Forum bei eingegangener Antwort nicht. Daher habe ich erst jetzt Eure Antworten gefunden.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige