Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: ActiveSheet.Range Mehrere Bereiche

ActiveSheet.Range Mehrere Bereiche
Hans
Hallo Leute
Kann mir jemand helfen?
Ich würde gerne wissen wie man mehrere Bereiche mit ActiveSheet.Range markieren kann
Set Bereich = ActiveSheet.Range("C5:C12")
Also, ich möchte Bereiche wie C5:C12, E5:E12, G5:12 .... markieren.
lg
Hans
Anzeige
AW: ActiveSheet.Range Mehrere Bereiche
22.03.2010 22:48:46
Schorschi
Hallo Hans,
evtl. so...
Public Sub BerMark()
Dim Bereich, Bereich1, Bereich2 As Range
Set Bereich = ActiveSheet.Range("C5:C12")
Set Bereich1 = ActiveSheet.Range("E5:E12")
Set Bereich2 = ActiveSheet.Range("G5:G12")
Union(Bereich, Bereich1, Bereich2).Activate
End Sub

Gruss
Schorschi
Anzeige
AW: ActiveSheet.Range Mehrere Bereiche
22.03.2010 23:00:28
Hans
Danke Schorschi ..
Ich habe das mit dem Union eingefügt .. aber dann kommt im weiteren teil ein Fehler, da die Variale "Bereich" alleine nicht mehr zutrifft.
Vlt kannst du oder ein anderer mir weiterhelfen
Lg
Hans

Private Sub Worksheet_Change(ByVal Ziel As Excel.Range)
Dim Bereich1, Bereich2, Bereich3, Bereich4, Bereich5, Bereich6, Bereich7, Bereich8,  _
Bereich9 As Range
Dim rngZelle As Range
Set Bereich1 = ActiveSheet.Range("C5:C12")
Set Bereich2 = ActiveSheet.Range("E5:E12")
Set Bereich3 = ActiveSheet.Range("H5:H12")
Set Bereich4 = ActiveSheet.Range("J5:J12")
Set Bereich5 = ActiveSheet.Range("L5:L12")
Set Bereich6 = ActiveSheet.Range("N5:N12")
Set Bereich7 = ActiveSheet.Range("P5:P12")
Set Bereich8 = ActiveSheet.Range("R5:R12")
Set Bereich9 = ActiveSheet.Range("U5:U12")
Set Bereich10 = ActiveSheet.Range("W5:W12")
Union(Bereich1, Bereich2, Bereich3, Bereich4, Bereich5, Bereich6, Bereich7, Bereich8, Bereich9). _
Activate
For Each rngZelle In Bereich
Select Case rngZelle.Value
Case Is = ""
rngZelle.Interior.Color = RGB(255, 255, 255)
Case Is = 0
rngZelle.Interior.Color = RGB(0, 255, 0)
Case Is = "Leihgerät"
rngZelle.Interior.Color = RGB(255, 255, 153)
Case Is  Range("W2")
rngZelle.Interior.Color = RGB(255, 0, 0)
End Select
Next
End Sub

