VBA Zellen verbinden mit schleife?

2 Antworten

Select = True gibts nicht.

Select und merge musst auch nicht in zwei Zeilen packen. Läuft somit schneller in langen codes.

Und Counter1 muss 4 sein, nicht 3 :-)

Mach mal so: (Selbst getestet)

 Option Explicit

Sub Merge()

Dim Counter1 As Integer
Dim Counter2 As Integer

Counter1 = 4
Counter2 = 7

Worksheets(„Tabelle1“).Activate

Do While Counter1 <= 1000
Range(Cells(Counter1, 1), Cells(Counter2, 1)).Merge

Counter1 = Counter1 + 4
Counter2 = Counter2 + 4

Loop

End Sub

Feedback wäre toll :-P

verreisterNutzer  21.02.2019, 12:06

Vllt auch cool um Variabler zu bleiben:

 Option Explicit

Sub Merge()

Dim Counter1 As Integer
Dim Counter2 As Integer
Dim Sprung As Integer

'Wieviele Zellen sollen verbunden werden?
Sprung = 4
'Welches ist die erste Zeile?
Counter1 = 4


Worksheets(„Tabelle1“).Activate

Do While Counter1 <= 1000
    Counter2 = Counter1 + Sprung - 1
        Range(Cells(Counter1, 1), Cells(Counter2, 1)).Merge
    Counter1 = Counter2 + 1
Loop

End Sub


1
Iamiam  21.02.2019, 12:48
@verreisterNutzer

auch eine gute Lösung, DH ! (und das unerlaubte select=True hab ich glatt übersehen!

2

erst mal: ein etwas umständlich formuliertes, aber eben deshalb recht gut nachvollziehbares µ ! :)

es heißt Do...Loop und (Do...until+Bedingung) aber While+Bedingung...Wend, ich weiß nicht, ob xl deine Formulierung inzwischen akzeptiert und richtig umsetzt.

  • Range(Cells(Counter1,1), Cells(Counter2,1)).Select = True
  • Selection.Merge
  • sollte kürzer gehen: Range(Cells(Counter1,1), Cells(Counter2,1)).Merge

Hast du in einer der zu verbindenden Zellen darunter schon was drinstehen?

Bin nicht sicher: möglicherweise zählt xl schon verbundene Zellen nicht richtig? Tritt der Fehler von anfang an auf oder durchläuft VBA die erste Schleife erfolgreich?

Beim Zeilen löschen zB muss man von unten her anfangen, was bei dir dann so aussähe:

  • Sub Merge()
  • Dim Counter1 As Integer, Counter2 As Integer
  • While Counter1 >2
  • Counter1=998: Counter2=1002
  • Range(Cells(Counter1,1), Cells(Counter2,1)).Merge
  • Counter1 = Counter1 - 4: Counter2 = Counter2 - 4
  • Wend
  • End sub
  • 'kannst du hier kopieren, die Punkte verschwinden im VBA-Editor

rechne die Counter-Nrn nochmal nach, Mein Gehirn hat bei sowas oft eine Windung zuwenig ;-( , aber probiers einfach mal auf einer Blatt-Kopie(!).

Da ich selbst etwas aus der Übung bin, gib bitte Rückmeldung. Und gib zum "FEHLER" immer an, was noch dabei steht, also zB ob Laufzeitfehler oder was sonst.

Im übrigen würde ich verbundene Zellen vermeiden, wo immer es geht: es zählt die Adresse der oberen linken Zelle, die anderen werden als leer angesehen, was sehr häufig zu Fehlern und Fehlinterpretationen führt, auch bei Formeln.

Woher ich das weiß:eigene Erfahrung