casorel
Goto Top

VBA Tabelle formatieren

Hallo an alle,

ich bin recht neu in VBA und soll jetzt für mein Unternehmen ein Makro erstellen, mit dem eine Tabelle automatisch formatiert wird.

Ich habe Bilder der Tabelle vorher und "nachher" mal angehangen

Die Idee ist:
Neben der Personalnummer in Spalte A stehen in den folgenden Spalten die Gehälter/Zuschläge samt Datum ab wann es in Kraft trat.

Die Tabelle soll für die Personalnummern nicht zeilenweise sondern untereinander formatiert werden. Wie auf dem Bild der fertigen Tabelle zu sehen.
Zu einigen Personalnummern gibt es eine Änderung im Gehalt, zu anderen 2, 3 oder 8.. es ist also variabel wie viele Zellen unter einander kopiert werden sollen.

Ich habe es mit einer If then else Schleife versucht, für jede Zeile einzeln. Aber das macht irgendwie nicht ganz was es soll und da ich noch keine Erfahrung habe, komme ich nicht dahinter wo das Problem liegt.

Kann mir da jemand helfen, mir einen Weg zeigen wie ich das formatieren kann?
Oder auch nur ein "Tipp" mit welchen Befehlen es besser/leichter wäre statt mit if wäre für mich schon hilfreich.

Falls ich etwas zu schlecht erklärt habe oder einen falschen Tag benutzt habe , verzeiht mir bitte, es ist mein erster Post hier im Forum.

Ich danke schon einmal für jedwede Hilfe!

Schöne Grüße
fertige tabelle
ausgangstabelle

Content-Key: 4628609772

Url: https://administrator.de/contentid/4628609772

Printed on: May 4, 2024 at 07:05 o'clock

Member: Xolger
Xolger Nov 14, 2022 at 12:05:17 (UTC)
Goto Top
Hi,

so wie es aussieht ist doch die Formatierung immer für die ganze Spalte (ohne Kopf) gültig.
Also formatiere es doch entsprechend.

Wenn man mit den Makros noch nicht soviel gemacht hat, ist der Macrorecorder ein guter Anlaufpunkt.

Einfach für jede Spalte das Makro aufzeichnen und dann sinnvoll die Einzelteile in ein Gesamtmakro übertragen.

Es ggibt enug Möglichkeiten hier ganz nach deinen Wünschen zu formatieren.
Entweder (m.E. am einfachsten) die ganze Spalte oder nur von Zelle bis Zelle (Range wird dir hier weiterhelfen).

Der Makrorekorder macht vieln Overhead, aber wenn du dann in der Materie drinsteckst, kannst du das immernoch bereinigen.

Wenn es erstmal läuft macht es Spaß.


Gruß
Xolger
Member: Casorel
Casorel Nov 14, 2022 at 12:19:36 (UTC)
Goto Top
Hi,

danke für deinen Lösungsansatz!

Wenn ich das aber mit dem Makrorecorder mache dann funktioniert das doch nur für genau die Tabelle passend, oder?

Also wenn ich das in eine andere Tabelle übertrage, dann würde er z.B. jedes Mal die gleichen Zelle kopieren, ob da Werte drin stehen oder nicht. Ich möchte aber ja das er nur Zellen verschiebt in denen auch ein Wert ist.


Kann man das mit dem Makrorecorder auch lösen?

Schöne Grüße
Member: Xolger
Solution Xolger Nov 14, 2022 at 12:27:13 (UTC)
Goto Top
Mein Ansatz bezieht sich nur auf die Formatierungen.

1. Tabelle mit Werten füllen
2. Makrorecorder starten
3. Zellen bzw. Spalten entsprechend formatieren
4. Makrorecorder stoppen

5. Ggf. in eine neue Tabelle anlegen
6. mit Daten füllen (Logischerweise dartauf achten, das die Spalten analog zur 1. Tabelle angelegt sind)
7. Makro ausführen

dann sollte es klappen
Mitglied: 4400667902
Solution 4400667902 Nov 15, 2022 updated at 10:39:36 (UTC)
Goto Top
Sub DatenInZeilen()
    Dim cell As Range, i As Integer, wSource As Worksheet, wTarget As Worksheet, intNext As Long
    ' Quellsheet  
    Set wSource = Sheets("Tabelle1")  
    ' Zielsheet  
    Set wTarget = Sheets("Tabelle2")  
    With wSource
        .Range("A1:E1").Copy wTarget.Range("A1")  
        intNext = wTarget.Cells(Rows.Count, "A").End(xlUp).Row + 1  
        For Each cell In .Range("A2:A" & .Cells(Rows.Count, "A").End(xlUp).Row)  
            intCols = CInt((.Cells(cell.Row, Columns.Count).End(xlToLeft).Column - 1) / 4)
            For i = 0 To intCols - 1
                wTarget.Cells(intNext, "A").Value = cell.Value  
                cell.Offset(0, (i * 4) + 1).Resize(1, 4).Copy Destination:=wTarget.Cells(intNext, 2)
                intNext = intNext + 1
            Next
        Next
    End With
    wTarget.Activate
End Sub

Vorher

screenshot

Nachher

screenshot
Member: Casorel
Casorel Nov 15, 2022 at 11:53:01 (UTC)
Goto Top
Oh das ist ja wunderbar!

Herzlichsten Dank!!