VBA - .csv in .xlsx mit extra Spalten einfügen

  • Excel

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Doerfi.

    VBA - .csv in .xlsx mit extra Spalten einfügen

    Guten Morgen,

    ich bin auf der Suche nach einer Lösung für mein Problem.

    Welches folgendermaßen ist:

    Jeden Monat kommt eine .csv-Datei, welche in eine .xlsx-Datei (u.U. geht auch eine .xls-Datei) umgewandelt werden muss. Soweit mal kein Ding. ^^
    Allerdings müssen dabei jedes Mal händisch mehrere Spalten hinzugefügt werden und einige bereits vorhandene Zellen sind leer.

    Jetzt durchsuche ich bereits eine ganze Weile das Internet und kann trotz alledem nichts hilfreiches finden. ?(

    Schöne Grüße und schon einmal Danke im Vorraus,

    Simon
    Zwischendurch müssen an bestimmten Stellen neue Spalten hinzugefügt werden, diese müssen auch mit Werten befüllt werden (was kein Problem darstellt), allerdings muss ich diese Spalten-Position aufgrund des Inhalts der vorherigen Spalte ermitteln
    --> - wenn "Vertreter" in Zelle H1, dann adde mir Spalte mit I1 = "Rangliste"
    - wenn "Straße" in Zelle G1, dann lösche G*

    Doerfi schrieb:

    wenn "Vertreter" in Zelle H1, dann adde mir Spalte mit I1 = "Rangliste"

    Visual Basic-Quellcode

    1. If Range("H1").Value = "Vertreter" Then
    2. Range("I:I").Insert xlToRight
    3. Range("I1").Value="Rangliste"
    4. End If

    Doerfi schrieb:

    wenn "Straße" in Zelle G1, dann lösche G*

    Was heisst löschen? Die Spalte oder deren Inhalt?

    Visual Basic-Quellcode

    1. If Range("G1")="Straße" Then Range("G2:G" & Rows.Count).ClearContents


    Aber willst du wirklich so hart codiert verfahren?
    Welchen Code hast du denn bisher?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Quellcode

    Vielen Dank schonmal für die Lösungs-Ansätze, aber

    1.) Ich weiß zum Moment der Programmierung noch nicht an welcher Stelle z.B. "Vertreter" steht und ich will nicht in einer großen Schleife herausfinden wo z.B. "Vertreter" steht sondern herausfinden WO das steht. Entschuldigt bitte die schwammige Fragestellung.

    2.) Ja die gesamte Spalte löschen, nicht nur deren Inhalt.


    Quellcode

    1. Dim Spaltenzähler As Integer
    2. Dim zuLoeschen
    3. Dim anzahl
    4. Dim RangeAnzahl As Range
    5. Dim i As Integer
    6. zuLoeschen = Array("KalkZu", "Lager", "USTID", "Umskg-VVVJ", "Umskg-VVVJ-Zeitraum", "Umskg-VVJ", "Umskg-VVJ-Zeitraum", "Umsqm-VVVJ", "Umsqm-VVVJ-Zeitraum", "Umsqm-VVJ", "Umsqm-VVJ-Zeitraum", "VAnz", "VKM", "Vart", "Mahnst", "VMail", "VFax", "VTele", "VName", "SMail", "SFax", "STele", "SName", "Ums-VVVVJ", "Ums-VVVVJ-Zeitraum", "Ums-VVVJ", "Ums-VVVJ-Zeitraum", "Ums-VVJ", "Str", "Anspr", "AEMail", "Fax", "Tel", "Briefanrede", "Sbnr", "Sbtel", "Sbfax", "Ums-VVJ-Zeitraum")
    7. anzahl = UBound(zuLoeschen) - LBound(zuLoeschen) + 1
    8. MsgBox anzahl 'nur für Testzwecke
    9. RangeAnzahl = anzahl.torange '?
    10. For i = 0 To RangeAnzahl
    11. Columns(zuLoeschen(i)).Select
    12. Selection.Delete Shift:=xlToLeft
    13. Next i


    Im Moment muss ich eigentlich nur noch wissen, wie man den Integer "anzahl" in ein Range umwandelt, um dieses dann löschen zu können :whistling:

    Edit:
    bzw. so:

    Quellcode

    1. 'Alles was zu löschen ist suchen und löschen
    2. Dim Spaltenzähler As Integer
    3. Dim zuLoeschen
    4. Dim anzahl
    5. Dim RangeAnzahl As Range
    6. Dim i As Integer
    7. zuLoeschen = Array("KalkZu", "Lager", "USTID", "Umskg-VVVJ", "Umskg-VVVJ-Zeitraum", "Umskg-VVJ", "Umskg-VVJ-Zeitraum", "Umsqm-VVVJ", "Umsqm-VVVJ-Zeitraum", "Umsqm-VVJ", "Umsqm-VVJ-Zeitraum", "VAnz", "VKM", "Vart", "Mahnst", "VMail", "VFax", "VTele", "VName", "SMail", "SFax", "STele", "SName", "Ums-VVVVJ", "Ums-VVVVJ-Zeitraum", "Ums-VVVJ", "Ums-VVVJ-Zeitraum", "Ums-VVJ", "Str", "Anspr", "AEMail", "Fax", "Tel", "Briefanrede", "Sbnr", "Sbtel", "Sbfax", "Ums-VVJ-Zeitraum")
    8. anzahl = UBound(zuLoeschen) - LBound(zuLoeschen) + 1
    9. MsgBox anzahl
    10. 'RangeAnzahl = anzahl.torange
    11. For i = 0 To anzahl
    12. Columns(zuLoeschen(i)).Select
    13. Selection.Delete Shift:=xlToLeft
    14. Next i


    dann kommt allerdings die Meldung, die Typen seihen unverträglich und ich bekomme einen Hinweis auf die Zeile "Columns(zuLoeschen(i)).Select"
    Edit Ende

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Doerfi“ ()

    Visual Basic-Quellcode

    1. For Each ColName in zuLoeschen
    2. Set c = Range("1:1").Find (ColName, LookIn:=xlValues, LookAt:=xlWhole)
    3. If Not c is Nothing Then c.EntireColumn.Delete xlToLeft
    4. Next

    Wobei mein Ansatz eher eine Positivliste wäre, also die Spalten bestimmen, die am Ende stehen bleiben.
    Aber das musst du fachlich beurteilen, was Sinn macht.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --