Microsoft Excel

Herbers Excel/VBA-Archiv

Spalten von CSV Datei tauschen


Betrifft: Spalten von CSV Datei tauschen von: Marco
Geschrieben am: 09.01.2018 22:25:53

Guten Abend alle,

ich habe leider ein kleines Problem mit zwei Spalten in meiner CSV Datei. Und zwar sind die Spalten in denen das Anfang- und Enddatum stehen bei manchen Datensätzen (2 von 1000 Datensätzen) um zwei Spalten verschoben (siehe Bild).

Gibt es eine Möglichkeit das ich beim importieren der Werte...

A) Das Datum an seine vorgesehene Position rücken oder
B) die Zeilen in denen das Datum an der falschen Stelle stehen löschen kann?



Es wäre wirklich super wenn mir jemand da behilflich sein kann. Die falsche Position stört alle anderen Verknüpfungen und ich kann das Problem nicht lösen außer jedes mal per Hand alles rauszulöschen.

Gruß Marco

  

Betrifft: AW: Spalten von CSV Datei tauschen von: onur
Geschrieben am: 09.01.2018 22:32:18

Dafür müßtest du schon den code zum Importieren posten.


  

Betrifft: AW: Spalten von CSV Datei tauschen von: Marco
Geschrieben am: 09.01.2018 23:03:51

Der Code der die Werte aus der CSV Datei kopiert ist aus diesem Forum. Die Filter, das entfernen der Duplikate sowie das Kopieren der Werte in ein anderes Tabellenblatt sind von mir.

Beispieldatei:
https://www.herber.de/bbs/user/118834.xlsm


  

Betrifft: AW: Spalten von CSV Datei tauschen von: onur
Geschrieben am: 09.01.2018 23:05:28

Hast du auch eine (nicht zu große) .csv?


  

Betrifft: AW: Spalten von CSV Datei tauschen von: Marco
Geschrieben am: 09.01.2018 23:08:24

Nein ich habe dir mal eine Datei mit fake Daten geschickt was anderes darf ich leider nicht rausgeben


  

Betrifft: AW: Spalten von CSV Datei tauschen von: onur
Geschrieben am: 09.01.2018 23:10:12

Dann kann ich nur ein makro schreiben, was die Daten nacträglich korrigiert, statt sie beim Import korrekt einzulesen.
OK?


  

Betrifft: AW: Spalten von CSV Datei tauschen von: onur
Geschrieben am: 09.01.2018 23:11:45

Wann hast du sie geschickt?


  

Betrifft: AW: Spalten von CSV Datei tauschen von: Marco
Geschrieben am: 09.01.2018 23:28:12

Ich habe dir gerade eine CSV Datei per E-Mail geschickt weil ich die alte nicht mehr finde.

Gruß Marco


  

Betrifft: AW: Spalten von CSV Datei tauschen von: onur
Geschrieben am: 09.01.2018 23:32:58

Ist Spalte 15+16 normalerweise leer und wenn die daten fälschlicherweise in 15+16 sind, sind dann 13+14 leer?


  

Betrifft: AW: Spalten von CSV Datei tauschen von: Marco
Geschrieben am: 09.01.2018 23:37:18

Spalte 15+16 sind normalerweise immer leer und wenn die Daten fälschlicherweise in 15+16 sind, sind in 13+14 (diese werte dürfen aber überschrieben oder gelöscht werden weil sie uninteressant sind) also daneben auf werte drin.


  

Betrifft: AW: Spalten von CSV Datei tauschen von: onur
Geschrieben am: 09.01.2018 23:49:37

Diese Sub in ein modul und am ende des imports (vor end sub) aufrufen

Public Sub correct()
Dim z, a
For z = 2 To 20000 'max 20.000 Zeilen und ab Zeile 2 - ggf anpassen
     With Tabelle1'Tabellenbezeichnung lt. Projektfenster- nicht der Name, der von Dir  _
