Excel 2010 bestimmte Zellen markieren

Hallo,

ich habe eine Spalte mit 2 „Datenblöcken“, also Zellenbereiche die mit Daten gefüllt sind. Getrennt sind diese durch eine Leerzelle.
Nun möchte ich den oberen Datenblock einzeln markieren bzw. den unteren.

Soweit so gut!

Da es aber vorkommen kann das Daten (Zellen) hinzukommen oder wegfallen, kann ich nicht immer den gleichen Bereich markieren.
Wie schreibe ich es in VBA das er in der Spalte B alle Zellen bis zur Leerzelle markiert bzw. alle Zellen die danach kommen?

Zum Antworten habe ich leider heute keine Zeit. Schreib’ die Frage einfach mal in das Forum Tabellenkalkulation.

Da kommt dann bestimmt eine gute Antwort.

Gruß JK

Hallo Kasamui,

die folgende Lösung funktioniert nicht nur mit zwei, sondern mit beliebig vielen „Datenblöcken“, wie Du sie beschreibst. Die Sub „Markiere“ erledigt die Aufgabe. Sie erhält als Übergabeparameter die Nummer des Datenblocks und die Spaltennummer, auf das sich das Ganze bezieht. Ein Beispiel für den Aufruf steht in der Sub „Test“.

Ein Feedback, ob es geklappt hat, wäre schön.

Sub Test()
 Markiere 1, 1
End Sub
Sub Markiere(Nr%, Spalte%)
 Dim max%, i%, zAnf%, zEnd%, gefunden%
 max = UsedRange.Rows.Count
 If Nr = 1 Then zAnf = 1 Else zAnf = 0
 zEnd = 0
 gefunden = 0
 For i = 1 To max + 1
 If Cells(i, Spalte) = "" Then
 gefunden = gefunden + 1
 If (Nr \> 1) And (gefunden = Nr - 1) Then zAnf = i + 1
 If gefunden = Nr Then
 zEnd = i - 1
 Exit For
 End If
 End If
 Next
 If (zAnf \> 0) And (zEnd \> 0) Then
 Range(Cells(zAnf, Spalte), Cells(zEnd, Spalte)).Select
 End If
End Sub

Viele Grüße
Dieter Kern

Hallo, 
zur Beantwortung der Frage:
wenn ich das richtig verstanden habe, „Die Anzahl der Daten in der entsprechenden Spalte ist variabel“

In meinen Tabellen würde ich so verfahren:
 „Der Leerzelle zwischen den Datenblöcken würde ich einen Inhalt geben. (z.B. **Block**)
 Damit hat man bei der Suchroutine für beide Zellblöcke eine Start-Endposition.
Es können in beide Blöcke Zellen angehängt oder entfernt werden.
Falls ich Deine Frage falsch verstanden habe, nimm einfach Kontakt zu mir auf. 
[email protected]

Alles Gute,
Werner Kamphaus

Hallo,

probiere es einmal hiermit:
'Selektion 1. Block
Range(Range(„A1“), Range(„A1“).End(xlDown)).Select

'Selektion 2. Block
Range(Range(„A1“).End(xlDown).End(xlDown), Range(„A1“).End(xlDown).End(xlDown).End(xlDown)).Select

Hier werden die Tastensprungfunktionen Strg+Pfeil-runter bzw. die damit verbundenen Markierungsmöglichkeiten Strg+Shift+Pfeil-runter verwendet. Meine Testblöcke haben folgenden Datenbereich:

  1. Block: Zellen A1:A5
  2. Block: Zellen A7:A10
    Zelle A6 ist leer.

Beim nochmaligen ausführen werden beide Blöcke nacheinander selektiert.

Lang her dass ich das machte. Du kannst den inhalt der zelle abfragen. Wenn du eine mit inhalt „“ hast (also nichts im inhalt steht) ist die zelle leer.

Hallo,

Hallo kasamui!

