Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Bereich definieren (verbinden und ausfüllen)

Bereich definieren (verbinden und ausfüllen)
22.06.2014 21:34:56
urmila
Hallo liebe Community,
ich hoffe ihr könnt mir bei folgendes behilflich sein.
Ich habe eine Liste, darin sind viele Bestellungen. In Spalte B steht immer ein Datum, z.B. 22.06.2013 steht 7 mal, der 21.06.2014 z.B. 3 mal usw.
Ich würde gerne (per VBA) dass in Spalte A abhängig von den Anzahl der einzelnen Tagen der Bereich verbunden wird ("Verbinden und Zentrieren") und darin das dazugehörige Datum eingetragen wird.
Die Spalte B kann ausgeblendet werden bzw. ist ausgeblendet...
Ich hoffe es war verständlich und ihr könnt mir weiterhelfen
LG
Urmila

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Ja, und zwar mal etwas unorthodox, ...
23.06.2014 02:19:37
Luc:-?
…Urmila, Morrn!
Nämlich so, dass alle Datumswerte in den VerbundZellen erhalten bleiben. Auf diese Weise kann man sich mit Fmln einer Zeile, die den ZeilenDatumswert benötigen, stets auf diese Zeile beziehen und muss keine Klimmzüge veranstalten, um sich auf das Datum der jeweils 1.Zelle des Verbunds beziehen zu können.
Die VerbundZellen sind dann auch als Datum formatiert und horizontal zentriert, das Datum erscheint in der 1.Zeile. Soll das anders sein, muss nur die entsprd Konstante am PgmAnfang geändert wdn.
Rahmenlinien und Zell-/Schriftfarben können auch noch nachträgl manuell geändert wdn, auch Schrift fett/kursiv, aber die bereits vorgenommenen Formatierungen sollten dem Pgm überlassen bleiben.

Rem Verbindet Zellen gleichen Inhalts in d.m.d.Konst adVBer festgelegt Spalte;
'   dabei bleibt d.Inhalt aller VbdZellen unverändert erhalten. Achtung! Neben
'   d.letzt Spalte d.benutzt BlattBereichs wdn noch 2 Spp f.HilfsOperat benöt!
'   Vs1.0 -LSr -cd:20140622 -1pub:29140623 herber -lupd:20140622n
Sub VZellen()
Const adVBer$ = "B2:B16", ftVBerW$ = "dd.mm.yyyy", _
VZhorA As Long = xlCenter, VZverA As Long = xlTop
Dim ect(1) As Long, rct As Long, hZv As Long, _
hBer As Range, vBer As Range, xZ As Range, aSh As Worksheet
On Error GoTo fx
Set aSh = ActiveSheet: Set vBer = aSh.Range(adVBer)
With aSh.UsedRange
Set hBer = .Columns(.Columns.Count).Offset(0, 2)
End With
hZv = vBer.Rows(1).Row - hBer.Rows(1).Row
For Each xZ In vBer.Resize(vBer.Rows.Count + 1, vBer.Columns.Count)
On 1 \ (rct + 1) GoTo nx
ect(0) = ect(0) - CInt(xZ = xZ.Offset(-1, 0))
If ect(0) = ect(1) Then
With aSh.Range(hBer.Cells(rct - ect(0) + hZv), hBer.Cells(rct + hZv))
.Merge: .NumberFormat = ftVBerW
.HorizontalAlignment = VZhorA: .VerticalAlignment = VZverA
.Copy
End With
aSh.Range(vBer.Cells(rct - ect(0)), vBer.Cells(rct)) _
.PasteSpecial Paste:=xlPasteFormats
ect(0) = 0: ect(1) = 0
Else: ect(1) = ect(0)
End If
nx:     rct = rct + 1
Next xZ
vBer.Cells(rct).Select: GoTo ex
fx: MsgBox Err.Description, vbCritical, "Fehler " & Err.Number
ex: If Not hBer Is Nothing Then hBer.EntireColumn.Delete
Set hBer = Nothing: Set vBer = Nothing: Set aSh = Nothing
End Sub
Hoffe, das sind auch echte Datumswerte (Zahlen), keine Texte bei dir.
Viel Erfolg, Luc :-?

Anzeige
AW: Danke...
23.06.2014 07:14:34
urmila
Danke Luc,
vielen Dank, genau das ist was ich am Montag morgen brauche :)
*kuss*
Danke und LG
Urmila

Bitte sehr, gern geschehen! Übrigens, ...
23.06.2014 15:06:47
Luc:-?
…Urmila,
in einer derart mit VerbundZellen ausgestatteten Spalte kann auch noch sinnvoll gefiltert wdn, in einer auf die übliche Weise verbundene Zellen enthaltenden Spalte aber nicht! Willst du den Verbund wieder aufheben, kannst du das auf die übliche Weise tun, die Fehlermeldung kann ignoriert wdn.
Gruß + Dank für Kuss, Luc :-?

Anzeige
AW: Bitte sehr, gern geschehen! Übrigens, ...
23.06.2014 16:44:10
urmila
Hallo Luc :-?
auch meinerseits gerngeschehen und danke für die weitere Info.
Ich habe da noch eine andere Frage, aber da mache ich einen neuen Beitrag, vll. ist es dann für die Zukunft einfacher zu finden für andere.... :)
LG
Urmila

Trotzdem habe ich noch was für dich, ...
24.06.2014 00:15:57
Luc:-?
…Urmila,
und eventuelle andere Interessenten, aber ebfalls nur für eine Spalte (viell mache ich das irgendwann mal noch universeller?). Hierbei müssen alle gewünschten Formate bereits in der OriginalTab vorhanden sein, inkl vertikale/horizontale TextAusrichtung, denn sie wdn automatisch übernommen, ebenso wie das ZahlenFormat. Vertikale TextAusrichtung ist dabei besonders wichtig, weil die normalerweise auf unten (xlBottom) eingestellt ist, was zur Folge hätte, dass der Text in der VbZelle ebenfalls ganz unten erscheint, was iaR unüblich ist. Da das sicher häufig vergessen wdn würde, kann man eine entsprd Konst am PgmAnfang so einstellen, dass das korrigiert wird (s. Anmerk im Pgm).

Rem Vbindet Zellen gleichen Inhalts in d.m.d.Konst adVBer festgelegt Spalte;
'   dabei bleibt Inhalt aller VbZellen unvändert erhalt, Formate wdn übnomm.
'   Achtung! Neben d.letzt Spalte d.insgesamt benutzten BlattBereichs müssen
'   sich noch ungenutzte Spalten lt Konst relHSpPos, deren letzte als tempo-
'   rärer ArbBereich benötigt wird, befind! Diese Spalte wird letztendl wie-
'   der entfernt. Außerdem darf d.letzte TabSpnZeile nicht d.letztmögl sein!
'   Vs1.1 -LSr -cd:20140622 -1pub:29140623 herber -lupd:20140623t
Sub VbZellenSp()
Const adVBer$ = "B2:B16", relHSpPos As Integer = 2, vbVAlign As Long = 0
Rem Möglichkn f.Konst vbVAlign:
'   0 -> wie eingestellt, 1 -> Tausch xlBottom gg xlTop u.umgekehrt
'   sonst immer nur lt Konst -> xlTop , xlCenter , xlBottom
Dim ect(1) As Long, hZv As Long, rct As Long, aSh As Worksheet, _
hBer As Range, vBer As Range, vZ As Range, xZ As Range
On Error GoTo fx
Set aSh = ActiveSheet: Set vBer = aSh.Range(adVBer)
If vBer.Columns.Count > 1 Then MsgBox "Nur 1 Spalte zulässig!", _
vbExclamation, "Bereich " & adVBer: GoTo ex
With aSh.UsedRange
Set hBer = .Columns(.Columns.Count).Offset(0, relHSpPos)
End With
hZv = vBer.Rows(1).Row - hBer.Rows(1).Row
For Each xZ In vBer.Resize(vBer.Rows.Count + 1, vBer.Columns.Count)
On 1 \ (rct + 1) GoTo nx
ect(0) = ect(0) - CInt(xZ = xZ.Offset(-1, 0))
If ect(0) = ect(1) Then
Set vZ = aSh.Range(hBer.Cells(rct - ect(0) + hZv), hBer.Cells(rct + hZv))
xZ.Offset(-1, 0).Copy: vZ.Cells(1).PasteSpecial xlPasteFormats: vZ.Merge
With vZ.Borders(xlEdgeTop)
.Weight = xZ.Offset(-ect(0) - 1, 0).Borders(xlEdgeTop).Weight
.LineStyle = xZ.Offset(-ect(0) - 1, 0).Borders(xlEdgeTop).LineStyle
.Color = xZ.Offset(-ect(0) - 1, 0).Borders(xlEdgeTop).Color
End With
With vZ.Borders(xlEdgeLeft)
.Weight = xZ.Offset(-1, 0).Borders(xlEdgeLeft).Weight
.LineStyle = xZ.Offset(-1, 0).Borders(xlEdgeLeft).LineStyle
.Color = xZ.Offset(-1, 0).Borders(xlEdgeLeft).Color
End With
With vZ.Borders(xlEdgeRight)
.Weight = xZ.Offset(-1, 0).Borders(xlEdgeRight).Weight
.LineStyle = xZ.Offset(-1, 0).Borders(xlEdgeRight).LineStyle
.Color = xZ.Offset(-1, 0).Borders(xlEdgeRight).Color
End With
With vZ.Borders(xlEdgeBottom)
.Weight = xZ.Offset(-1, 0).Borders(xlEdgeBottom).Weight
.LineStyle = xZ.Offset(-1, 0).Borders(xlEdgeBottom).LineStyle
.Color = xZ.Offset(-1, 0).Borders(xlEdgeBottom).Color
End With
If vbVAlign > 0 Then
If vZ.VerticalAlignment = xlBottom Then vZ.VerticalAlignment = xlTop _
Else vZ.VerticalAlignment = xlBottom
Else: If vbVAlign 
Viel Erfolg!
Gruß Luc :-?

Anzeige
INFO: Neue universellere Vs1.2 in Arbeit!
28.06.2014 11:05:15
Luc:-?
Demnächst unter einem Folgelink in einem Folge-BT dieses Threads zu finden!
Luc :-?
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige