Excel Punkt durch Komma ersetzen - Performance

Hallo liebe Gemeinde.

Ich habe folgenden Excelcode „zusammengeschustert“:

Sub Dateninput_starten()

'Dateizuordnung Pfad
Dim strPfad As String
strPfad = ThisWorkbook.Path

'IF-Abfrage für Fühler 1
Fühler1:

If Dir(strPfad & „“ & „Messdaten“ & „“ & „F1.txt“) = „“ And Worksheets(„Grunddaten_Parameter“).Range("$C$60") = „-“ Then GoTo Fühler2:

If Dir(strPfad & „“ & „Messdaten“ & „“ & „F1.txt“) = „“ And Worksheets(„Grunddaten_Parameter“).Range("$C$60") „-“ Then
MsgBox „Datei F1 nicht vorhanden.“
Else

If Dir(strPfad & „“ & „Messdaten“ & „“ & „F1.txt“) „“ And Worksheets(„Grunddaten_Parameter“).Range("$C$60") = „-“ Then
MsgBox „Bitte Fühler 1 benennen oder F1.txt löschen.“

Else

With Worksheets(„Dateninput“).QueryTables.Add(Connection:= _
„TEXT;“ & strPfad & „“ & „Messdaten“ & „“ & „F1.txt“, Destination:= _
Range(„Dateninput!$A$31“))
.Name = „F1“
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlOverwriteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = False
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 2
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = True
.TextFileColumnDataTypes = Array(xlDMYFormat, xlSkipColumn, xlGeneralFormat, xlTextFormat)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False

'Punkte ersetzen
Dim a As Long
Dim arngZelle As Range, arngBereich As Range
a = Worksheets(„Dateninput“).Cells(Rows.Count, 3).End(xlUp).Row
Set arngBereich = Worksheets(„Dateninput“).Range(„C31“, „C“ & a) 'Bereich hier ändern
For Each arngZelle In arngBereich
arngZelle.Value = Application.WorksheetFunction.Substitute(arngZelle, „.“, „,“) 'Suchen / Ersetzen ändern
Next

End With

End If
End If
End Sub

Der Code macht was er soll - er kopiert mir die Messdaten aus einem Textdokument dort hin wo er soll und ersetzt in einer bestimmten spalte alle Punkte durch Kommas.

Das Problem ist nur, dass das ganze extrem lange dauert. Ich lade manchmal bis zu 60.000 Zeilen rein. Mir ist bewusst, dass das viel ist. Kennt jemand eine effektivere Methode die Punkte zu substituieren? Vielleicht eine die schneller ist?
Oder gibt es eine Möglichkeit Excel mehr Systemressourcen zuzuteilen?

Bin über jede Hilfe dankbar.

Viele Grüße,
Friedrich

Grüezi Friedrich

…ich dachte mir schon, dass dieses Thema noch aktuell wird… :wink:

'Punkte ersetzen
Dim a As Long
Dim arngZelle As Range, arngBereich As Range
a = Worksheets(„Dateninput“).Cells(Rows.Count,
3).End(xlUp).Row
Set arngBereich = Worksheets(„Dateninput“).Range(„C31“, „C“ &
a) 'Bereich hier ändern
For Each arngZelle In arngBereich
arngZelle.Value =
Application.WorksheetFunction.Substitute(arngZelle, „.“, „,“)
'Suchen / Ersetzen ändern
Next

Das Problem ist nur, dass das ganze extrem lange dauert. Ich
lade manchmal bis zu 60.000 Zeilen rein. Mir ist bewusst, dass
das viel ist. Kennt jemand eine effektivere Methode die Punkte
zu substituieren? Vielleicht eine die schneller ist?

Nimm mal anstelle der Zeilen oben diese hier:

 With Worksheets("Dateninput")
 .Range("C31", "C" & .Cells(.Rows.Count, 3).End(xlUp).Row).Replace ".", ","
 End With

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hallo.

Das Problem ist nur, dass das ganze extrem lange dauert.

Ja, kennen wir :frowning:

Ich lade manchmal bis zu 60.000 Zeilen rein.
Mir ist bewusst, dass das viel ist.
Kennt jemand eine effektivere Methode die Punkte
zu substituieren?

mit Excel dauert so was eben … elendig

Vielleicht eine die schneller ist?

Ich nehme einen schnellen Hexeditor und
darin „suchen & ersetzen“.

Das geht dann in Bruchteilern einer Sekunde.

Oder gibt es eine Möglichkeit Excel mehr Systemressourcen
zuzuteilen?

Ich denke, das Problem ist die extrem umständliche Art
auf die Daten zuzugreifen.
Gruß Uwi

hallo Uwi,

Ich lade manchmal bis zu 60.000 Zeilen rein.
Mir ist bewusst, dass das viel ist.
Kennt jemand eine effektivere Methode die Punkte
zu substituieren?

mit Excel dauert so was eben … elendig

das ist mir zu allgemein. Eingebaute Excelformeln an sich sind schon sehr schnell.

Mit Vba da ranzugehen geht auch aber Vba ist viel langsamer, Faktor 1000 Minimum.
Und dann gar noch Zelle für zelle einzeln abklappern, logisch dauert das ewig.

Aber wie von Thomas gesagt gleich das Ersetzen auf einen Bereich anwenden ist damit zigmal schneller.

Vielleicht eine die schneller ist?

Ich nehme einen schnellen Hexeditor und
darin „suchen & ersetzen“.

Das geht dann in Bruchteilern einer Sekunde.

Wird so sein. Dein Hexeditor ist in/mit einer programmiersprache geschrieben die sehr eng/nahe an den Bits oder Assemblercode ist.
Ich habe da sehr sehr flüchtig so eine Art zwiebelschalenmodell vor mir.

Ganz unten sind die Nuller und Einser, darüber Assembler, also Bytebefehle.
Ganz oben sind dann die ganz hohen „Hoch“-Sprachen.
Je weiter jetzt Excel oder Excel-Vba „oben“ hängt desto lahmer wird es weil es ja von Zwiebelschicht zu Zwiebelschicht immer erst mal umgewandelt werden muß.

Bitte keine genauen Nachfragen dazu :smile:) irgendwie ist das aber *sicher bin*

Oder gibt es eine Möglichkeit Excel mehr Systemressourcen
zuzuteilen?

Ich denke, das Problem ist die extrem umständliche Art
auf die Daten zuzugreifen.

Ja, die Schleife. Die kostet Zeit.

Versteh mich bitte richtig, ich will dir gar nicht widersprechen, hast ja vollkommen Recht mit der Schnelligkeitsvergleich Editor, Excel.
Aber da ich Excel mag konnte ich das dann doch nicht unkommentiert so stehen lassen *gg*

Gruß
Reinhard