Wie schreibe ich es in VBA das er in der Spalte B alle Zellen
bis zur Leerzelle markiert bzw. alle Zellen die danach kommen?

Das ist relativ einfach :smile:

Option Explicit

Sub Markiere()
Sheets(„DeinTabellenname“).Select 'Die korrekte Tabelle auswählen (falls nötig)
ActiveSheet.Range(„D1“).select 'Evtl. auf die korrekte Spalte anpassen - hier wird die erste Zelle in Spalte D ausgewählt

'Solange die aktuelle Zelle keinen Wert enthält, 1 Zeile weiter runter springen…
While Not ActiveCell.Value = „“
ActiveCell.Offset(1,0).Select
Wend

'Folgende Zeile wählt dann von Zelle D1 bis zur aktuellen markierten Zelle aus

ActiveSheet.Range(„D1:“ & ActiveCell.Address).Select
End Sub

Ich hoffe, ich konnte dir damit weiterhelfen. Das war ja zum Glück nur eine kleine Fingerübung :wink:

Gruß

Manuel

Wie schreibe ich es in VBA das er in der Spalte B alle Zellen
bis zur Leerzelle markiert bzw. alle Zellen die danach kommen?

hallo,

die genaue Art der Programmierung kann ich Dir leider nicht sagen, aber den Weg.
um den ersten Bereich der Zellen zu markieren, musst du über eine Schleife abfragen, welche Zelle leer ist und dann von Zelle 1 bis Leerzelle-1 markieren. der 2. Bereich wird mit Leerzelle+1 bis Ende markiert.
wie gesagt, den genauen Wortlaut kann ich dir leider nicht sagen, da ich zur Zeit im Urlaub bin und selbst erst ausprobieren müsste, aber vielleicht konnte ich wenigstens etwas helfen.

gruß blue

Fantastisch, klappt prima danke!

Hallo,

danke für die Hilfe, ich bekomme jedoch einen Laufzeitfehler „424“ für die Zeile:

max = UsedRange.Rows.Count

Er sagt mir Objekt erforderlich!

Hallo Werner,

dahingehend guter Ansatz, weil ich ja nicht ausschließen kann, das neue Daten nicht neue Leerzellen einbringen, werde das mal ausprobieren!

Hallo Kasamui,

bei mir läuft’s.
Ändere doch mal die Zeile, die den Fehler bringt, in:

max = ActiveSheet.UsedRange.Rows.Count

Meine Routine geht natürlich davon aus, dass sich Deine Datenblöcke im aktiven Tabellenblatt befinden.

Wenn es nicht funktioniert, schicke mir mal bitte Deine Excel-Datei.

Gruß Dieter

ich hoffe ich verstehe die frage richtig.
„eine Spalte mit 2 Datenblöcken“ verwirrt mich ein wenig…

Sub LoeschenBisZweiFrei()
'Range(„B1“).Select
Dim frei As Boolean
frei = False
Do Until frei And ActiveCell = „“
If ActiveCell = „“ Then
'löscht die aktuelle Zeile
Selection.EntireRow.Delete
frei = True
Else
'versetzt den cursor nach unten
ActiveCell.Offset(1, 0).Select
frei = False
End If
Loop
End Sub

Der Algorithmus funktioniert so:
.du markierst eine Zelle und startest.
.der algorithmus prüft die Zelle, ob sie leer ist
…ist sie nicht leer, nimmt er die nächste
…ist sie leer wird die Zeile gelöscht.
…war schon die vorherige leer, dann hört der algorithmus auf.

Wenn der Algorithmus immer in B1 (oder wo anders) anfangen soll, musst du das hochkomma der 2. zeile löschen.
Wenn der Algorithmus vertikal arbeiten soll musst du die 1 und die 0 bei „ActiveCell.Offset(1, 0).Select“ tauschen und wenn der Algorithmus von hinten nach vorn arbeiten soll, musst du die 1 durch -1 ersetzen.

hoffe du brauchst das noch.