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

Template erstellen - viele Funktionen

Template erstellen - viele Funktionen
22.04.2021 15:12:43
Sven
Guten Tag,
ich bin kompletter Neuling bezüglich großer Arbeit in VBA, jetzt hat mich jedoch eine Auswertung erreicht, die wöchentlich laufen soll und Daten aus einer Datenbank (csv) in Excel überführen soll.
Ich habe hierzu eine Batch-Datei, die den kompletten Abruf der Daten aus der Datenbank übernimmt, dies wird in zwei csv-Dateien übergeben, die Daten in der csv-Datei sind Komma-getrennt.
Die Batch-Datei leert am Anfang den Ordner, wo nachher die beiden csv-Dateien abgelegt werden, damit kein Alt-Datenmüll da liegt.
Nun möchte ich gerne ein Template erstellen, dieses soll folgendes können:
1. Die beiden csv-Dateien öffnen
2. Den Inhalt der csv-Dateien importieren (Trennung mit den Kommata auflösen), dies am besten hintereinander in ein Tabellenblatt. In der ersten Zeile sind bei beiden Dateien die Überschriften. Die erste Datei (alias ED) heißt zum Beispiel Bezeichnung_22.04.2021.csv und die ist (nach der Konvertierung der csv-Datei) 7 Spalten breit (also A bis G). Die zweite Datei (alias ZD) heißt Bezeichnung_22.04.2021-E.csv und ist 11 Spalten breit (also A bis K), wobei die Spalte A (ZD), die gleichen Daten enthält, wie die Spalte A (ED) + die Spalte B (ZD) hat die gleichen Daten, wie die Spalte F (ED). Die beiden Spalten wurden für eine Sortierung der Datenbank und für einen vllt. nötigen SVerweis (falls ich es mit VBA nicht auf die Kette bekomme) ins Leben gerufen.
Hintereinander sollen also nur Spalte A bis G von ED und Spalte C bis K von ZD.
Die Menge der Zeilen kann variieren, dürfte aber nie mehr als 50 sein.
3. Wenn jetzt beide Tabellen hintereinander in einem Tabellenblatt sind, sollen Zeilen gelöscht werden, wenn Spalte B, C, D und E der Zeile leer sind.
4. Jetzt müssten noch Spalten hinzugefügt werden mit jeweils einer Überschrift.
5. Zu guter Letzt fehlt eig. nur noch ein Filter in der Zeile 1...
Ich weiß, dass das ein riesen Batzen an Anfragen ist, aber vllt. kann mir ja einer helfen... Ich stehe leider vollkommen auf meiner Unwissenheit.
Danke im Voraus...
Ich habe jetzt schon folgenden VBA-Code, der zieht aber nur beide csv-Dateien in die offene Excel-Tabelle und konvertiert die csv.
'**************************************************************
Option Explicit
Sub ImportFile()
Dim sPath As String
sPath = ThisWorkbook.Path & "\Datei1.csv"
tPath = ThisWorkbook.Path & "\Datei2.csv"
copyDataFromCsvFileToSheet sPath, ",", "Tabelle1"
copyDataFromCsvFileToSheets tPath, ",", "Tabelle2"
End Sub '**************************************************************

Private Sub copyDataFromCsvFileToSheet(parFileName As String, _
parDelimiter As String, parSheetName As String)
Dim Data As Variant
Data = getDataFromFile(parFileName, parDelimiter)
If Not isArrayEmpty(Data) Then
With Sheets(parSheetName)
.Cells(1, 1).Resize(UBound(Data, 1), UBound(Data, 2)) = Data
End With
End If
End Sub
'**************************************************************

Private Sub copyDataFromCsvFileToSheets(parFileName As String, _
parDelimiter As String, parSheetName As String)
Dim Data As Variant  'Array for the file values
Data = getDataFromFile(parFileName, parDelimiter)
If Not isArrayEmpty(Data) Then
With Sheets(parSheetName)
.Cells.ClearContents
.Cells(1, 1).Resize(UBound(Data, 1), UBound(Data, 2)) = Data
End With
End If
End Sub
'**************************************************************

