Range möglich ?

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Range möglich ?
von: Dirk C.
Geschrieben am: 14.09.2015 15:11:47

Hallo euch allen,
folgenden Codeschnipsel habe ich hier aus dem Archiv:
If Cells(Target.Row, "M") = "" And Cells(Target.Row, "N") = "" And _
Cells(Target.Row, "O") = "" And Cells(Target.Row, "P") = "" And _
Cells(Target.Row, "Q") = "" And Cells(Target.Row, "R") = "" And _
Cells(Target.Row, "S") = "" Then GoTo SPRUNG1
Meine Versuche, diese Anweisung mittels Bereichsangabe
- z.B.: Cells(Target.Range("M:S")="" Then... -
abzukürzen, scheitern leider kläglich an der richtigen Schreibweise.
Wie muß dieser Ausdruck lauten, wenn ich folgende Spalten in der jeweils aktuellen Zeile betrachten möchte:
M bis S, U, W, AA:AC
Ich bin für jede Hilfe dankbar.
MfG
Dirk

Bild

Betrifft: Nein, Range nicht möglich für Vergleiche...
von: EtoPHG
Geschrieben am: 14.09.2015 15:38:34
Hallo Dirk,
Den Ausdruck "...wenn ich folgende Spalten in der jeweils aktuellen Zeile betrachten möchte
kann ich nicht interpretieren!
Grundsätzlich kannst du keine Vergleiche einer Range (mit mehreren Zellen) mit konstanten Werten (auch nicht mit "") vergleichen! Du könntest aber gegen die Anzahl Werte in einer Range vergleichen, z.B. so:

    If WorksheetFunction.CountA(Range(Cells(Target.Row, 13), Cells(Target.Row, 19))) = 0 And _
       WorksheetFunction.CountA(Cells(Target.Row, 21)) = 0 And _
       WorksheetFunction.CountA(Cells(Target.Row, 23)) = 0 And _
       WorksheetFunction.CountA(Range(Cells(Target.Row, 27), Cells(Target.Row, 29))) = 0 Then
       MsgBox "Alles leer!"
    Else
       MsgBox "Irgendwas drin"
    End If
Gruess Hansueli

Bild

Betrifft: AW: Nein, Range nicht möglich für Vergleiche...
von: Dirk C.
Geschrieben am: 14.09.2015 16:25:34
Hallo Hansueli,
du hast meine Fragestellung genau richtig interpretiert und deine Variante funktioniert bestens.
War schlecht von mir formuliert, bitte entschuldige.
Vielen Dank auch für deine Erklärungen.
Die einzelnen Zellen in dem Bereich (M bis S, U, W, AA:AC) enthalten entweder ein "x" oder sind leer.
Ein Sonderfall kann sein, daß alle Zellen leer sind - dafür nutze ich diesen Teil des Codes.
Und da ich schreibfaul bin, dachte ich, es gäbe eine kürzere Schreibweise.
Vllt. in der Art: If IsEmpty Range...
Doch anscheinend war ich da mal wieder auf dem Holzweg (?)...
MfG
Dirk

Bild

Betrifft: Kürzer per UDF
von: RPP63
Geschrieben am: 14.09.2015 18:05:53
Hallo!
Teste mal:

Sub Proof()
Dim AZ As Long
AZ = ActiveCell.Row
If IstLeer(Union(Range(Cells(AZ, 13), Cells(AZ, 19)), Cells(AZ, 21), _
   Cells(AZ, 23), Range(Cells(AZ, 27), Cells(AZ, 29)))) = 12 Then
   MsgBox "Alle leer"
End If
End Sub

Function IstLeer(rng As Range)
Dim Counter As Range
For Each Counter In rng
   If IsEmpty(rng(Counter)) Then IstLeer = IstLeer + 1
Next
End Function
Gruß Ralf

Bild

Betrifft: Oder noch kürzer per Intersect...
von: EtoPHG
Geschrieben am: 15.09.2015 09:59:12
Hallo Ralf,

    If WorksheetFunction.CountA(Intersect(Range("M:S,U:U,W:W,AA:AC"), _
                                Rows(ActiveCell.Row))) = 0 Then
        MsgBox "Nix"
    Else
        MsgBox "Something"
    End If
Gruess Hansueli

Bild

Betrifft: gelöst...
von: Dirk C.
Geschrieben am: 16.09.2015 18:10:32
Hallo Hansueli,
genau danach suchte ich.
Auch Ralf's Variante funktioniert.
Euch beiden vielen Dank.
MfG
Dirk

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Range möglich ?"