vba - neue Spalte am Ende einfügen

  • Excel

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von enit87.

    vba - neue Spalte am Ende einfügen

    Hallo,
    ich habe folgendes Problem:
    Ich soll einen nicht von mir geschriebenen Code bearbeiten. Ich habe ein Tabellenblatt in Excel, dass ich dynamisch aus einem XML heraus generiere. Nun möchte ich, dass abgefragte Werte in Spalten, die schon vorhanden sind, einfach eingetragen werden und wenn neue Parameter gefunden werden, soll dafür eine neue Spalte am Ende der Tabelle eingefügt werden und darin der Inhalt. Im Moment ist eine Methode vorhanden, die die Spalten alphabetisch anordnet, allerdings sollen sie nun nach verschiedenen Kategorien gruppiert werden (sind eigentlich schon im xml in richtiger Reihenfolge, wird dann aber eben aufgelöst und sortiert).
    Die vorhandene Methode legt die neue Spalte an und gibt mir einen Spaltenindex zurück, dann wird die Spalte befüllt:
    Hier mal der Code für diese Hilfmethode:

    Function getCol(Bean As String, Entry As String) As Integer
    Dim CaptRow As Range, C As Range, Caption As String, ColIndex As Integer
    Dim Column As Range

    Caption = "bla" //Je nachdem wie die Spalte heißen soll, wird aus dem xml ausgelesen
    Set CaptRow = ConfigSheet.Range("B1:IV1")
    For Each C In CaptRow
    If C.Value = Caption Then
    getCol = C.Column
    Exit Function
    ElseIf C.Value > Caption Or C.Value = "" Then
    ColIndex = C.Column
    ConfigSheet.Select
    C.Select
    Selection.EntireColumn.Insert (xlRight)
    Set Column = ConfigSheet.Range(ConfigSheet.Cells(2, ColIndex), ConfigSheet.Cells(65536, ColIndex))
    Column.Clear
    Column.Interior.ColorIndex = 2
    Call setCaptionCell(ConfigSheet.Cells(1, ColIndex), Caption) //setzt einfach nur die Formatierung für die Zelle
    getCol = ColIndex
    Exit Function
    End If
    Next C

    End Function

    Ich möchte nun gerne diese Methode so umschreiben, dass sie anstatt zu sortieren einfach bei neuen Parametern die neue Spalte am Ende einrichtet und deren Index ausgibt.
    Leider kenne ich mich mit vba überhaupt nicht aus, soll das nur hier bei meinem Studentenjob mal "schnell" machen. Habe leider auch nicht die Zeit, mich jetzt richtig einzuarbeiten.

    Wäre sehr dankbar über Hilfe, sitze hier schon mehrere Tage drüber und komme nicht darauf :(

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

    Visual Basic-Quellcode

    1. Function getCol(ByVal Key as String) as Long
    2. Dim c as Range
    3. Set c = ConfigSheet.Range("1:1").Find(Key)
    4. If c Is Nothing Then
    5. set c = ConfigSheet.Cells(1,ConfigSheet.Columns.Count).End(xlToLeft).Offset(0,1)
    6. c.EntireColumn.ClearContents
    7. c.Formula = Key
    8. End If
    9. getCol=c.Column
    10. End Function
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „petaod“ ()

    Super schon mal vielen Dank!
    Bin jetzt leider schon aus der Arbeit raus und erst nächste Woche wieder drin, kann es deswegen leider dann erst ausprobieren!
    Finde ich aber echt klasse, dass einem hier so schnell geantwortet wird!
    Werde dann berichten, obs funktioniert.