eingegeben wurde - eingeben
          a = .Cells(z, 1)
          If .Cells(z, 1) <> "" Then
               If .Cells(z, 15) <> "" Then
                    .Cells(z, 13) = .Cells(z, 15)
                    .Cells(z, 15) = ""
               End If
                If .Cells(z, 16) <> "" Then
                    .Cells(z, 14) = .Cells(z, 16)
                    .Cells(z, 16) = ""
               End If
          End If
     End With
Next z
End Sub



  

Betrifft: AW: Spalten von CSV Datei tauschen von: Marco
Geschrieben am: 10.01.2018 00:15:24

Hm es funktioniert nicht. Werden die Daten in der CSV Datei getauscht? Wenn nicht dann liegt es vll daran das ich nicht alle Spalten importiere oder ich habe Call Correct an die falsche stelle gesetzt. Funktioniert es denn in der Testdatei die ich gepostet habe?


  

Betrifft: AW: Spalten von CSV Datei tauschen von: onur
Geschrieben am: 10.01.2018 00:28:57

Nicht in der csv, sondern da, wo die daten hingeschrieben wurden und die fehler auftauchen.
Deine csv kann ich nicht direkt öffnen, nur über Import aus csv im Daten-Menü.
Und genau da klappt es auch (an für sich müsste es egal sein wo, hauptsache Datum in Spalte 15+16 statt 13+14).


  

Betrifft: Danke für die Hilfe von: Marco
Geschrieben am: 10.01.2018 14:13:01

Hallo Onur,

ich habe es leider nicht so hinbekommen wie du es gemeint hast. Das liegt aber daran das der Code den ich aus dem Forum hier habe die Spalten in der CSV Datei in einer Funktion vorsortiert. Deswegen habe ich deinen Code genommen und ihn in meinen bestehend eingebaut. Und es schein zu funktionieren.

Daher vielen Dank.

Könntest du mir bitte vielleicht bei meinem anderen Problem mit den Duplikaten auch weiterhelfen?

Private Function Erase_Unwanted_Data(Ws As Worksheet) As Boolean
    Dim lastCol As Long, zeile As Long, PosAt1 As Integer, PosAt2 As Integer, sText As String
    With Ws
    'In Spalte 1 die Daten bis einschlielich zweitem @ Symbol entfernen
        For zeile = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
            PosAt2 = 0
            sText = .Cells(zeile, 1).Text
            PosAt1 = InStr(1, sText, "@")
            If PosAt1 > 0 Then
                PosAt2 = InStr(PosAt1 + 1, sText, "@")
            End If
            If PosAt2 > 0 Then
                .Cells(zeile, 1).Value = "" & Mid(sText, PosAt2 + 1)
            End If
  
     'Onur dein Code Teil
            If .Cells(zeile, 1) <> "" Then
                 If .Cells(zeile, 15) <> "" Then
                      .Cells(zeile, 13) = .Cells(zeile, 15)
                      .Cells(zeile, 15) = ""
                 End If
                  If .Cells(zeile, 16) <> "" Then
                      .Cells(zeile, 14) = .Cells(zeile, 16)
                      .Cells(zeile, 16) = ""
                 End If
            End If
        Next
        
        'nicht benötigte Spalten werden gelöschen. Erhalten bleiben folgende 1, 3, 4, 6, 8, 9,  _
10, 12 und 13
        lastCol = .UsedRange.Column + .UsedRange.Columns.Count - 1
        If lastCol > 13 Then
            .Range(.Columns(14), .Columns(lastCol)).Delete
        End If
        .Columns(11).Delete
        .Columns(7).Delete
        .Columns(5).Delete
        .Columns(2).Delete
        'neue Spalten Reihenfolge aufgeführt sein: 1, 3, 6, 4, 13, 8, 9, 10, 12
        .Columns(9).Cut
        .Columns(5).Insert
        .Columns(4).Cut
        .Columns(3).Insert
    End With
End Function



  

Betrifft: AW: Danke für die Hilfe von: onur
Geschrieben am: 10.01.2018 20:40:17

Welche Probleme mit welchen Duplikaten denn?


Beiträge aus dem Excel-Forum zum Thema "Spalten von CSV Datei tauschen"