Live-Forum - Die aktuellen Beiträge
Datum
Titel
18.04.2024 18:04:29
18.04.2024 16:33:24
Anzeige
Archiv - Navigation
1708to1712
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

Text in Spalten - Performance

Text in Spalten - Performance
06.09.2019 09:02:58
Timo
Hallo zusammen,
ich nutze folgenden Code um Daten aus einer CSV Datei in eine Tabelle zu importieren.
Dies funktioniert auch wunderbar.
Allerdings benötigt mein Rechner dafür bei 6.700 Zeilen ca. 15 min..
Gibt es die Möglichkeit dies besser/schlanker zu gestalten.

Sub Volumenimport()
Dim QuellDatei As String        'Speicherort der Textdatei
Dim Zeile As Integer            'Laufvariable
Dim Inhalt As String            'Inhalt der Textdatei
Dim strDelimit$
Dim arrSrc
Application.ScreenUpdating = False
Application.DisplayAlerts = False
'Tabellenblatt aktivieren und leeren
ThisWorkbook.Worksheets("VolumeD").Activate
ActiveSheet.Range("A1:AP10000").ClearContentsy
'Startwert zuweisen
Zeile = 0
strDelimit = "," ' Trennzeichen der CSV-Datensätze
'QuellDatei ansprechen
QuellDatei = ThisWorkbook.Path & "\Volumen.csv"
'QuellDatei öffnen
Open QuellDatei For Input As #1
'Informationen in das Tabellenblatt eintragen
Do While Not EOF(1)     'Schleife bis DatenEnde
On Error Resume Next
'Inhalt der Quelldatei zeilenweise einlesen
Line Input #1, Inhalt
arrSrc = Split(Inhalt, strDelimit)
Cells(Zeile + 1, 1) = arrSrc(0)
Cells(Zeile + 1, 2) = arrSrc(1)
Cells(Zeile + 1, 3) = arrSrc(2)
Cells(Zeile + 1, 4) = arrSrc(3)
Cells(Zeile + 1, 5) = arrSrc(4)
Cells(Zeile + 1, 6) = arrSrc(5)
Cells(Zeile + 1, 7) = arrSrc(6)
Cells(Zeile + 1, 8) = arrSrc(7)
Cells(Zeile + 1, 9) = arrSrc(8)
Cells(Zeile + 1, 10) = arrSrc(9)
Cells(Zeile + 1, 11) = arrSrc(10)
Cells(Zeile + 1, 12) = arrSrc(11)
Cells(Zeile + 1, 13) = arrSrc(12)
Cells(Zeile + 1, 14) = arrSrc(13)
Cells(Zeile + 1, 15) = arrSrc(14)
Cells(Zeile + 1, 16) = arrSrc(15)
Cells(Zeile + 1, 17) = arrSrc(16)
Cells(Zeile + 1, 18) = arrSrc(17)
Cells(Zeile + 1, 19) = arrSrc(18)
Cells(Zeile + 1, 20) = arrSrc(19)
Cells(Zeile + 1, 21) = arrSrc(20)
Cells(Zeile + 1, 22) = arrSrc(21)
Cells(Zeile + 1, 23) = arrSrc(22)
Cells(Zeile + 1, 24) = arrSrc(23)
Cells(Zeile + 1, 25) = arrSrc(24)
Cells(Zeile + 1, 26) = arrSrc(25)
Cells(Zeile + 1, 27) = arrSrc(26)
Cells(Zeile + 1, 28) = arrSrc(27)
Cells(Zeile + 1, 29) = arrSrc(28)
Cells(Zeile + 1, 30) = arrSrc(29)
Cells(Zeile + 1, 31) = arrSrc(30)
Cells(Zeile + 1, 32) = arrSrc(31)
Cells(Zeile + 1, 33) = arrSrc(32)
Cells(Zeile + 1, 34) = arrSrc(33)
Cells(Zeile + 1, 35) = arrSrc(34)
Cells(Zeile + 1, 36) = arrSrc(35)
Cells(Zeile + 1, 37) = arrSrc(36)
Cells(Zeile + 1, 38) = arrSrc(37)
Cells(Zeile + 1, 39) = arrSrc(38)
Cells(Zeile + 1, 40) = arrSrc(39)
Cells(Zeile + 1, 41) = arrSrc(40)
Cells(Zeile + 1, 42) = arrSrc(41)
Zeile = Zeile + 1
Loop
'Quelldatei schliessen
Close #1
Columns("A:AP").Select
Selection.Replace What:="""", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

Es wäre toll wenn Ihr mir hierbei helfen könntet.
Gruß
Timo

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Beispieldatei?
06.09.2019 09:18:28
UweD
AW: Text in Spalten - Performance
06.09.2019 09:24:39
Daniel
Hi
Lese die Daten über Importfunktion Daten - Externe Daten - aus Text ein
Gruß Danirl
AW: Text in Spalten - Performance
06.09.2019 10:55:27
Timo
Hallo UweD,
anbei eine Beispiel Datei.
Ich konnte Sie nicht als CSV hochladen, daher im .txt Format.
https://www.herber.de/bbs/user/131880.txt
@Danirl: Mein Ziel ist es diesen Umweg in Zukunft zu ersparen. Trotzdem Danke für den Tip
Gruß
Timo
Deine Bedenken sind unberechtigt
06.09.2019 11:12:13
Daniel
Hi
sorry, warum beführchtest du einen Umweg?
1. alles was in Excel von Hand ausführen kann, kann man auch per Makro programmieren.
dh ob dein Makro jetzt eine Schleife ausführt, um jeden Wert einzeln auszulesen oder ob es die Importfunktion anstößt, ist egal.
für dich als Programmierer hat zweiteres den Vorteil, dass das Ausführen von Excelmenüfunktionen oft weniger Programmcode erfordert und zudem auch noch durch den Makrorecorder unterstützt wird und die Funkitionen in der Hilfe beschrieben sind.
2. Excel speichert die Einstellungen zu jedem Datenimport im Hintergrund ab.
dh für jedes wiederholte Importieren braucht man nur den Aktualisieren-Button zu drücken, fertig ist die Laube (dabei kann man einstellen, ob die Datei neu bestimmt werden soll oder ob die gleiche Datei immer wieder verwendet werden soll)
dh kein Umweg, sondern nur ein Klick und den brauchst du ja auch um das Makro zu starten.
auch wenn du den Import über ein Makro starten willst, wenn er einmal eingerichtet ist, dann reicht es, im Makro die Aktualisierung auszuführen, so sich das ganze auf einen einzigen einfachen Befehl reduziert.
Bitte da mal drüber nachdenken.
Gruß Daniel
Anzeige
AW: Deine Bedenken sind unberechtigt
06.09.2019 12:22:03
Timo
Hi Daniel,
ich bin ein VBA Beginner und versuche mich an meinem ersten Projekt.
Leider verstehe ich aktuell nur sehr einfachen Code, und sehe nicht auf Anhieb wie ich z.B. die Aufnahme des Rekorders so anpassen muss wie ich es benötige.
Die Fehlermeldungen durch den VBA Editor helfen mir leider auch nur bedingt.
Deshalb bitte ich hier um Hilfe und versuche aus den Antworten, bzw. dem neuen Code zu lernen.
Gruß
Timo
AW: Deine Bedenken sind unberechtigt
06.09.2019 13:42:59
Daniel
die erste Frage wäre, warum du VBA für eine Funktion verwendest, die in Excel implementiert ist und die du nur über einen Buttonklick aufrufen musst.
Gruß Daniel
Anzeige
AW: Deine Bedenken sind unberechtigt
06.09.2019 13:43:04
Daniel
die erste Frage wäre, warum du VBA für eine Funktion verwendest, die in Excel implementiert ist und die du nur über einen Buttonklick aufrufen musst.
Gruß Daniel
AW: Deine Bedenken sind unberechtigt
06.09.2019 15:55:17
Günther
Moin,
Als ich begann VBA zu lernen habe ich sehr schnell erkannt, dass es sinnlos ist, ein (für einen Einsteiger) recht umfangreiches Projekt als Übungsplattform zu nehmen. Zu viel greift da ineinander, als dass ich durch fremde Hilfe (die es damals so gut wie gar nicht gab) hätte weiter kommen können und daraus zu lernen. Viele Bücher waren und sind auch sehr begrenzt in Sachen Fehlersuche ...
Ich mache so etwas heute (natürlich) ohne VBA mit Power Query und bin damit glücklich ...
Gruß
Günther
Anzeige
AW: Deine Bedenken sind unberechtigt
11.09.2019 16:01:28
Timo
Hallo,
Vielen Dank Uwe, beide Lösungen haben wunderbar funktioniert.
Gruß
Timo
AW: Text in Spalten - Performance
06.09.2019 11:41:27
UweD
Hallo nochmal
so?
Sub Volumenimport()
  
    
      Dim QuellDatei As String        'Speicherort der Textdatei 
      Dim Zeile As Integer            'Laufvariable 
      Dim Inhalt As String            'Inhalt der Textdatei 
      Dim strDelimit$
      Dim RNG As Range
      
      Application.ScreenUpdating = False
      Application.DisplayAlerts = False
          
      'Tabellenblatt aktivieren und leeren 
      ThisWorkbook.Worksheets("VolumeD").Activate
      ActiveSheet.Range("A1:AP10000").ClearContents
          
      'Startwert zuweisen 
      Zeile = 0
      
      strDelimit = "," ' Trennzeichen der CSV-Datensätze 
      'QuellDatei ansprechen 
      QuellDatei = ThisWorkbook.Path & "\Volumen.csv"
      
      
      'QuellDatei öffnen 
      Open QuellDatei For Input As #1
      
      
      'Informationen in das Tabellenblatt eintragen 
      Do While Not EOF(1)     'Schleife bis DatenEnde 
          On Error Resume Next
          'Inhalt der Quelldatei zeilenweise einlesen 
          Line Input #1, Inhalt
              
              'Anführungszeichen hier schon entfernen 
              Inhalt = Replace(Inhalt, """", "")
              
              
              Set RNG = Cells(Zeile + 1, 1).Resize(1, 42)
              RNG.Value = Split(Inhalt, strDelimit)
                 
          
          Zeile = Zeile + 1
      
      Loop
  
      'Quelldatei schliessen 
      Close #1
  
  
  
      Application.ScreenUpdating = True
      Application.DisplayAlerts = True
End Sub


LG UweD
Anzeige
noch eine Lösung
06.09.2019 11:58:59
UweD
Hallo
müsste auch reichen.
Sub Volumenimport2()
  
    
      Dim QuellDatei As String        'Speicherort der Textdatei 
      Dim WB
      
      'Tabellenblatt aktivieren und leeren 
      ThisWorkbook.Worksheets("VolumeD").Activate
      ActiveSheet.Range("A1:AP10000").ClearContents
          
      'QuellDatei ansprechen 
      QuellDatei = ThisWorkbook.Path & "\Volumen.csv"
      
      
      'QuellDatei öffnen 
      Set WB = Workbooks.Open(QuellDatei)
      
      
      WB.Sheets(1).UsedRange.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
        Semicolon:=False, Comma:=True, Space:=False, Other:=False
  
  
End Sub

LG UweD
Anzeige

312 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige