Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA-Formel Erklärung
#1

.xlsm   Für Forum AbstrichProg.VBA Beide+ ForSchleife.xlsm (Größe: 23,67 KB / Downloads: 3)
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
Antworten Top
#2
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)
Eine Menge reden, aber nichts sagen können viele...
Antworten Top
#3
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
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#4
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
Antworten Top
#5
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))
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#6
Hallo BoskoBiati!

Vielen Dank für die rasche Hilfe.

Liebe Grüße aus Wien,

Atnik
Antworten Top
#7
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!
Eine Menge reden, aber nichts sagen können viele...
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste