Thema Datum  Von Nutzer Rating
Antwort
15.08.2018 15:11:59 Clemens
NotSolved
15.08.2018 18:12:10 xlKing
Solved
Rot UDF Werte auf Ungleichheit prüfen und Leerzellen ignorieren
15.08.2018 21:46:18 xlKing
NotSolved
16.08.2018 00:51:59 Ulrich
NotSolved
19.08.2018 15:23:49 xlKing
NotSolved
23.08.2018 20:42:59 Clemens
NotSolved
25.08.2018 13:54:08 Gast62780
NotSolved

Ansicht des Beitrags:
Von:
xlKing
Datum:
15.08.2018 21:46:18
Views:
1110
Rating: Antwort:
  Ja
Thema:
UDF Werte auf Ungleichheit prüfen und Leerzellen ignorieren

Hallo Clemens,

hab grad noch ein Problem entdeckt. In meinem ersten Beispiel werden leider nur die leeren Zellen "ignoriert", die sich außerhalb des UsedRange befinden. Sobald jedoch einmal ein Wert eingegeben und dann wieder gelöscht wurde, gilt die nun wieder leere Zelle als Unterschied zu den anderen Werten. Das Problem könntest du - zumindest theoretisch - mit folgender Erweiterung umgehen.

Public Function CompVals(Testrange As Range) As String
  If IsNull(Testrange.SpecialCells(xlCellTypeConstants).Text) Then CompVals = "Not Equal" Else CompVals = "All Equal"
End Function

bzw. falls du im Bereich FixWerte und Formeln gleichermaßen hast, dann so:

Public Function CompVals(TestRange As Range) As String
  On Error Resume Next
  Dim r1 As Range, r2 As Range
  Set r1 = TestRange.SpecialCells(xlCellTypeConstants)
  Set r2 = TestRange.SpecialCells(xlCellTypeFormulas)
  
  If Not r1 Is Nothing And Not r2 Is Nothing Then
    Set r1 = Union(r1, r2)
  ElseIf Not r2 Is Nothing Then
    Set r1 = r2
  ElseIf r1 Is Nothing And r2 Is Nothing Then
    Set r1 = TestRange
  End If
  
  If IsNull(r1.Text) Then CompVals = "not Equal" Else CompVals = "All Equal"
End Function

Beim Aufruf aus einer Sub heraus, gibts damit keine Probleme. Leider wird aber, zumindest bei mir, die SpecialCells-Methode bei Verwendung der Funktion als Worksheet-Function (also wenn der Caller eine Zelle ist) ignoriert. Das beweist die folgende Funktion:

Function Test(Bereich As Range)
  Test = Bereich.SpecialCells(xlCellTypeConstants).Address
End Function

Am Calculation-Modus kann es diesmal nicht liegen, denn andere Methoden wie z.B. .Offset oder .Resize funktionieren tadellos. Ein weiterer VBA-Bug für meine Sammlung! Microsoft-Programmierer, können eben auch nicht jede selten genutzte Kombination bedenken. Werde morgen mal testen, ob das Problem in neueren Versionen auch noch vorhanden ist.

Falls auch bei dir der Lösungsvorschlag nicht funktioniert bleibt wohl doch nur, die Kombination mit der langsamen Schleife. Bei größeren Bereichen mit Leerzellen oder ungleichen Werten musst du dann halt ein bisschen warten:

Public Function CompVals(TestRange As Range) As String
  If IsNull(TestRange.Text) Then
     For Each v In TestRange
        If v <> "" Then
           If Not IsEmpty(w) And v <> w Then
              CompVals = "Not Equal"
              Exit Function
           End If
        w = v
        End If
     Next
  End If
  CompVals = "All Equal"
End Function

Gruß Mr. K.


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
15.08.2018 15:11:59 Clemens
NotSolved
15.08.2018 18:12:10 xlKing
Solved
Rot UDF Werte auf Ungleichheit prüfen und Leerzellen ignorieren
15.08.2018 21:46:18 xlKing
NotSolved
16.08.2018 00:51:59 Ulrich
NotSolved
19.08.2018 15:23:49 xlKing
NotSolved
23.08.2018 20:42:59 Clemens
NotSolved
25.08.2018 13:54:08 Gast62780
NotSolved