Clever-Excel-Forum

Normale Version: VBA-Formel Erklärung
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
[attachment=18478]
Hallo liebe Leute!

Kann mir bitte jemand erklären, warum in "Range" 1, 0, 2 steht und was "Match" bedeutet?

Range(Zeile, Spalte)?

Das Programm funktioniert, aber ich will auch wissen warum.

Cells(WorksheetFunction.Match(WorksheetFunction.Large _
             (Range("b:b"), 1 ), Range("b:b"),  0),  2)                                                           
                                  [
Bild bitte so als Datei hochladen: Klick mich!
]                        [
Bild bitte so als Datei hochladen: Klick mich!
]   [
Bild bitte so als Datei hochladen: Klick mich!
]
Zum besseren Verständnis Datei im Anhang.

Herzlichen Dank im Voraus,

Atnik
Code:
(WorksheetFunction.Small(Range("b:b"), 1), Range("b:b"), 0), 2)) _
           + (Cells(WorksheetFunction.Match(WorksheetFunction.Large _
           (Range("b:b"), 1), Range("b:b"), 0), 2))


Das ist eine zusammengesetzte formel

WorksheetFunction.Small(Range("b:b"), 1) =  KKleinste(B:B;1) 

und 

WorksheetFunction.Match(WorksheetFunction.Large(Range("b:b"), 1), Range("b:b"), 0)       =       Vergleich(Länge(B:B;1);B:B;0)
Hi,

wenn man den Cursor in das Wort small setzt und F1 drückt öffnet sich die Hilfe!
Zitat:Excel-Entwicklerreferenz
WorksheetFunction.Small-Methode
Gibt den k-kleinsten Wert in einem Datensatz zurück. Mit dieser Funktion können Sie Werte mit einer bestimmten relativen Bedeutung in einem Datensatz zurückgeben.
Syntax
Ausdruck.Small(Arg1, Arg2)
Ausdruck   Eine Variable, die ein WorksheetFunction-Objekt darstellt.
Parameter
Name
Erforderlich/Optional
Datentyp
Beschreibung
Arg1
Erforderlich
Variant
Array – ein Array oder Bereich von numerischen Daten, für das bzw. den der k-kleinste Wert ermittelt werden soll.
Arg2
Erforderlich
Double
K – die Position (ausgehend vom kleinsten Wert) im Array oder im Bereich der zurückzugebenden Daten.
Rückgabewert
Double
Anmerkungen
  • Wenn Array leer ist, gibt SMALL den Fehlerwert #NUM! zurück.
  • Wenn k ≤ 0 ist oder die Anzahl der Datenpunkte überschreitet, gibt SMALL den Fehlerwert #NUM! zurück.
  • Wenn N die Anzahl der Datenpunkte in Array darstellt, entspricht SMALL(Array,1) dem kleinsten Wert, und SMALL(Array,n) entspricht dem größten Wert.
© 2010 Microsoft Corporation. Alle Rechte vorbehalten

Für large gilt dann das Gegenteil (Kgrösste)
Wenn Du den Code per F8 durcharbeitest, wirst Du feststellen, dass bei jedem -1 die größte und die kleinste Zahl der Spalte B addiert werden und unter die Summe in die aktuelle Zeile geschrieben wird. Bei einer 1 werden die größte und die kleinste Zahl in B gelöscht.


Code:
Match(WorksheetFunction.Large (Range("b:b"), 1), Range("b:b"), 0)

übersetzt in Formel:


Code:
=Vergleich(Kgrösste(B:B;1);B:B;0)



den Code kann man noch kürzen:
Code:
Sub Abstreichen()

Dim i As Integer
Dim n As Single
    For i = 11 To 20
        If Cells(i, 1) = 1 Then

            Cells(WorksheetFunction.Match(WorksheetFunction.Small _
            (Range("b:b"), 1), Range("b:b"), 0), 2).Clear
            
            Cells(WorksheetFunction.Match(WorksheetFunction.Large _
            (Range("b:b"), 1), Range("b:b"), 0), 2).Clear
        
        ElseIf Cells(i, 1) = -1 Then
  
            Cells(i, 2) = (Cells(WorksheetFunction.Match _
            (WorksheetFunction.Small(Range("b:b"), 1), Range("b:b"), 0), 2)) _
            + (Cells(WorksheetFunction.Match(WorksheetFunction.Large _
            (Range("b:b"), 1), Range("b:b"), 0), 2))
        End If
    
    Next
    
        If Cells(20, 6).Value = 5 Then Range("a1:a5").Copy Range("B6")
    
   
   
End Sub
Hallo Frogger!

Vielen Dank für die rasche Antwort.

Kannst Du mir bitte sagen was die 2 bedeutet?

  (Range("b:b"), 1), Range("b:b"), 0), 2).Clear

Herzlichen Dank und viele Grüße aus Wien!

Atnik
Hallo,

die Antwort von Frogger ist nicht korrekt! Siehe meinen vorherigen Beitrag!
Außerdem lautet der Term richtig:


Code:
(Cells(WorksheetFunction.Match(WorksheetFunction.Large(Range("b:b"), 1), Range("b:b"), 0), 2)).Value

In Formel:


Code:
=Indirekt(Adresse(Vergleich(Kgrösste(B:B;1);B:B;0);2))
Hallo BoskoBiati!

Vielen Dank für die rasche Hilfe.

Liebe Grüße aus Wien,

Atnik
Hoppla Entschuldigung..  :29:  das "Large" hab ich verwechselt und sonst hab ich das Gesamte nur zerlegt.. 

komplett übersetzt ist es natürlich so wie bei BoskoBiati!