2016-03-28 7 views
0

Könnten Sie mir bitte helfen, herauszufinden, wie ich die Zeile mit dem Mindestwert finden kann, die mir die Zwischensumme gegeben hat?VBA - Zwischensumme gibt den Minimalwert a a Spalte, wie bekomme ich die Zeile dieses Wertes?

So:

A   B   C  D  E  F  G 
1 Galp   He  0,15  125     0,15443 
3 Iberdrola Au  0,18  123     0,16987 
7 Gazprom  Sc  0,25  430     0,14679 

betreibe ich den Code, um den Minimalwert auf der gefilterten Spalte G zu finden:

Application.WorksheetFunction.Subtotal(5, Columns("G")) 

Es wird mir die Nummer 0,14679. Aber ich muss wissen, welche Zeile es ist, damit ich den Namen auf der Spalte A (Gazprom) bekommen kann.

Vlookup funktioniert nicht in diesem Fall, weil ich mehr als 1 Wert mit den gleichen Eigenschaften habe. Aber sie sind nicht sichtbar, wie es im obigen Beispiel gezeigt wurde. Zeile zwei, die nicht sichtbar ist, hat denselben Wert wie Zeile 3 (0,16987).

Allerdings, nach dem Vorschlag von @Mrig, wenn ich Zwischensumme 105 kann ich die sichtbare Spalte bekommen?

Ich habe den Code versucht, und es gibt mir eine Fehlermeldung 13 ...

Wie kann ich den Namen auf der Zeile A der Minimalwert der gefilterten Spalte G finden?

Antwort

0

Versuchen Sie folgendes:

Sub Demo() 
    Dim min As Double 
    Dim rowNum As Long 

    With Sheet3 
     min = Application.WorksheetFunction.Subtotal(5, Columns("A")) 
     rowNum = .Columns(1).Find(What:=min, After:=.Cells(1, 1), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False).Row 
     MsgBox ("Minimum value is " & min & " at row number " & rowNum & ". Corresponding column B value is " & Cells(rowNum, 2).Value) 
    End With 
End Sub 

Teilsumme mit 5 als Funktionsnummer Minimalwert aus dem gewählten Bereich einschließlich der versteckten Reihen geben wird. Zwischensumme mit 105 als Funktionsnummer gibt den Minimalwert nur aus dem sichtbaren Bereich.

+0

Welchen Fehler gibt es Ihnen? Stellen Sie außerdem sicher, dass Sie das richtige Blatt in der With-Anweisung angeben. In meinem Code ist Sheet3. – Mrig

+0

Laufzeitfehler 91 .... Kann es nicht so machen. Etwas fehlt im Code ... –

+0

Ersetze LookIn: = xlValues ​​mit LookIn: = xlFormulas – Mrig

0

Sie müssen nur nach sichtbaren Elementen für den erforderlichen Wert suchen. So etwas wie dieses

Sub FindMin() 
    Dim rng As Range, arr As Range, cl As Range 
    Dim SearchTerm As Variant, LookUpTerm As Variant 
    Dim Found As Boolean 

    SearchTerm = Application.WorksheetFunction.Subtotal(5, Columns("A")) 

    With ActiveSheet 
     Set rng = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)) 
    End With 

    For Each arr In rng.Areas 
     For Each cl In arr.Cells 
      If cl.Value = SearchTerm Then 
       LookUpTerm = cl.Offset(, 1) ' adjust offset to refer to required column 
       Found = True 
       Exit For 
      End If 
     Next cl 
     If Found Then Exit For 
    Next arr 

findet der erste sichtbare Instanz


Original-Antwort, ohne die gefilterte Anforderung

Um Ihre direkten Q zu beantworten "wie die Reihe zu bekommen ..." Verwenden Sie

rw = Application.Match(Application.WorksheetFunction.Subtotal(5, Columns("A")), Columns("A"), 0) 

Um den Wert f zu erhalten rom Spalte B direkt verwenden

ColBVal = Application.VLookup(Application.WorksheetFunction.Subtotal(5, Columns("A")), Columns("A:B"), 2, 0) 

Beachten Sie, dass, wenn der Minimalwert mehr erscheint, als sobald diese das erste Vorkommen zurück.

+0

Warum verwenden Sie die Nummer 2 im ColBVal? –

+0

Die 'SVERWEIS'-Funktionsparameter sind _VLOOKUP (Nachschlagewert, Tabellenarray, Spaltenindex, Bereich_Lookup) _ In diesem Fall ist _Zeilen_Index_2, dh Spalte' B' –

+0

@joao Sie haben eine Reihe von neuen Punkten in Kommentaren ausgelöst. Bitte editiere diese Information in deiner _question_. –

Verwandte Themen