Ich suche verzweifelt nach einer Formel (auch VBA) welche eine leere Zelle ausblendet, oder aber die darunterliegende Zelle anzeigt. Ich generiere aus Excel ein Brief, welcher wie folgt mit einer Formel berechnet wird:
Hans Muster
Mustergasse 1
3044 Musterhausen
Nun gibt es jedoch auch weitere Zeilen, zb bei einer Firma:
Hans Muster
Muster GMBH
Mustergassse 1
3044 Musterhausen
Im mom sieht dies folgendermassen aus:
Hans Muster
Mustergasse 1
3044 Musterhausen
Nun müsste die leere Zelle ausgeblendet oder eben die nächst untere „raufgezogen“ werden.
Ich würde den Serienbrief in Word erstellen, die Steuerungsdatei kann da ruhig aus Excel kommen. Mit VBA ginge das zwar in Excel, erscheint mir jedoch zu aufwendig.
Hallo bo
Florian hat schon recht, mit einem Serienbrief in Word geht das wohl einfacher.
Wenn Du Deinen Brief trotzdem im Excel erstellen willst, dann hätte ich einen Vorschlag mit einem VBA-Makro.
Sub ttm2()
Set xyz = Range("E3:E6")
anzz1 = xyz.Rows.Count ' Anzahl Zellen
anzz = anzz1
cr = xyz.Column ' Spalte des Adressbereiches
For i = 1 To anzz1
For Each zelle In xyz
rz = zelle.Row
anzz = anzz - 1
If rz = anzz1 + 2 Then GoTo weiter1
If IsEmpty(zelle) Then
zelle.Value = Cells(rz + 1, cr)
Cells(rz + 1, cr).ClearContents
End If
Next zelle
weiter1:
Next i
End Sub
Anpassen musst Du in diesem Makro ganz oben den Zellbereich, in dem sich eine „normale“ Adresse befindet. Bei mir ist es Range(„E3:E6“).
Das Makro durchläuft diesen Bereich und füllt eine leere Zelle auf mit dem Inhalt unter dieser leeren Zelle.
Wichtig ist: die leeren Zellen müssen wirklich leer sein! Einen Leerschlag in einer leeren Zelle sieht man zwar nicht, aber die Zelle ist trotzdem nicht leer.
Ich hoffe, dieses Makro funktioniert bei Dir wie bei mir, und grüsse freundlich
Niclaus
Das funktioniert schon auch mit Worksheet_Change(). Aber ich sehe nicht, wie und vor allem wo Du das einsetzen willst. Ich würde es mit Doppel-Klick machen. Das folgende Makro löst die „Verschiebung“ aus, wenn Du z. B. auf das oberste Feld Deines Adressbereichs (Hans Muster) einen Doppelklick machst. $E$3 müsstest Du Deiner Tabelle entsprechend anpassen.
Private Sub Worksheet_BeforeDoubleClick _
(ByVal Target As Range, Cancel As Boolean)
If Target.Address = "$E$3" Then \' Adresse anpassen
Call ttm3 \' Name des Makros anpassen
End If
Cancel = True
End Sub
Machbar wäre das auch mit einer Schaltfläche:
Menü Entwicklertools / Steuerelemente / Einfügen
Weisst Du, wie und wo man dieses Worksheet_BeforeDoubleClick einsetzt?