Anzeige
AW: ActiveSheet.Range Mehrere Bereiche
22.03.2010 22:56:14
Oberschlumpf
Hi Hans
So einfach funktioniert es wohl nicht (zumindest ich hab es nicht geschafft)
Ich versuchte es mit
Set Bereich = ActiveSheet.Range("C5:C12, E5:E12, G5:12")
was aber mit einer Fehlermeldung abgebrochen wurde.
Aber der Versuch mit
Set Bereich = ActiveSheet.Range("C5:G12")
funktioniert, was aber zur Folge hat, dass eben auch die Spalten D + F mit eingeschlossen werden, was du ja nicht möchtest.
Dass der erste Versuch nicht funzt, liegt, glaube ich, daran, dass es in VBA nicht möglich ist, nicht zusammenhängende Bereiche zu "vereinen".
Daher kann ich dir nur diesen Workaround vorschlagen:
Sub sbMehrereBereiche()
Dim liSpalte As Integer, lloZeile As Long
For liSpalte = 3 To 7 Step 2
For lloZeile = 5 To 12
'hier dein Code, mit
'Cells(lloZeile, liSpalte).Value = ?
oder
'? = Cells(lloZeile, liSpalte).Value
'der ausgeführt werden soll
Next
Next
End Sub
Die erste Schleife durchläuft die Spalten 3 (C) bis 7 (G), überspringt aber durch Step 2 die Spalten 4 (D) + 6 (F).
Und die zweite Schleife durchläuft immer die Zeilen 5 - 12.
Und innerhalb der zweiten Schleife muss dann dein Code stehen.
Hilfts?
Wenn nicht, dann zeig uns eine Bsp-Datei, in der du uns erklärst, was geschehen soll.
Ciao
Thorsten
Anzeige
AW: ActiveSheet.Range Mehrere Bereiche
22.03.2010 23:14:14
Hans
Hallo
Ich habe die Datei mal hochgeladen.
Was ich machen möchte ist ....
mit einer Bedingten Formatierung gehen ja nur drei Bedingungen.
Daher soll mit VBA folgende Bedingungen erfüllt werden
Ist die Zelle = 0 , dann Hintergrund Grün
Ist die Zelle ist die Zelle > 0 dann Rot
Und wenn da "Leihgerät" drinnen steht Gelb
lg
Hans
https://www.herber.de/bbs/user/68746.xls
Anzeige
AW: ActiveSheet.Range Mehrere Bereiche
23.03.2010 00:22:25
Oberschlumpf
Hi Hans
Versuch es mal hiermit:
https://www.herber.de/bbs/user/68749.xls
Du wirst aber deinen Code anpassen müssen, da ich die Spalten F + S löschen musste, da sonst die Regelmäßigkeit - jede zweite Spalte - unterbrochen wurde.
Hilfts denn?
Ciao
Thorsten
Anzeige
AW: ActiveSheet.Range Mehrere Bereiche
23.03.2010 08:40:13
hary
Hallo Hans
teste mal so. Problem evtl mit der Null.

Sub b()
Dim Bereich1, Bereich2, Bereich3, Bereich4, Bereich5, Bereich6, Bereich7, Bereich8, _
Bereich9, Bereich10 As Range
Dim rngZelle As Range
Dim Bereich As Range
Set Bereich1 = ActiveSheet.Range("C5:C12")
Set Bereich2 = ActiveSheet.Range("E5:E12")
Set Bereich3 = ActiveSheet.Range("H5:H12")
Set Bereich4 = ActiveSheet.Range("J5:J12")
Set Bereich5 = ActiveSheet.Range("L5:L12")
Set Bereich6 = ActiveSheet.Range("N5:N12")
Set Bereich7 = ActiveSheet.Range("P5:P12")
Set Bereich8 = ActiveSheet.Range("R5:R12")
Set Bereich9 = ActiveSheet.Range("U5:U12")
Set Bereich10 = ActiveSheet.Range("W5:W12")
Set Bereich = Union(Bereich1, Bereich2, Bereich3, Bereich4, Bereich5, Bereich6, Bereich7,  _
Bereich8, Bereich9)
For Each rngZelle In Bereich
Select Case rngZelle.Value
Case Is = ""
rngZelle.Interior.Color = RGB(255, 255, 255)
Case Is = "0"
rngZelle.Interior.Color = RGB(0, 255, 0)
Case Is = "Leihgerät"
rngZelle.Interior.Color = RGB(255, 255, 153)
Case Is  Range("W2")
rngZelle.Interior.Color = RGB(255, 0, 0)
End Select
Next
End Sub

