expertenaustausch > microsoft.* > microsoft.excel

jochum.ve (15.01.2019, 15:34)
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 (15.01.2019, 17:20)
Hallo Verena,

Am Tue, 15 Jan 2019 05:34:31 -0800 (PST) schrieb jochum.ve:

[..]
> 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
jochum.ve (15.01.2019, 17:33)
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 (15.01.2019, 18:59)
Hallo Verena,

Am Tue, 15 Jan 2019 07:33:48 -0800 (PST) schrieb jochum.ve:

> 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
Jörg Eisenträger (15.01.2019, 19:08)
On Tue, 15 Jan 2019 05:34:31 -0800 (PST), jochum.ve wrote:

[..]
> ...
> ...
>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 (15.01.2019, 19:12)
On Tue, 15 Jan 2019 18:08:41 +0100, Jörg Eisenträger
<usenet_ei> wrote:

>Wenn ich jetzt mal annehme, dass mit "ADI9" die Zelle AD19 gemeint ist,
>müsste der Anfang des Makros z. B. so aussehen:


Ah, habe ich ich "ADI9" doch falsch interpretiert. Nimm das Makro von
Claus.

Gruß
Jörg
Claus Busch (15.01.2019, 19:16)
Hallo Jörg,

Am Tue, 15 Jan 2019 18:12:03 +0100 schrieb 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
jochum.ve (16.01.2019, 09:12)
Hallo Jörg, hallo Claus,

danke für eure Rückmeldungen. Diese Lösung hat funktioniert:

[..]
> .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
jochum.ve (16.01.2019, 09:23)
Am Dienstag, 15. Januar 2019 18:16:38 UTC+1 schrieb 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
Claus Busch (16.01.2019, 09:57)
Hallo Verena,

Am Tue, 15 Jan 2019 23:12:35 -0800 (PST) schrieb jochum.ve:

> @ 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
jochum.ve (16.01.2019, 11:22)
> 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 (16.01.2019, 11:58)
Hallo Verena,

Am Wed, 16 Jan 2019 01:22:21 -0800 (PST) schrieb jochum.ve:

> Sind nur diese Formeln: =TEXT(L13;"MMM JJ")


schau mal hier:


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
jochum.ve (16.01.2019, 12:38)
> schau mal hier:
>
> 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 zuschmal sind. Hab es hier hochgeladen:
Claus Busch (16.01.2019, 15:06)
Hallo Verena,

Am Wed, 16 Jan 2019 02:38:41 -0800 (PST) schrieb jochum.ve:

> Das funktioniert zwar, aber kann nicht gelesen werden weil meine Spalten zu schmal sind. Hab es hier hochgeladen:
>


es ist nun doch eine Makro-Lösung geworden. Lade dir hier die Mappe
herunter, da Makros in OneDrive deaktiviert sind:


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

Mit freundlichen Grüßen
Claus
jochum.ve (17.01.2019, 09:09)
> es ist nun doch eine Makro-Lösung geworden. Lade dir hier die Mappe
> herunter, da Makros in OneDrive deaktiviert sind:
>
> Wenn du das Startdatum in K6 änderst, wird das Makro gestartet.


Perfekt!! Vielen Dank Claus - hast mir sehr geholfen!
Sg Verena
Ähnliche Themen