Thema Datum  Von Nutzer Rating
Antwort
Rot Datenübernahme aus CSV- Datei per VBA
18.08.2020 12:16:26 Klaus Wreth
NotSolved
18.08.2020 12:49:43 Gast20489
NotSolved

Ansicht des Beitrags:
Von:
Klaus Wreth
Datum:
18.08.2020 12:16:26
Views:
1117
Rating: Antwort:
  Ja
Thema:
Datenübernahme aus CSV- Datei per VBA

 

Hallo zusammen,

 

Ich habe hier folgende Herausforderung. Ich habe zwar schon etwas, aber das ist mehr schlecht als recht adaptiert… Ist also nicht mein eigenes Ausgangsprogramm! Ich habe es nur probiert auf meine Anforderungen anzupassen…

Ich hoffe Ihr nehmt euch die Zeit, um mir zu helfen. Ich wäre euch sehr dankbar!

Anmerkung:

-         -          Wenn Beispiele benötigt werden schreibt mich bitte einfach per Mail an.

 

-             Ein Prüfstand legt pro Prüfung Testwerte im CSV-Format ab (siehe CSV-Datei). Es kann also von einer CSV-Datei bis 2000 CSV-Dateien alles vorkommen.

 

 

1)      1) Der Aufbau der Ordnerstruktur ist:

-          Ordner 1 –> Ordner 2 –> CSV-Datei 1,2,3 ….. n  

o   Die Auswahl des Pfads würde ich aber gerne über ein Fenster selbst vornehmen, da es eine gewisse Varianz gibt, wo die Daten abgelegt werden können.

 

 2) Ich benötige die folgende Werte aus einer von mir bestimmten CSV in dem Excel Dokument (In A1 bis A15),  Vorhanden ist Benennung1 bis Benennung19

):

Benennung 1

Benennung 2

Benennung 3

Benennung 4

Benennung 5

Benennung 8

Benennung 9

Benennung 10

Benennung 11

Benennung 12

Benennung 13

Benennung 14

Benennung 15

Benennung 18

Benennung 19

In A1 bis A15

2.1) dem zugeordnet: (Vorhanden ist Inhalt 1 bis Inhalt 19)

 

Inhalt 1

Inhalt 2

Inhalt 3

Inhalt 4

Inhalt 5

Inhalt 8

Inhalt 9

Inhalt 10

Inhalt 11

Inhalt 12

Inhalt 13

Inhalt 14

Inhalt 15

Inhalt 18

Inhalt 19

In B1 bis B15

Anmerkung: Soweit bin ich dann auch schon gekommen (siehe Anhang)

 

 

1)      3) Danach möchte ich die nächste freie Zeile mit

-          Anzahl (A16) (diese soll mitlaufen, wenn Einheit 1 daneben mit einem Wert gefüllt ist)

-          Einheit 1 (B16)

-          Einheit 2 (C17)

Benennen

Anmerkung: Das habe ich auch schon siehe Anhang

 

 

 

4) Den folgenden Schritt bekomme ich nicht so richtig hin… (siehe „Output – Excel“)

1)      Der letzte Schritt soll dann alle in dem ausgewählten Ordner hinterlegten CSV-Dateien auf folgenden Inhalt durchsuchen:

-          Inhalt 13 (übertragen unter Einheit 1, Spalte B)

-          Inhalt 12 (übertragen unter Einheit 2, Spalte C)

 

Und diese Werte dann untereinander in Reihenfolge

-          Einheit 1 (Spalte B)

-          Einheit 2 (Spalte C)

schreiben

 

So, ich hoffe ich habe mich deutlich ausgedrückt. Falls nicht stellt gerne Fragen!

 

Ich wünsche allen einen guten restlichen Tag und herzlichen Dank im Voraus!

 


			Hauptprogramm


'Suchen nach max. Wert in Spalte B plus Kopieren Spalte C
Sub AuswertenDerCSVmitMAX()

'21 Zeilen kopieren
Dim x As Double
Dim CSV As String
'Dim varFileToOpen As Variant

'CSV Auswertung
  Dim wksZiel As Worksheet
  Dim Zeile_Z As Long, zeile As Long
  Dim varA, dblMax, dbTemp As Double
  Dim wkbTxt As Workbook, wksTxt As Worksheet
  Dim varOrdner As Variant, varDatei As Variant
  Dim varData As Variant
  Set wksZiel = ActiveSheet
   
  '21 Zeilen kopieren

    'Ordner Suchen und den Dateipfad an die Auswertung übergeben
varDatei = Application.GetOpenFilename("CSV Dateien (*.csv), *.csv")
If varDatei = False Then Exit Sub
'Übergabepunkt
Open varDatei For Input As #1
'Startpunkt
x = 0
Do While Not EOF(1)
Line Input #1, CSV
Cells(1, 1).Offset(x, 0) = CSV
x = x + 1
Loop
Close #1
'alle Zeilen zählen mit Inhalt
z = Range("A4000").End(xlUp).Row
'Zeile 21 bis zur letzten löschen
Range("A21:A" & z).Delete Shift:=xlUp
'die verbleibenden 21 zeilen splitten
For j = 1 To 21
Text = Split(Cells(j, 1), ";")
For i = 0 To UBound(Text)
Cells(j, i + 1) = Text(i)
Next
Next