sieht dann hier im Test,so aus.
Userbild
gruss hary
Anzeige
AW: ActiveSheet.Range Mehrere Bereiche
23.03.2010 09:24:48
Schorschi
Hallo Hans,
so müsste es wie gewünscht gehen...
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Bereich, Zone(1 To 29), rngZelle As Range
Set Zone1 = ActiveSheet.Range("C5:C12")
Set Zone2 = ActiveSheet.Range("E5:E12")
Set Zone3 = ActiveSheet.Range("H5:H12")
Set Zone4 = ActiveSheet.Range("J5:J12")
Set Zone5 = ActiveSheet.Range("L5:L12")
Set Zone6 = ActiveSheet.Range("N5:N12")
Set Zone7 = ActiveSheet.Range("P5:P12")
Set Zone8 = ActiveSheet.Range("R5:R12")
Set Zone9 = ActiveSheet.Range("U5:U12")
Set Zone10 = ActiveSheet.Range("W5:W12")
Set Zone11 = ActiveSheet.Range("H17:H24")
Set Zone12 = ActiveSheet.Range("J17:J24")
Set Zone13 = ActiveSheet.Range("L17:L24")
Set Zone14 = ActiveSheet.Range("N17:N24")
Set Zone15 = ActiveSheet.Range("P17:P24")
Set Zone16 = ActiveSheet.Range("R17:R24")
Set Zone17 = ActiveSheet.Range("C30:C37")
Set Zone18 = ActiveSheet.Range("E30:E37")
Set Zone19 = ActiveSheet.Range("H30:H37")
Set Zone20 = ActiveSheet.Range("J30:J37")
Set Zone21 = ActiveSheet.Range("L30:L37")
Set Zone22 = ActiveSheet.Range("N30:N37")
Set Zone23 = ActiveSheet.Range("P30:P37")
Set Zone24 = ActiveSheet.Range("R30:R37")
Set Zone25 = ActiveSheet.Range("U30:U37")
Set Zone26 = ActiveSheet.Range("W30:W37")
Set Zone27 = ActiveSheet.Range("Z2:Z41")
Set Zone28 = ActiveSheet.Range("AB2:AB41")
Set Zone29 = ActiveSheet.Range("AD2:AD41")
Set Bereich = Application.Union(Zone1, Zone2, Zone3, Zone4, Zone5, Zone6, _
Zone7, Zone8, Zone9, Zone10, Zone11, Zone12, Zone13, Zone14, Zone15, Zone16, _
Zone17, Zone18, Zone19, Zone20, Zone21, Zone22, Zone23, Zone24, Zone25, Zone26, _
Zone27, Zone28, Zone29)
If Application.Intersect(Target, Bereich) Is Nothing Then Exit Sub
For Each rngZelle In Bereich
Select Case rngZelle.Value
Case Is = ""
rngZelle.Interior.ColorIndex = xlNone  ' keine Füllung
Case Is = "Leihgerät"
rngZelle.Interior.ColorIndex = 6      ' gelb 6
Case Is = 0
rngZelle.Interior.ColorIndex = 10     ' grün
Case Is = 1
rngZelle.Interior.ColorIndex = 3      ' rot
End Select
Next
End Sub
Problemlösung bei: "" und 0
Formeln anpassen: =WENN(Z14="";"";Z14) usw.
Achtung löschen reicht dann hier nicht aus, die Eingabe der 0 ist erforderlich.
Gruss
Schorschi
Anzeige
AW: ActiveSheet.Range Mehrere Bereiche
23.03.2010 14:16:19
hary
Hallo Hans
hab mal rumprobiert, geht auch so. Dieser Code getestet mit 2007, evtl aendern in Set Bereich = Range..usw

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Bereich As Range
Dim rngZelle As Range
Set Bereich = ActiveSheet.Range("C5:C12,E5:E12,H5:H12,J5:J12,L5:L12,N5:N12,P5:P12,R5:R12,U5:U12, _
W5:W12")
For Each rngZelle In Bereich
Select Case rngZelle.Value
Case Is = ""
rngZelle.Interior.Color = RGB(255, 255, 255)
Case Is = "0"
rngZelle.Interior.Color = RGB(0, 255, 0)
Case Is = "Leihgerät"
rngZelle.Interior.Color = RGB(255, 255, 153)
Case Is  Range("W2")
rngZelle.Interior.Color = RGB(255, 0, 0)
End Select
Next
End Sub

gruss hary
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Aktives Blatt: Mehrere Bereiche mit VBA bearbeiten


Schritt-für-Schritt-Anleitung

Um mehrere Bereiche mit ActiveSheet.Range in Excel VBA zu bearbeiten, kannst du folgende Schritte durchführen:

  1. Öffne den Visual Basic for Applications (VBA) Editor (drücke ALT + F11).
  2. Füge ein neues Modul hinzu (Einfügen > Modul).
  3. Schreibe den folgenden Code, um mehrere Bereiche zu definieren und sie mit Union zu kombinieren:
Sub BereicheMarkieren()
    Dim Bereich1 As Range, Bereich2 As Range, Bereich3 As Range
    Set Bereich1 = ActiveSheet.Range("C5:C12")
    Set Bereich2 = ActiveSheet.Range("E5:E12")
    Set Bereich3 = ActiveSheet.Range("G5:G12")

    Union(Bereich1, Bereich2, Bereich3).Select
End Sub
  1. Führe das Makro aus, um die definierten Bereiche auszuwählen.

Häufige Fehler und Lösungen

  • Fehler: "Typen nicht übereinstimmend"

    • Möglicherweise hast du vergessen, die Variablen als Range zu deklarieren. Stelle sicher, dass alle Bereiche korrekt als Range deklariert sind.
  • Fehler: "Fehler beim Ausführen der Methode 'Range'"

    • Überprüfe die Syntax deiner Range-Definition. Sie sollte korrekte Zellreferenzen haben, z.B. ("C5:C12") und nicht ("C5:G12"), wenn du nicht zusammenhängende Bereiche auswählen möchtest.

Alternative Methoden

Wenn du nicht die Union-Methode verwenden möchtest, kannst du auch Schleifen nutzen, um durch mehrere nicht zusammenhängende Bereiche zu iterieren. Hier ist ein Beispiel:

Sub MehrereBereiche()
    Dim liSpalte As Integer, lloZeile As Long
    For liSpalte = 3 To 7 Step 2 ' C bis G, aber D und F überspringen
        For lloZeile = 5 To 12
            ' Hier kannst du deinen Code einfügen, um mit den Zellen zu arbeiten
            Cells(lloZeile, liSpalte).Value = "Beispiel" ' Beispielwert setzen
        Next
    Next
End Sub

Praktische Beispiele

Hier sind einige praktische Beispiele, wie du ActiveSheet.Range verwenden kannst:

  1. Hintergrundfarbe ändern basierend auf dem Zellwert:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Bereich As Range
    Set Bereich = Union(ActiveSheet.Range("C5:C12"), ActiveSheet.Range("E5:E12"))

    If Not Intersect(Target, Bereich) Is Nothing Then
        Dim rngZelle As Range
        For Each rngZelle In Bereich
            Select Case rngZelle.Value
                Case Is = ""
                    rngZelle.Interior.Color = RGB(255, 255, 255)
                Case Is = 0
                    rngZelle.Interior.Color = RGB(0, 255, 0)
                Case Is = "Leihgerät"
                    rngZelle.Interior.Color = RGB(255, 255, 153)
            End Select
        Next rngZelle
    End If
End Sub
  1. Bereiche in einer Variablen speichern:
Dim GesamtBereich As Range
Set GesamtBereich = Union(ActiveSheet.Range("C5:C12"), ActiveSheet.Range("E5:E12"), ActiveSheet.Range("G5:G12"))
GesamtBereich.Select

Tipps für Profis

  • Nutze Application.Union, um sicherzustellen, dass du mehrere Range-Objekte ohne Fehler kombinieren kannst.
  • Achte darauf, dass die Zellreferenzen in der Range-Methode korrekt sind, um Laufzeitfehler zu vermeiden.
  • Verwende With-Anweisungen, um den Code leserlicher zu machen:
With ActiveSheet
    .Range("C5:C12").Interior.Color = RGB(255, 0, 0)
    .Range("E5:E12").Interior.Color = RGB(0, 255, 0)
End With

FAQ: Häufige Fragen

1. Wie kann ich mehrere nicht zusammenhängende Bereiche in einer Zeile definieren?
Du kannst sie mit Kommas in der Range-Methode kombinieren, z.B. ActiveSheet.Range("C5:C12,E5:E12,G5:G12").

2. Kann ich die Union-Methode mit mehr als drei Bereichen verwenden?
Ja, du kannst beliebig viele Bereiche mit der Union-Methode kombinieren, solange du sie einzeln definierst.

3. Was ist der Unterschied zwischen ActiveSheet.Range und Worksheets("Sheet1").Range?
ActiveSheet.Range bezieht sich auf das derzeit aktive Arbeitsblatt, während Worksheets("Sheet1").Range sich auf ein spezifisches Arbeitsblatt namens "Sheet1" bezieht.

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