Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1168to1172
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

Spaltenbereich in Array, umwandeln, zurückschreibe

Spaltenbereich in Array, umwandeln, zurückschreibe
Peter
Guten Abend
Mit Hilfe des Forums (vorallem Erich G.) kann ich Zahlen aus einem Spaltenbereich [BETRAG] (die teilweise ein komisches Textformat haben) in normale Zahlen umwandeln.
Aufgrund der Formel habe ich mir dazu den VBA Code geschrieben, der die Ausgangswerte mit den richtigen überschreibt.
Nun würde mich interessieren, ob die Auswertung beschleunigt werden kann, wenn der Spaltenbereich [BETRAG] einem Array übergeben wird und dann die einzelnen Werte im Array umgewandelt werden und letztendlich das umgewandelte Array zurückgeschrieben wird (anstelle der jetzigen Lösung).
Ist so was möglich? Wenn ja, wäre ich sehr daran interessiert, hier eine Lösung oder entsprechende Hinweise dazu zu erhalten.
Danke und Gruss, Peter
https://www.herber.de/bbs/user/71015.xls

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

Betreff
Benutzer
Anzeige
AW: Spaltenbereich in Array, umwandeln, zurückschreibe
10.08.2010 23:09:43
Uduuh
Hallo,
dürfte auf jeden Fall schneller sein.
Teste mal!
Sub Umwandeln()
'Zahlen mit einem Textformat z.B. 1.111,19 werden in normale Zahlen umgewandelt und
'anschliessend formatiert - NULL-Werte werden unterdrückt
'Beispielformel =WENN(ISTZAHL(A7);A7;1*WECHSELN(WECHSELN(A7;".";"");",";"."))
Dim myArray, lngI As Long
myArray = Range("BETRAG")
For lngI = 1 To UBound(myArray)
If IsNumeric(myArray(lngI, 1)) Then
' 'Zahl bleibt unverändert
Else
myArray(lngI, 1) = _
1 * WorksheetFunction.Substitute(WorksheetFunction.Substitute(myArray(lngI, 1), ".", "") _
, ",", ".")
End If
Next
Range("BETRAG") = myArray
End Sub
Gruß aus’m Pott
Udo

Anzeige
AW: Spaltenbereich in Array, umwandeln, zurückschreibe
10.08.2010 23:36:18
Peter
Hallo Udo
Grandios! Eindeutig schneller. Vielen Dank.
Gruss, Peter
zwei kleine Korrekturen
11.08.2010 07:50:31
Erich
Hi Udo und Peter,
die erste Korrektur betrifft nur einen Kommentar, ich finde sie aber ziemlich wichtig:
"Zahlen mit einem Textformat z.B. 1.111,19 werden in normale Zahlen umgewandelt" stimmt nicht.
Das sind vorher keine Zahlen, sondern Texte. Ich habe das dadurch ersetzt:
"Texte, die wie Zahlen aussehen, z.B. 1.111,19, werden in Zahlen umgewandelt"
Die zweite Korrektur sorgt dafür, dass nachher auch wirklich keine Texte mehr in dem Bereich stehen.
Die VBA-Fkt. IsNumeric prüft nicht, ob etwas numerisch ist,
sondern, ob etwas in eine Zahl umgewandelt werden kann.
Wenn in einer Zelle der Text 456 steht (nicht die Zahl 456), würde Udos Routine das nicht ändern,
denn IsNumeric("456") ist True. Den Text 456 kannst du nicht so wie eine Zahl formatieren.
Die WorksheetFunction IsNumber dagegen prüft wirklich, ob der Parameter eine Zahl ist.
WorksheetFunction.IsNumber("456") ergibt False.
Mein Vorschlag:

Option Explicit
Sub Umwandeln2()
'Texte, die wie Zahlen aussehen, z.B. 1.111,19, werden in Zahlen umgewandelt
'NULL-Werte werden unterdrückt
'Beispielformel =WENN(ISTZAHL(A7);A7;1*WECHSELN(WECHSELN(A7;".";"");",";"."))
Dim myArray, lngI As Long
Dim AWS As Object
Set AWS = Application.WorksheetFunction
myArray = Range("BETRAG")
For lngI = 1 To UBound(myArray)
If AWS.IsNumber(myArray(lngI, 1)) Then
'Zahl bleibt unverändert
Else
myArray(lngI, 1) = 1 * AWS.Substitute(AWS.Substitute( _
myArray(lngI, 1), ".", ""), ",", ".")
End If
Next
Range("BETRAG") = myArray
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: zwei kleine Korrekturen
11.08.2010 08:52:14
Peter
Hallo Erich
Danke vielmals für die wertvollen Hinweise!
Gruss, Peter

316 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige