Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
712to716
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
712to716
712to716
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Text-Import Code Optimierung möglich?

Text-Import Code Optimierung möglich?
06.01.2006 09:32:35
Thias
Hallo Forumgemeinde,
ich habe vor einiger Zeit mit tatkräftiger Unterstützung des Forums einen Code für den automatischen Textimport gebastelt (siehe unten).
Das Makro funktioniert zwar einwandfrei, doch leider dauert der Import einer ca. 500kB großen Textdatei ca. 5 Minuten. Wenn ich die gleiche Datei über "-Daten -externe Daten importieren -Daten importieren" einlese, dauert das nicht mal eine Minute! Wie kommt das?
Mal ins Blaue geraten: Würde es einen Geschwindigkeitsvorteil geben, wenn ich erst nach dem Import der Daten den Punkt durch durch das Komma ersetzen würde, anstatt dies in der Schleife zu realisieren?
Vielleicht liegt es ja aber auch garnicht am einlesen, sondern an den anschließenden Code-Teil, wo ich die Daten noch mal nachbearbeite!
Vielleicht kann mir ja jemand einen Vorschlag machen, wie ich den Code schneller bekomme (sehr gerne auch ausprogrammiert - als Anfänger tue ich mich doch etwas schwer mit der Umsetzung von Tips).
Gruß Thias
------------------------------------------------------------------------------

Sub Rohdaten_Import()
Dim sFile As String, sText As String, sDir As String
Dim arrInput() As String, arrHelp() As String
Dim intI As Integer, intN As Integer, ende As Integer
rohdaten = "Rohdaten"
info = "Info"
'ChDir "Y:\Eigene Dateien\"
'Diese Zeile aktivieren für festen Pfad
sFile = Range("G3").Value
sDir = Range("G5").Value 'Diese Zeile deaktivieren, falls konstanter Pfad festgelegt wird
ChDir sDir 'Diese Zeile deaktivieren, falls konstanter Pfad festgelegt wird
If Dir(sFile) = "" Then
Beep
MsgBox "Datei wurde nicht gefunden!", , "Warnung!"
Exit Sub
End If
Worksheets(rohdaten).Activate
Application.ScreenUpdating = False
Worksheets(rohdaten).Range("A11:AK65536").ClearContents
Open sFile For Binary As #1
sText = Space(LOF(1))
Get #1, , sText
arrInput = Split(sText, vbCrLf)
Close #1
For intI = 0 To UBound(arrInput)
arrHelp = Split(Replace(Replace(arrInput(intI), Chr(9), ";"), ".", ","), ";")
For intN = 0 To UBound(arrHelp)
If IsNumeric(arrHelp(intN)) Then
Cells(intI + 11, intN + 2) = CDbl(arrHelp(intN))
End If
Next intN
Next intI
Cells.NumberFormat = "General"  '@ für Text, General für Standard, 0.0 für Zahlen mit einer Nachkommastelle
Application.ScreenUpdating = True
'----------------------------------- Maximum doppeln: Messreihe 1, 0°  -------------------------------
ende = Range("N65536").End(xlUp).Row + 1
Range("P11:P12", "Q11:Q12").Copy Range("N" & ende, "O" & ende)
ende = Range("P65535").End(xlUp).Row
Range("P12:Q" & ende).Cut
Range("P11").Select
ActiveSheet.Paste
'----------------------------------- Maximum doppeln: Messreihe 2, 0°  -------------------------------
ende = Range("R65536").End(xlUp).Row + 1
Range("T11:T12", "U11:U12").Copy Range("R" & ende, "S" & ende)
ende = Range("T65535").End(xlUp).Row
Range("T12:U" & ende).Cut
Range("T11").Select
ActiveSheet.Paste
'----------------------------------- Maximum doppeln: Messreihe 1, 120° ------------------------------
ende = Range("Z65536").End(xlUp).Row + 1
Range("AB11:AB12", "AC11:AC12").Copy Range("Z" & ende, "AA" & ende)
ende = Range("AB65535").End(xlUp).Row
Range("AB12:AC" & ende).Cut
Range("AB11").Select
ActiveSheet.Paste
'----------------------------------- Maximum doppeln: Messreihe 1, 240° ------------------------------
ende = Range("AH65536").End(xlUp).Row + 1
Range("AJ11:AJ12", "AK11:AK12").Copy Range("AH" & ende, "AI" & ende)
ende = Range("AJ65535").End(xlUp).Row
Range("AJ12:AK" & ende).Cut
Range("AJ11").Select
ActiveSheet.Paste
Range("A1").Select
MsgBox "Roh-Daten wurden importiert!", vbInformation, "Hinweis!"
Worksheets(info).Activate
End Sub

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

Betreff
Datum
Anwender
Anzeige
AW: Text-Import Code Optimierung möglich?
06.01.2006 10:21:47
Josef
Hallo Thias!
Ungetestet!
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub Rohdaten_Import()
Dim sFile As String, sText As String, sDir As String
Dim arrInput() As String, arrHelp() As String
Dim intI As Integer, intN As Integer, ende As Integer
Dim rohdaten As String, info As String

rohdaten = "Rohdaten"
info = "Info"

'ChDir "Y:\Eigene Dateien\"
'Diese Zeile aktivieren für festen Pfad

sFile = Worksheets(rohdaten).Range("G3").Value
sDir = Worksheets(rohdaten).Range("G5").Value 'Diese Zeile deaktivieren, falls konstanter Pfad festgelegt wird
ChDir sDir 'Diese Zeile deaktivieren, falls konstanter Pfad festgelegt wird

If Dir(sFile) = "" Then
  Beep
  MsgBox "Datei wurde nicht gefunden!", , "Warnung!"
  Exit Sub
End If

On Error GoTo ErrExit

With Application
  .ScreenUpdating = False
  .EnableEvents = False
  .Calculation = xlManual
  .DisplayAlerts = False
End With

With Worksheets(rohdaten)
  
  .Range("A11:AK65536").ClearContents
  .Range("A11:AK65536").NumberFormat = "General" '@ für Text, General für Standard, 0.0 für Zahlen mit einer Nachkommastelle
  
  Open sFile For Binary As #1
  sText = Space(LOF(1))
  Get #1, , sText
  arrInput = Split(sText, vbCrLf)
  Close #1
  
  For intI = 0 To UBound(arrInput)
    arrHelp = Split(Replace(Replace(arrInput(intI), Chr(9), ";"), ".", ","), ";")
    For intN = 0 To UBound(arrHelp)
      If IsNumeric(arrHelp(intN)) Then
        .Cells(intI + 11, intN + 2) = CDbl(arrHelp(intN))
      End If
    Next intN
  Next intI
  
  '----------------------------------- Maximum doppeln: Messreihe 1, 0° -------------------------------
  ende = .Range("N65536").End(xlUp).Row + 1
  .Range("P11:P12", "Q11:Q12").Copy .Range("N" & ende, "O" & ende)
  ende = .Range("P65535").End(xlUp).Row
  .Range("P12:Q" & ende).Cut .Range("P11")
  
  '----------------------------------- Maximum doppeln: Messreihe 2, 0° -------------------------------
  ende = .Range("R65536").End(xlUp).Row + 1
  .Range("T11:T12", "U11:U12").Copy .Range("R" & ende, "S" & ende)
  ende = .Range("T65535").End(xlUp).Row
  .Range("T12:U" & ende).Cut .Range("T11")
  
  '----------------------------------- Maximum doppeln: Messreihe 1, 120° ------------------------------
  ende = .Range("Z65536").End(xlUp).Row + 1
  .Range("AB11:AB12", "AC11:AC12").Copy .Range("Z" & ende, "AA" & ende)
  ende = .Range("AB65535").End(xlUp).Row
  .Range("AB12:AC" & ende).Cut .Range("AB11")
  
  '----------------------------------- Maximum doppeln: Messreihe 1, 240° ------------------------------
  ende = .Range("AH65536").End(xlUp).Row + 1
  .Range("AJ11:AJ12", "AK11:AK12").Copy .Range("AH" & ende, "AI" & ende)
  ende = .Range("AJ65535").End(xlUp).Row
  .Range("AJ12:AK" & ende).Cut .Range("AJ11")
  
  '-----------------------------------------------------------------------------------------------------
End With

ErrExit:

If Err.Number <> 0 Then
  MsgBox Err.Number & vbLf & Err.Description, 48, "Fehler"
Else
  MsgBox "Roh-Daten wurden importiert!", vbInformation, "Hinweis!"
End If

With Application
  .ScreenUpdating = True
  .EnableEvents = True
  .Calculation = xlAutomatic
  .DisplayAlerts = True
End With

End Sub


'******************************
'* Gruß Sepp
'*
'* Rückmeldung wäre nett!
'******************************

Anzeige
AW: Text-Import Code Optimierung möglich?
Thias
Hallo Sepp,
ich bin begeistert! Nun geht der Import in wenigen Sekunden von der Hand! Super! Vielen Dank!
Ich würde aber auch gerne verstehen, warum Deine Version so viel schneller ist. Die Schleife beim Einlesen ist ja anscheinend gleich geblieben.
Über eine Erklärung würde ich mich sehr freuen!
Gruß Thias
AW: Text-Import Code Optimierung möglich?
06.01.2006 11:33:51
Josef
Hallo Thias!
Am Einlesen selber kann man nicht viel machen, das geht aber ohnehin Ruckzuck!
Erstens habe ich die Berechnung, Bildschirmaktualisierung und die Erreignisse
"abgedreht" und dann statt mit "Select" und "Activate", die Werte direkt kopiert,
bzw. ausgeschnitten!
Gruß Sepp
Anzeige
AW: Text-Import Code Optimierung möglich?
06.01.2006 11:43:47
Thias
Danke für die kurze Erklärung. Dieser Tipp bringt auch in meinen anderen Makros deutliche Geschwindigkeitssteigerungen! 2 Daumen rauf!
Gruß Thias

286 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige