Discussion:
Makro zum Verbinden von Zellen mit gleichem Inhalt in bestimmten Bereich
(zu alt für eine Antwort)
j***@gmail.com
2019-01-15 13:34:31 UTC
Permalink
Hallo,

ich habe folgendes Makro:

Sub Verbinden()
a1 = 0
Z = ActiveSheet.UsedRange.Rows.Count
s = ActiveSheet.UsedRange.Columns.Count

Application.DisplayAlerts = False
For i = 1 To Z
For j = 1 To s
If a1 = 0 Then
a1 = j
a2 = j
End If

If Cells(i, j) = Cells(i, j + 1) Then
a2 = j + 1
Else
Range(Cells(i, a1), Cells(i, a2)).Merge
a1 = 0
End If
Next j
a1 = 0
Next i


Application.DisplayAlerts = True
End Sub


Es soll allerdings nur in den Zellen L9-ADI9 greifen. Wie muss ich dieses modifizieren, dass das Makro nur auf diese Zellen zugreift?

Danke schon vorab für Eure Hilfe!
Schöne Grüße
Verena
Claus Busch
2019-01-15 15:20:53 UTC
Permalink
Hallo Verena,
Post by j***@gmail.com
Sub Verbinden()
a1 = 0
Z = ActiveSheet.UsedRange.Rows.Count
s = ActiveSheet.UsedRange.Columns.Count
Application.DisplayAlerts = False
For i = 1 To Z
For j = 1 To s
If a1 = 0 Then
a1 = j
a2 = j
End If
If Cells(i, j) = Cells(i, j + 1) Then
a2 = j + 1
Else
Range(Cells(i, a1), Cells(i, a2)).Merge
a1 = 0
End If
Next j
a1 = 0
Next i
Application.DisplayAlerts = True
End Sub
beschreibe mal in Worten unter welchen Bedingungen die Zellen wie
verbunden werden sollen.
Ich würde auf das Verbinden verzichten, weil es einfach nur
Schwierigkeiten macht. Sowohl mit Formel als auch mit Makro ist nur
schwer auf verbundene Zellen zuzugreifen und mit ihnen zu rechnen.
Den gleichen optischen Effekt hast du, wenn du beide Zellen selektierst
=> Zellen formatieren => Ausrichtung => Horizontal => Über Auswahl
zentriert.


Mit freundlichen Grüßen
Claus
--
Windows10
Office 2016
j***@gmail.com
2019-01-15 15:33:48 UTC
Permalink
Hallo Claus,

ich habe einen Projektplan inkl. Zeitschiene. Diese besteht aus Zeilen mit Tag, KW, Monat, Jahr. Damit aber bei Monat nicht 31x Jänner 19 steht, möchte ich alle Zellen mit gleichem Inhalt verbinden.
Außerdem ist der Start der Zeitschiene variabel, d.h. händisch formatieren geht nicht.
Das Makro funktioniert im Grunde auch, aber wirkt sich aktuellen leider auch auf das gesamte Tabellenblatt aus.

Schöne Grüße
Verena
Claus Busch
2019-01-15 16:59:51 UTC
Permalink
Hallo Verena,
Post by j***@gmail.com
ich habe einen Projektplan inkl. Zeitschiene. Diese besteht aus Zeilen mit Tag, KW, Monat, Jahr. Damit aber bei Monat nicht 31x Jänner 19 steht, möchte ich alle Zellen mit gleichem Inhalt verbinden.
Außerdem ist der Start der Zeitschiene variabel, d.h. händisch formatieren geht nicht.
Das Makro funktioniert im Grunde auch, aber wirkt sich aktuellen leider auch auf das gesamte Tabellenblatt aus.
du willst also nur in Zeile 9 die Zellen verbinden.
Dann probiere es mal so:

Sub Verbinden()
Dim i As Integer
Dim ma As Range

With Application
.DisplayAlerts = False
.ScreenUpdating = False
End With
On Error GoTo CleanUp
For i = Range("L9").Column + 1 To Range("ADI9").Column
If Cells(9, i - 1).MergeCells = False And Cells(9, i - 1) = Cells(9, i) Then
Range(Cells(9, i - 1), Cells(9, i)).Merge
ElseIf Cells(9, i - 1).MergeCells = True Then _
Set ma = Cells(9, i - 1).MergeArea.Cells(1, 1)
If ma.Value = Cells(9, i) Then
Range(ma, Cells(9, i)).Merge
End If
End If
Cells(9, i - 1).HorizontalAlignment = xlCenter
Next
CleanUp:
With Application
.DisplayAlerts = True
.ScreenUpdating = True
End With
End Sub


