Thema Datum  Von Nutzer Rating
Antwort
17.08.2021 12:18:29 Alexander
NotSolved
17.08.2021 13:32:35 Gast86125
NotSolved
17.08.2021 14:11:11 Alexander
NotSolved
17.08.2021 14:38:35 Alexqander
NotSolved
Rot Benutzerdefinierte Funktion "Mittel"
17.08.2021 19:14:54 Gast22906
NotSolved
19.08.2021 10:18:57 Alexander
NotSolved
19.08.2021 22:46:16 Gast32926
NotSolved

Ansicht des Beitrags:
Von:
Gast22906
Datum:
17.08.2021 19:14:54
Views:
166
Rating: Antwort:
  Ja
Thema:
Benutzerdefinierte Funktion "Mittel"

So scheint es zu funktionieren. Ich verstehe trotzdem nicht so ganz, warum an der Stelle nicht direkt zu dem ElseIf übergegangen wird.

 Betrachten wir das mal:

  'Beispiel: kommt eigentlich aus der Parameterliste
  Dim Argument As Excel.Range
  Set Argument = Range("A1:C3")
  
  Dim Zelle As Excel.Range
  Dim Summe As Double
  Dim Anzahl As Double
  
  If IsNumeric(Argument) And Argument >= 0 Then
    Summe = Summe + Argument
    Anzahl = Anzahl + 1
    
  ElseIf TypeName(Argument) = "Range" Then
    
    For Each Zelle In Argument
      If IsNumeric(Zelle.Value) And Zelle.Value >= 0 Then
        Summe = Summe + Zelle.Value
        Anzahl = Anzahl + 1
      End If
    Next
    
  End If

Was passiert den in dem Fall (markierte Zeile)?

Argument ist ein Objekt, noch genauer, es ist ein Range-Objekt.


Betrachten wir das mal anders:

Frage: Was passiert wenn man folgendes schreibt?

  Dim retVal As Variant
  
  retVal = Range("A1")    '#1
  retVal = Range("A1:C4") '#2

Im Fall #1 steht in retVal der Zelleninhalt von A1 drin.

Im Fall #2 steht in retVal ein 2D-Array (4 Zeilen, 3 Spalten) mit den jeweiligen Zelleninhalten von A1 bis C4 drin.

 

Was erwartet die Funktion IsNumeric()? Laut Dokumentation erwartet sie einen Ausdruck - ein Array ist aber kein Ausdruck; Argument >= 0 würde auch einen Fehler verursachen.

Du erinnerst dich sicher noch an eines deiner anderen Themen, wo es kurz darum ging das jemand meinte: "Wozu der Test auf Objekt, ist doch egal?"

Tja, nun sieht man wie "egal" das ist - nämlich gar nicht egal. ;o) (Ich hoffe die Trantüte von damals liest das hier.)


Entweder du löst es wie du es hast, oder du änderst die Reihenfolge:

  '...

  For Each Argument In AlleArgumente
      If NurPosZahlen = True Then
          If TypeName(Argument) = "Range" Then
              For Each Zelle In Argument
                  If IsNumeric(Zelle.Value) And Zelle.Value >= 0 Then
                      Summe = Summe + Zelle.Value
                      Anzahl = Anzahl + 1
                  End If
              Next
          Else
              If IsNumeric(Argument) And Argument >= 0 Then
                  Summe = Summe + Argument
                  Anzahl = Anzahl + 1
              End If
          End If
  
  '...

 


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
17.08.2021 12:18:29 Alexander
NotSolved
17.08.2021 13:32:35 Gast86125
NotSolved
17.08.2021 14:11:11 Alexander
NotSolved
17.08.2021 14:38:35 Alexqander
NotSolved
Rot Benutzerdefinierte Funktion "Mittel"
17.08.2021 19:14:54 Gast22906
NotSolved
19.08.2021 10:18:57 Alexander
NotSolved
19.08.2021 22:46:16 Gast32926
NotSolved