'######################################################################################################################


'Formatieren der Tabelle
Call LöschenSpaltenZellen


'######################################################################################################################
  
  
'Bereich für die Auswertung der CSV Dateien
  
  With wksZiel
    'letteZeile in Spalte A mit Inhalt
    Zeile_Z = .Cells(.Rows.Count, 2).End(xlUp).Row 'Sucht in Spalte B den letzten Eintrag und schreibt den nächsten Eintrag direkt darüber
  End With
  
  'Ordner auswählen
  With Application.FileDialog(msoFileDialogFolderPicker)
    .Title = "Bitte den Ordner mit den csv-Dateien auswählen"
    
    If .Show = -1 Then
      varOrdner = .SelectedItems(1)
    Else
      GoTo Beenden
    End If
  End With
  
  Application.ScreenUpdating = False
  
  'csv-Dateien suchen
  varDatei = Dir(varOrdner & "\*.csv")
  Do Until varDatei = ""
    'csv öffnen - 1000er- und Dezimal-Trennzeichen anpassen, Local auf False _
      setzen wenn Daten nicht mit den lokalen Einstellungen der Systemsteuerung übereinstimmen.
    Application.Workbooks.OpenText Filename:=varOrdner & "\" & varDatei, Origin:=xlWindows, _
        StartRow:=1, DataType:=xlDelimited, Tab:=False, semicolon:=True, comma:=False, _
        Space:=True, other:=False, ThousandsSeparator:=".", DecimalSeparator:=",", _
        Local:=True
    Set wkbTxt = ActiveWorkbook
    Set wksTxt = wkbTxt.Sheets(1)
    
    'Daten in SpaltenA und B in eine Daten-Array schreiben - Auswertung geht dann schneller.
    With wksTxt
      varData = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp).Offset(0, 2)) 'Bei Offset(Spalte, Zeile) hier überträgt er in dieser Konfi Druck [B] und Temperatur [C]
    End With
    
    'Werte für Spalte A und B zurücksetzen
    varA = "no Data"
    dblMax = -99999
    
    
   If UBound(varData, 1) >= 21 Then      'Sucht ab Zeile 21 Spalte A bis zur letzten Zelle mit Inhalt
   
      varA = varData(21, 1) 'nicht benötigt in der Auswertung
      dblMax = varData(21, 2) 'Einheit 1
      dbTemp = varData(21, 3) 'Einheit 2
      
      For zeile = 21 To UBound(varData, 1)
        If IsNumeric(varData(zeile, 1)) Then
        If varData(zeile, 1) > dblMax Then
          varA = varData(zeile, 1)
          dblMax = varData(zeile, 2)
          dbTemp = varData(21, 3) 'Temperatur
        End If
        End If
      Next
      
    End If
    
    'text-Datei ohne speichern wieder schliesen
    wkbTxt.Close SaveChanges:=False
    
    'daten-Array löschen
    Erase varData
    
    'gefundenen Werte in Zieltabelle eintragen
    With wksZiel
      Zeile_Z = Zeile_Z + 1 'Abstand für neuen Eintrag zum letzten Eintrag; 1= nächste Zeile, 2= eine Leerzeile
          .Cells(Zeile_Z, 2) = dblMax 'Einheit 1
           .Cells(Zeile_Z, 3) = dbTemp 'Einheit 2
    End With
    'nächste datei suchen
    varDatei = Dir
  Loop
Beenden:
  Application.ScreenUpdating = True
  
  
  
  '##############################################################################################################################################################################################
  
  
  'Anzahl der Tests Aufführen
  Call Nummerierung
  'Zellen Formatieren
Call ZahlenFormatEinstellen

    
    
   '##############################################################################################################################################################################################
    
End Sub



Nebenprogramme 

1)
Sub LöschenSpaltenZellen()
With Worksheets("Tabelle1")
'STUFE 1 Inhalte entfernen
'Nr. tauschen und Platzhalter löschen
Range("A20").ClearContents
Range("A21").Value = "Nr." ' Spalte A
Range("B20").ClearContents
Range("B21").Value = "Einheit 1" 'hier Einheit 1 in die entsprechende Zelle eintragen (Spalte B)
Range("C20").ClearContents
Range("C21").Value = "Einheit 2" 'hier Einheit 2 in die entsprechende Zelle eintragen (Spalte C)
Range("C1:C19").ClearContents
'Löscht überflüssige Zeilen aus CSV-Datei
Range("6:6,7:7,9:9,10:10,11:11,16:16").Select
Selection.Delete
End With
End Sub

2) 

Sub Nummerierung()
  Dim i As Long, n As Long
  n = 1
  With Sheets("Tabelle1")
    For i = 16 To .Cells(Rows.Count, "B").End(xlUp).Row
      If .Cells(i, "B") <> "" Then
        .Cells(i, "A") = n
        n = n + 1
      End If
    Next
  End With
End Sub

 


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot Datenübernahme aus CSV- Datei per VBA
18.08.2020 12:16:26 Klaus Wreth
NotSolved
18.08.2020 12:49:43 Gast20489
NotSolved