Mit freundlichen Grüßen
Claus
--
Windows10
Office 2016
j***@gmail.com
2019-01-16 07:12:35 UTC
Permalink
Hallo Jörg, hallo Claus,
Post by Claus Busch
du willst also nur in Zeile 9 die Zellen verbinden.
Sub Verbinden()
Dim i As Integer
Dim ma As Range
With Application
.DisplayAlerts = False
.ScreenUpdating = False
End With
On Error GoTo CleanUp
For i = Range("L9").Column + 1 To Range("ADI9").Column
If Cells(9, i - 1).MergeCells = False And Cells(9, i - 1) = Cells(9, i) Then
Range(Cells(9, i - 1), Cells(9, i)).Merge
ElseIf Cells(9, i - 1).MergeCells = True Then _
Set ma = Cells(9, i - 1).MergeArea.Cells(1, 1)
If ma.Value = Cells(9, i) Then
Range(ma, Cells(9, i)).Merge
End If
End If
Cells(9, i - 1).HorizontalAlignment = xlCenter
Next
With Application
.DisplayAlerts = True
.ScreenUpdating = True
End With
End Sub
@ Claus: Jetzt hab ich aber auch verstanden, was du bei deiner ersten Antwort gemeint hast. Ich kann das Makro nämlich genau einmal anwenden und sobald ich das Startdatum der Zeitschiene ändere, stimmt nichts mehr da durch das Verbinden nur noch in vereinzelten Zellen Formeln sind.
Gibt es daher eine andere Lösung? Evlt auch ohne Makro?

Schöne Grüße
Verena
Claus Busch
2019-01-16 07:57:50 UTC
Permalink
Hallo Verena,
Post by j***@gmail.com
@ Claus: Jetzt hab ich aber auch verstanden, was du bei deiner ersten Antwort gemeint hast. Ich kann das Makro nämlich genau einmal anwenden und sobald ich das Startdatum der Zeitschiene ändere, stimmt nichts mehr da durch das Verbinden nur noch in vereinzelten Zellen Formeln sind.
Gibt es daher eine andere Lösung? Evlt auch ohne Makro?
dazu kann ich erst etwas sagen, wenn ich deine Formeln kenne.
Könntest du eine Mappe mit den Formeln von L9 bis ADI9 zur Verfügung
stellen?


Mit freundlichen Grüßen
Claus
--
Windows10
Office 2016
j***@gmail.com
2019-01-16 09:22:21 UTC
Permalink
Post by Claus Busch
dazu kann ich erst etwas sagen, wenn ich deine Formeln kenne.
Könntest du eine Mappe mit den Formeln von L9 bis ADI9 zur Verfügung
stellen?
Sind nur diese Formeln: =TEXT(L13;"MMM JJ")
Claus Busch
2019-01-16 09:58:58 UTC
Permalink
Hallo Verena,
Post by j***@gmail.com
Sind nur diese Formeln: =TEXT(L13;"MMM JJ")
schau mal hier:
https://1drv.ms/x/s!AqMiGBK2qniTgeEQQsJLCGD-g3Kxxw

Die Formel lautet jetzt
=L13
Dafür ist dann die Zeile 9 "MMM JJ" formatiert.
Der Rest ist bedingte Formatierung. Um die Formeln für die bedingte
Formatierung zu sehen, musst du die Mappe herunterladen. In OneDrive
sind die Formeln nicht ersichtlich.


Mit freundlichen Grüßen
Claus
--
Windows10
Office 2016
j***@gmail.com
2019-01-16 10:38:41 UTC
Permalink
Post by Claus Busch
https://1drv.ms/x/s!AqMiGBK2qniTgeEQQsJLCGD-g3Kxxw
Die Formel lautet jetzt
=L13
Dafür ist dann die Zeile 9 "MMM JJ" formatiert.
Der Rest ist bedingte Formatierung. Um die Formeln für die bedingte
Formatierung zu sehen, musst du die Mappe herunterladen. In OneDrive
sind die Formeln nicht ersichtlich.
Das funktioniert zwar, aber kann nicht gelesen werden weil meine Spalten zu schmal sind. Hab es hier hochgeladen:
https://1drv.ms/x/s!Am6JLleH-EaSh3fFeYbj_V9ddq13
Claus Busch
2019-01-16 13:06:22 UTC
Permalink
Hallo Verena,
Post by j***@gmail.com
https://1drv.ms/x/s!Am6JLleH-EaSh3fFeYbj_V9ddq13
es ist nun doch eine Makro-Lösung geworden. Lade dir hier die Mappe
herunter, da Makros in OneDrive deaktiviert sind:
https://1drv.ms/x/s!AqMiGBK2qniTgeESC-3in6rULK_k4g

Wenn du das Startdatum in K6 änderst, wird das Makro gestartet.


Mit freundlichen Grüßen
Claus
--
Windows10
Office 2016
j***@gmail.com
2019-01-17 07:09:48 UTC
Permalink
Post by Claus Busch
es ist nun doch eine Makro-Lösung geworden. Lade dir hier die Mappe
https://1drv.ms/x/s!AqMiGBK2qniTgeESC-3in6rULK_k4g
Wenn du das Startdatum in K6 änderst, wird das Makro gestartet.
Perfekt!! Vielen Dank Claus - hast mir sehr geholfen!
Sg Verena

Jörg Eisenträger
2019-01-15 17:08:41 UTC
Permalink
Post by j***@gmail.com
Sub Verbinden()
a1 = 0
Z = ActiveSheet.UsedRange.Rows.Count
s = ActiveSheet.UsedRange.Columns.Count
Application.DisplayAlerts = False
For i = 1 To Z
For j = 1 To s
...
...
End Sub
Es soll allerdings nur in den Zellen L9-ADI9 greifen. Wie muss ich dieses modifizieren, dass das Makro nur auf diese Zellen zugreift?
Hallo Verena,

Deine Variablen i und j dürfen dann eben nicht den gesamten UsedRange
durchlaufen, sondern nur die benötigten Zeilen und Spalten.
Wenn ich jetzt mal annehme, dass mit "ADI9" die Zelle AD19 gemeint ist,
müsste der Anfang des Makros z. B. so aussehen:

Sub Verbinden()
a1 = 0
'zu durchlaufende Zeilen und Spalten, jeweils Anfang und Ende
Z1 = 9
Z2 = 19
S1 = 12 'Nr. der Spalte L
S2 = 30 'Nr. der Spalte AD

Application.DisplayAlerts = False
For i = Z1 To Z2
For j = S1 To S2

'weiter wie bisher.

Gruß
Jörg
Jörg Eisenträger
2019-01-15 17:12:03 UTC
Permalink
On Tue, 15 Jan 2019 18:08:41 +0100, Jörg Eisenträger
Post by Jörg Eisenträger
Wenn ich jetzt mal annehme, dass mit "ADI9" die Zelle AD19 gemeint ist,
Ah, habe ich ich "ADI9" doch falsch interpretiert. Nimm das Makro von
Claus.

Gruß
Jörg
Claus Busch
2019-01-15 17:16:37 UTC
Permalink
Hallo Jörg,
Post by Jörg Eisenträger
Ah, habe ich ich "ADI9" doch falsch interpretiert. Nimm das Makro von
Claus.
nicht unbedingt. Ebenso kann ich das falsch interpretiert haben, da ja
in Verenas Makro sowohl Zeilen als auch Spalten durchlaufen werden.


Mit freundlichen Grüßen
Claus
--
Windows10
Office 2016
j***@gmail.com
2019-01-16 07:23:22 UTC
Permalink
Post by Claus Busch
Hallo Jörg,
nicht unbedingt. Ebenso kann ich das falsch interpretiert haben, da ja
in Verenas Makro sowohl Zeilen als auch Spalten durchlaufen werden.
Hallo Claus, hallo Jörg,

I=i d.h. das Makro von Claus hat funktioniert - danke dafür! Allerdings hab ich jetzt auch die Problematik mit Verbinden verstanden. Ändere ich jetzt nämlich das Startdatum der Zeitschiene, können die Formeln (welche durch das Verbinden nicht mehr da sind) nicht greifen. Habt ihr dafür eine Lösung?

Schöne Grüße
Verena
Loading...