Public Function isArrayEmpty(parArray As Variant) As Boolean
If IsArray(parArray) = False Then isArrayEmpty = True
On Error Resume Next
If UBound(parArray) 
'**************************************************************

Private Function getDataFromFile(parFileName As String, _
parDelimiter As String, _
Optional parExcludeCharacter As String = "") As Variant
Dim locLinesList() As Variant 'Array
Dim locData As Variant        'Array
Dim i As Long                 'Counter
Dim j As Long                 'Counter
Dim locNumRows As Long        'Nb of rows
Dim locNumCols As Long        'Nb of columns
Dim fso As Variant            'File system object
Dim ts As Variant             'File variable
Const REDIM_STEP = 10000      'Constant
Set fso = CreateObject("Scripting.FileSystemObject")
On Error GoTo error_open_file
Set ts = fso.OpenTextFile(parFileName)
On Error GoTo unhandled_error
ReDim locLinesList(1 To 1) As Variant
i = 0
Do While Not ts.AtEndOfStream
If i Mod REDIM_STEP = 0 Then
ReDim Preserve locLinesList _
(1 To UBound(locLinesList, 1) + REDIM_STEP) As Variant
End If
locLinesList(i + 1) = Split(ts.ReadLine, parDelimiter)
j = UBound(locLinesList(i + 1), 1) 'Nb of columns in present row
If locNumCols  "" Then
For i = 1 To locNumRows
For j = 0 To UBound(locLinesList(i), 1)
If Left(locLinesList(i)(j), 1) = parExcludeCharacter Then
If Right(locLinesList(i)(j), 1) = parExcludeCharacter Then
locLinesList(i)(j) = _
Mid(locLinesList(i)(j), 2, Len(locLinesList(i)(j)) - 2)
Else
locLinesList(i)(j) = _
Right(locLinesList(i)(j), Len(locLinesList(i)(j)) - 1)
End If
ElseIf Right(locLinesList(i)(j), 1) = parExcludeCharacter Then
locLinesList(i)(j) = _
Left(locLinesList(i)(j), Len(locLinesList(i)(j)) - 1)
End If
locData(i, j + 1) = locLinesList(i)(j)
Next j
Next i
Else
For i = 1 To locNumRows
For j = 0 To UBound(locLinesList(i), 1)
locData(i, j + 1) = locLinesList(i)(j)
Next j
Next i
End If
getDataFromFile = locData
Exit Function
error_open_file:  'Returns empty Variant
unhandled_error:  'Returns empty Variant
End Function

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Template erstellen - viele Funktionen
22.04.2021 21:49:51
Yal
Hallo Sven,
nemme Dir eine ruhige Stunde um diese 7 Videos anzuschauen.
https://www.youtube.com/playlist?list=PLy5TtUB84yrN2VVRzp8Tif8bxQKJD_2bo
(Excel Hero Power Query Playlist. Letzte Video brauchst Du zuerst nicht. Also nur noch 40 Min)
Deine Aufgabe ist der Idealfall für Power Query. Alles per Click.
Wenn dein Batch deine Dateien immer aufs neu in einem leeren Verzeichnis schreibt, dann vergeb immer dieselbe Namen. Zusatz wie z.B. Datum wird erst vergeben, wenn die Dateien in einem Archiv-Verzeichnis verschoben werden (auch per Batch).
Viel Erfolg
Yal
Anzeige
AW: Template erstellen - viele Funktionen
23.04.2021 13:09:05
Sven
Vielen Dank für den Tipp, habe es damit jetzt perfekt hinbekommen!
Power Query ist mir tatsächlich nur mit dem Anfügen von Daten über den Weg gelaufen und noch nicht beim Zusammenführen...

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige