Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

KKleinsten mit VBA

Betrifft: KKleinsten mit VBA von: Hans
Geschrieben am: 13.09.2014 15:57:34

Hallo

ich möchte diese Formel in Makro umwandeln um rechenzeit zu sparen
=KGRÖSSTE(WENN((B:B=D2);A:A);1)

anbei ein Muster der Tabelle

https://www.herber.de/bbs/user/92611.xlsx

Mfg
Hans

  

Betrifft: AW: KKleinsten mit VBA von: Hajo_Zi
Geschrieben am: 13.09.2014 16:12:21

Hallo Hans,

schränke den Bereich ein, wenn Du es nicht für 1.048.576 Zeilen machst, ist es wohl schon schneller.

GrußformelHomepage


  

Betrifft: AW: KKleinsten mit VBA von: Hans
Geschrieben am: 13.09.2014 16:27:01

selbst wenn ich auf 1000 Zeilen gehe ist das immer noch ein Problem
bei jeder Wert eingabe muss man Warten bis alles gerechnet ist
oder man schaltet die "Berechnungsoptionen auf Manuell"

das ist doch nervig
oder?


  

Betrifft: AW: KKleinsten mit VBA von: Hans
Geschrieben am: 13.09.2014 17:36:12

habe etwas passendes gefunden
jetzt muss nur noch die Ausgabe umgeschrieben werden
in diesem Fall E2

Sub Makro1()
    With Tabelle1.UsedRange
        MsgBox Evaluate("=Max(IF(" & .Columns(2).Address & "=""ball""," & .Columns(1).Address &  _
",""""))")
    End With
End 
Sub '



  

Betrifft: AW: KKleinsten mit VBA von: Daniel
Geschrieben am: 16.09.2014 12:57:40

Hi

also Makro so (passend für deine Beispieldatei)

Sub test()
Dim ze As Long
Dim FO As String
Dim Zelle As Range
With Sheets("Tabelle1")
    ze = .Cells(.Rows.Count, 1).End(xlUp)
    With .Cells(1, 4).CurrentRegion
        With .Resize(.Rows.Count - 1, .Columns.Count - 1).Offset(1, 1)
            FO = "=IFERROR(LARGE(IF((R2C2:RxxxC2=RC4),R2C1:RxxxC1),R1C),"""")"
            FO = Replace(FO, "xxx", ze)
            For Each Zelle In .Rows(1).Cells
                Zelle.FormulaArray = FO
            Next
            .Rows(1).Copy .Rows(2).Resize(.Rows.Count - 1)
            .Formula = .Value
        End With
    End With
End With
End Sub

Gruß Daniel


  

Betrifft: AW: KKleinsten mit VBA von: Hans
Geschrieben am: 16.09.2014 21:08:14

Hallo

ja funktioniert super
leider tu ich mich schwer das jetzt in die Original Tabelle zu übertragen
die Spalten und Zeilen sind im Original etwas anders

Sub test()
Dim ze As Long
Dim FO As String
Dim Zelle As Range
' Mit Arbeitsblatt
With Sheets("Tabelle1")
' ze = letzte Zeile
    ze = .Cells(.Rows.Count, 1).End(xlUp)
' Mit Zelle "D1" ?
    With .Cells(1, 4).CurrentRegion
' Größe ändern Zeile, Spalte, Versetzen
        With .Resize(.Rows.Count - 1, .Columns.Count - 1).Offset(1, 1)
' IFerror ? R2C2:RxxxC2=RC4),R2C1:RxxxC1),R1C was macht das
            FO = "=IFERROR(LARGE(IF((R2C2:RxxxC2=RC4),R2C1:RxxxC1),R1C),"""")"
' austauschen FO ?, xxx ?, letzte Zeile
            FO = Replace(FO, "xxx", ze)
' Für alle Zellen in Zeile 1
            For Each Zelle In .Rows(1).Cells
                Zelle.FormulaArray = FO
            Next
' Zeile 1 kopieren Zeile 2 größe ändern Zeile -1
            .Rows(1).Copy .Rows(2).Resize(.Rows.Count - 1)
' Formel Wert eintragen
            .Formula = .Value
        End With
    End With
End With
End Sub

Mfg
Hans


  

Betrifft: AW: KKleinsten mit VBA von: Daniel
Geschrieben am: 16.09.2014 22:03:17

Hi
Ich kenne deine Originaldatei nicht, daher kann ich dir bei deinem neuen Problem nicht helfen.
Ich habe die Frage für deine Beispieldatei doch schon beantwortet, warum also nochmal?
Gruß Daniel


  

Betrifft: AW: KKleinsten mit VBA von: Hans
Geschrieben am: 17.09.2014 00:04:03

Hallo Daniel,

danke für deine Lösung
ich denke bis morgen habe ich es
das Ziel für mich ist es den Code zu verstehen um was bei der Sache zu lernen
Kopieren und Einfügen ist wohl zu leicht

Kannst du mir sagen von welcher Zelle das mit dem "FormulaR1C1" los geht
das habe ich noch nicht raus

Gruß
Hans


  

Betrifft: AW: KKleinsten mit VBA von: Daniel
Geschrieben am: 17.09.2014 00:49:17

Hi

Bei FormulaR1C1 steht das R für Zeile und das C für Spalte.
Bei absoluten Zellbezügen folgt nach dem Buchstaben direkt die Zeilen- oder Spaltennummer.
Bei relativen Bezügen steht der Versatzwert - ausgehend von der Zelle in der die Formel steht - in eckigen Klammern [].
negative Zahl heißt Versatz nach oben oder links, positive Zahl nach unten oder links.
Einen Versatz von 0 (gleiche Zeile oder Spalten) braucht man nicht angeben .

Gruß Daniel


  

Betrifft: AW: KKleinsten mit VBA von: Hans
Geschrieben am: 20.09.2014 01:55:02

Hallo Daniel,

kannst du mir noch mal helfen
ich brauche zwichen Spalte A und B noch eine leere Spalte
kannst du das anpassen

Danke
Hans