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

Range mehrere Bereiche setzen

Forumthread: Range mehrere Bereiche setzen

Range mehrere Bereiche setzen
24.09.2014 20:27:41
Sascha

Hallo liebe Experten,
Ich steh auf dem Schlauch.
Ich möchte eine doppelte Eingabe Abfangen.
Wenn ich nur einen Bereich angebe funktioniert es tadellos.
Mehrere Bereiche zu definieren, schaffe ich nicht.
Obwohl ich den Range-Bereich im sub test() genau gleich angebe. Beim sub test() markiert es mir aber die Bereiche so wie ich es will.
Kann mir jemand helfen?

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Bereich As Range
Set Bereich = Range("A3:A15,B3:B9,C3:C9")
If Target.Cells.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
If Intersect(Bereich, Target) Is Nothing Then Exit Sub
If WorksheetFunction.CountIf(Bereich, Target.Value) > 1 Then
MsgBox ("Doppelter Eintrag nicht zulässig")
Application.EnableEvents = False
Target.Value = ""
End If
End Sub
Sub test()
Sheets("Hilf").Range("A3:A15,B3:B9,C3:C9").Select
End Sub
Liebe Grüsse
Sascha

Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Range mehrere Bereiche setzen
24.09.2014 22:21:05
Beverly
Hi Sascha,
su kannst es so lösen:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Bereich As Range
Set Bereich = Range("A3:A15,B3:B9,C3:C9")
If Target.Cells.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
If Intersect(Bereich, Target) Is Nothing Then Exit Sub
If WorksheetFunction.CountIf(Bereich.Areas(1), Target.Value) + _
WorksheetFunction.CountIf(Bereich.Areas(2), Target.Value) + _
WorksheetFunction.CountIf(Bereich.Areas(3), Target.Value) > 1 Then
MsgBox ("Doppelter Eintrag nicht zulässig")
Application.EnableEvents = False
Target.Value = ""
End If
End Sub


Anzeige
AW: Range mehrere Bereiche setzen
25.09.2014 07:20:54
Sascha
Hallo Beverly,
Vielen Dank für Deine Hilfe.
Leider funktioniert es so auch noch nicht.
Nun funktioniert es NUR im Bereich ("C3:C9").
Die anderen beiden Bereiche werden ignoriert...
Hast Du noch eine andere Idee?
Gruss Sascha

AW: Range mehrere Bereiche setzen
25.09.2014 08:18:38
Beverly
Hi Sascha,
du musst die Reaktion auf die Eingabe auch wieder einschalten (diesen generellen Fehler hatte ich in deinem Ausgangscode übersehen):
    If WorksheetFunction.CountIf(Bereich.Areas(1), Target.Value) + _
WorksheetFunction.CountIf(Bereich.Areas(2), Target.Value) + _
WorksheetFunction.CountIf(Bereich.Areas(3), Target.Value) > 1 Then
MsgBox ("Doppelter Eintrag nicht zulässig")
Application.EnableEvents = False
Target.Value = ""
Application.EnableEvents = True
End If


Anzeige
AW: Range mehrere Bereiche setzen
25.09.2014 19:06:55
Sascha
Hallo Beverly,
Aaaaahhh Super!
So funktioniert es Prima.
Bin froh!
Vielen Dank nochmals für Deine Hilfe!
Ganz liebe Grüsse
Sascha

AW: Range mehrere Bereiche setzen
25.09.2014 07:42:25
Sascha
Hallo,
Ich habe folgende Lösung gefunden.
So funktioniert es:
Private Sub Worksheet_Change(ByVal Target As Range)
If Application.WorksheetFunction.CountIf(Range("A3:A15"), Target) > 1 Then
Target = ""
MsgBox ("Doppelter Eintrag nicht zulässig")
End If
If Application.WorksheetFunction.CountIf(Range("B3:B9"), Target) > 1 Then
Target = ""
MsgBox ("Doppelter Eintrag nicht zulässig")
End If
If Application.WorksheetFunction.CountIf(Range("C3:C9"), Target) > 1 Then
Target = ""
MsgBox ("Doppelter Eintrag nicht zulässig")
End If
End Sub
Vielen Dank
Gruss Sascha

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Excel VBA: Mehrere Bereiche setzen und doppelte Einträge abfangen


Schritt-für-Schritt-Anleitung

Um in Excel VBA mehrere Bereiche für die Eingabe zu definieren und doppelte Einträge abzufangen, gehe wie folgt vor:

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Rechtsklicke auf den Projektnamen und wähle Einfügen > Modul.

  3. Kopiere den folgenden Code in das Modul:

    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim Bereich As Range
        Set Bereich = Range("A3:A15,B3:B9,C3:C9")
    
        If Target.Cells.Count > 1 Then Exit Sub
        If Target.Value = "" Then Exit Sub
        If Intersect(Bereich, Target) Is Nothing Then Exit Sub
    
        If WorksheetFunction.CountIf(Bereich, Target.Value) > 1 Then
            MsgBox ("Doppelter Eintrag nicht zulässig")
            Application.EnableEvents = False
            Target.Value = ""
            Application.EnableEvents = True
        End If
    End Sub
  4. Teste die Eingabe: Gehe zurück zu deinem Excel-Blatt und gib Werte in die definierten Bereiche ein.


Häufige Fehler und Lösungen

  • Problem: Der Code funktioniert nur für einen bestimmten Bereich.

    • Lösung: Stelle sicher, dass du die Application.EnableEvents nach der Änderung wieder aktivierst, um die Reaktion auf Eingaben zu gewährleisten. Siehe die korrigierte Version im oberen Abschnitt.
  • Problem: Doppelte Einträge werden nicht erkannt.

    • Lösung: Überprüfe, ob die Bereiche korrekt definiert sind. Du kannst die Intersect-Funktion verwenden, um sicherzustellen, dass die Eingabe im richtigen Bereich ist.

Alternative Methoden

Eine Alternative zur Verwendung von Range ist, die Bereiche direkt in der CountIf-Funktion anzugeben:

If Application.WorksheetFunction.CountIf(Range("A3:A15"), Target) > 1 Then
    Target = ""
    MsgBox ("Doppelter Eintrag nicht zulässig")
End If

Diese Methode ermöglicht es dir, jeden Bereich einzeln zu überprüfen, was bei größeren Datenmengen effektiver sein kann.


Praktische Beispiele

Hier ist ein Beispiel, wie du mehrere Bereiche mit der Union-Funktion zusammenfassen kannst:

Dim Bereich As Range
Set Bereich = Application.Union(Range("A3:A15"), Range("B3:B9"), Range("C3:C9"))

Jetzt kannst du mit Bereich arbeiten, als wäre es ein einzelner Bereich. So kannst du die Eingaben in excel vba range mehrere bereiche effizienter verwalten.


Tipps für Profis

  • Nutze ActiveRange in VBA, um schnell auf den aktuellen Bereich zuzugreifen. Dies kann nützlich sein, wenn du dynamisch mit den Eingaben arbeiten möchtest.
  • Verwende die Application.InputBox-Funktion, um Benutzer zur Eingabe neuer Werte aufzufordern und die Eingaben vorab zu validieren.

FAQ: Häufige Fragen

1. Frage
Wie kann ich mehrere Zellen in Excel VBA gleichzeitig auswählen?
Antwort: Du kannst die Union-Methode verwenden, um mehrere Zellen zu kombinieren und sie dann mit der Select-Methode auszuwählen.

2. Frage
Was mache ich, wenn mein Code nicht reagiert?
Antwort: Überprüfe, ob Application.EnableEvents korrekt gesetzt ist. Wenn es False ist, wird der Code nicht auf Änderungen reagieren.

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