lukas2444
Goto Top

EXCEL VBA bestimmte Zeilen verbinden - Hilfe gesucht

Hallo zusammen,

ich arbeite gerade an einem Projekt und ziehe aktuell Daten aus einer OneNote Tabelle in eine Excel. Das Problem ist, dass er Seitenumbrüche in einer Zelle in One Note direkt in eine neue Zeile in Excel legt.
Beispiel
One Note:
Thema1:
Hier steht ein Text
Hier steht auch Text
nach Excel->
Thema 1:
Hier steht ein Text
Hier steht auch ein Text

...die Bindestriche sollen die Trennstriche für Zeilen darstellen.
Nun ist es so, dass ich ein Makro erstellen möche, welches in der Spalte A nach den freien Zeilen Sucht (Jeweils nur ein Inhalt vorhanden; Siehe Bild) und diesen Inhalt in die darüber liegende vollwärtige Zeile implementiert. Im Folgendem Bild habe ich das einmal visualisiert (Blau: Muss zusammengefasst werden in eine Zelle). Nach der Zusammenführung sollte natürlich die dann vollständig leere Zeile entfernt werden.
Ich habe jetzt bereits mehrer Stunden damit verbracht eine Lösung zu finden, jedoch ohne Erfolg, da ich auch noch nicht so vetraut mit VBA bin, hoffe ich hier eine Lösung zu finden.


unbenannt

Content-Key: 667382

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

Printed on: April 25, 2024 at 05:04 o'clock

Member: colinardo
Solution colinardo Jun 07, 2021 updated at 14:43:16 (UTC)
Goto Top
Servus @Lukas2444, schön das du den Weg in unser Forum gefunden hast!
Lass mal den folgenden Code über die Tabelle laufen und prüfe ob das Ergebnis deinen Vorstellungen entspricht:
Sub MergeCells()
    Dim cell As Range, rowMerge As Long, rngDel As Range, c As Integer
    With Sheets(1)
        For Each cell In .Range("A1:A" & .UsedRange.SpecialCells(xlCellTypeLastCell).Row)  
            If cell.Value = "" Then  
                If cell.Offset(-1, 0).Value <> "" Then  
                    rowMerge = cell.Row - 1
                End If
                For c = 1 To .Cells(cell.Row, Columns.Count).End(xlToLeft).Column
                    If .Cells(cell.Row, c).Value <> "" Then  
                        .Cells(rowMerge, c).Value = .Cells(rowMerge, c).Value & Chr(10) & .Cells(cell.Row, c).Value
                        .Cells(cell.Row, c).Value = ""  
                        If Not rngDel Is Nothing Then
                            Set rngDel = Union(rngDel, cell.EntireRow)
                        Else
                            Set rngDel = cell.EntireRow
                        End If
                    End If
                Next
            End If
        Next
        If Not rngDel Is Nothing Then rngDel.Delete
        .UsedRange.VerticalAlignment = xlTop
    End With
End Sub
Grüße Uwe
Member: Lukas2444
Lukas2444 Jun 07, 2021 at 11:33:51 (UTC)
Goto Top
Hallo Uwe!

Vielen Dank für die schnelle Antowrt! Ich habe den Code 1:1 bei mir eingefügt, jedoch passiert nichts bei der Ausführung. Nicht mal eine Fehlermeldung kommt. Muss ich am Code noch etwas ändern das das z.B. Auf mein Datenblatt bezogen ist (Bei mir Tabelle 11) oder kann das noch andere Gründe haben?

LG
Member: colinardo
colinardo Jun 07, 2021 updated at 11:41:07 (UTC)
Goto Top
Muss ich am Code noch etwas ändern das das z.B. Auf mein Datenblatt bezogen ist (Bei mir Tabelle 11)
Ja musst du, wenn es das Blatt mit der Nummer 11 ist (nach Reihenfolge) dann Zeile 3 an deine Bedürfnisse anpassen
With Sheets(11)
oder wenn du den Namen benutzen willst das geht auch
With Sheets("Tabelle11")  
Alternativ kannst du auch
With ActiveSheet
nehmen wenn der Code sowieso von diesem Sheet aus aufgerufen wird.
Member: Lukas2444
Lukas2444 Jun 07, 2021 at 11:41:26 (UTC)
Goto Top
Super, es hat geklappt! Vielen Dank!!!

LG
Member: colinardo
colinardo Jun 07, 2021 updated at 11:44:09 (UTC)
Goto Top
👍 Immer gerne face-smile.