Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1440to1444
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

CSV Import mit 2xTranspose

CSV Import mit 2xTranspose
11.08.2015 10:08:25
Ludwig
Hallo Experten :)
Bin grad ein wenig am VBA lernen und bin auf einen Beitrag gestoßen wie man CSV Dateien gut Importieren kann.

Sub Datei_Importieren()
Dim strFileName As String, arrDaten, arrTmp, lngR As Long, lngLast As Long
Const cstrDelim As String = ";" 'Trennzeichen
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
.Title = "Datei wählen"
.InitialFileName = "c:\test\*.csv"  'Pfad anpassen
If .Show = -1 Then
strFileName = .SelectedItems(1)
End If
End With
If strFileName  "" Then
Application.ScreenUpdating = False
Open strFileName For Input As #1
arrDaten = Split(Input(LOF(1), 1), vbCrLf)
Close #1
For lngR = 1 To UBound(arrDaten)
arrTmp = Split(arrDaten(lngR), cstrDelim)
If UBound(arrTmp) > -1 Then
With ActiveSheet
lngLast = .Cells(Rows.Count, 1).End(xlUp).Row + 1
lngLast = Application.Max(lngLast, 10)
.Cells(lngLast, 1).Resize(, UBound(arrTmp) + 1) _
= Application.Transpose(Application.Transpose(arrTmp))
End With
End If
Next lngR
End If
End Sub

Link zum Orginalbeitrag:
https://www.herber.de/forum/archiv/1236to1240/1239032_CSVImport_ueber_VBA.html
Meine Frage ist jetzt: Warum wird beim schreiben in die Zellen zwei mal Transponiert (Fett markierte Zeile)?
Man könnte doch auch einfach das Array "arrTmp" in den markierten Bereich schreiben oder nicht?
Was für Nebeneffekte bringt die Transponieren-Funktion noch mit, die hier evtl. ausgenutzt werden?
Gruß Ludwig

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: CSV Import mit 2xTranspose
11.08.2015 11:13:18
Rudi
Hallo,
ist in dem Fall tatsächlich überflüssig.
Was für Nebeneffekte
arrTmp = Split(arrDaten(lngR), cstrDelim)

erzeugt ein Array arrTmp(0 to n)
1. mal Transpose: arrTmp(1 to n+1, 1 to 1) (n+1 Zeilen, 1 Spalte)
2. mal Transpose: arrTmp(1 to 1, 1 to n+1) (1 Zeile, n+1 Spalten)
Aus einem ursprünglich 1-dimensionalen Array wird also ein 2-dimensionales.
Transpose versagt bei mehr als 2^16 Elementen. Dann muss man per Schleife transponieren, was aber nicht langsamer ist.
Gruß
Rudi
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige