2017-11-03 10 views
0

So habe ich ein Problem bei der Auswahl der genauen Zelle eines formulierten Werts. Ich bin wirklich neu in VBA und ich suchte im Internet für mindestens 2 Tage nach einer wertvollen Antwort. Lassen Sie mich Ihnen den Code zeigen, der versucht zu erklären und zu erklären, was er danach tut;Auswählen der Position der Variable (als Zelle) in Excel VBA

Dim r As Range 
    MinTime = WorksheetFunction.Min(Range("C5:L14")) 
Set r = ActiveSheet.Cells.Find(MinTime) 
r.Select 
MinRow = ActiveCell.Row 
MinCol = ActiveCell.Column 

Also, was im versuchend zu tun ist, um die minimale Anzahl in einem Bereich mit worksheetfunction.min zu finden und der Zelle auszuwählen, die i ‚gerade gefunden haben. Richten Sie dann die Zeilen- und Spalteninformationen auf andere 2 Variablen. Aber dieser Code funktioniert nicht immer. Manchmal funktioniert es gut, manchmal nicht und ich bin im Moment ratlos. Jede Art von Hilfe wäre willkommen. Danke schon.

+0

Sie schlechte Sucher ... https://StackOverflow.com/Questions/5215616/VBA-Cell-Adresse-of-Max – Gadziu

+0

Paar Dinge, sollten Sie vollständig Ihre Bereiche z. ThisWorkbook.Worksheets ("Sheet1"). Range ........... Möglicherweise müssen Sie behandeln, wenn der Wert nicht gefunden wird, da r nichts ist. Sie suchen auch das gesamte Blatt, aber nur eine Übereinstimmung erwarten – QHarr

+0

Das Problem ist, es findet manchmal irrelivant Zahlen zu der Nummer, die es bei MinTime findet. Nehmen wir an, Mintime findet die Zahl korrekt (wie 11), aber wenn ich das Set r = activesheet.cells.find (MinTime) verwende, findet es (142.1254371). Und ich verstehe es nicht. –

Antwort

1

Ich vermute, dass Ihr Bereich tatsächlich Zeiten enthält. Der folgende Code findet den frühesten Zeitpunkt (den niedrigsten Wert im Bereich).

Private Sub MinTime() 

    Dim Rng As Range 
    Dim Mini As Range 
    Dim MiniValue As Double 
    Dim MinRow As Long, MinClm As Long 

    Set Rng = ActiveSheet.Range("C5:L14") 

    MiniValue = Application.Min(Rng) 
    With Rng 
     Set Mini = .Find(What:=MiniValue, _ 
         After:=.Cells(1), _ 
         LookIn:=xlFormulas, _ 
         LookAt:=xlWhole, _ 
         SearchOrder:=xlByRows, _ 
         SearchDirection:=xlNext, _ 
         MatchCase:=False, _ 
         MatchByte:=False) 
    End With 

    With Mini 
     MinRow = .Row 
     MinClm = .Column 
    End With 
End Sub 

Der Trick ist, LookIn:=xlFormulas anstelle des Standard-xlValues. Sie können 12:00 eingeben, aber die Formel der Zelle ist 0,5. Vorausgesetzt, dass das Minimum in dem Bereich ist, wenn Sie nach 0,5 in den Werten suchen, werden Sie es nicht finden, weil der "Wert" der Zelle in diesem Kontext (Verwirrung durch Microsoft, nicht mein Tun) "12:00" ist. Daher müssten Sie den gefundenen Mindestwert wieder in eine Zeichenfolge wie "12:00" konvertieren oder in den Formeln nach der 0,5 suchen.

+0

Arbeitete wie ein Charme. Du hast meinen ewigen Dank, Mann. Das Problem war nach xlvalues ​​zu suchen, wenn meine Texte Zeit hatten. Nochmals vielen Dank für Ihre Hilfe, haben Sie eine gute :) –

0

Sie können dies auch tun, ohne die WorksheetFunction- oder die Find-Funktion zu verwenden. Das Erstellen eines Arrays und das anschließende Durchschleifen ist eine ziemlich einfache Möglichkeit, das zu finden, wonach Sie suchen. Versuchen Sie diese

Sub findMin(ByVal minRange As Range) 
Dim searchArr() As Range 
ReDim searchArr(1 To minRange.Rows.Count * minRange.Columns.Count) As Range 
Dim minVal As Double 
Dim i As Integer, i2 As Integer, outputRow As Integer, outputColumn As Integer 
For i2 = 0 To minRange.Columns.Count 
    For i = 0 To minRange.Rows.Count 
     searchArr(i + 1) = Cells(minRange.Row + i, minRange.Column + i2).Value 
    Next i 
Next i2 

    minVal = searchArr(1).Value 
    For i = 1 To UBound(searchArr) 
     If searchArr(i).Value < minVal Then 
      minVal = searchArr(i).Value 
      outputRow = searchArr(i).Row 
      outputColumn = searchArr(i).Column 
     End If 
    Next i 
End Sub 
+0

Ich schätze die Idee und Ihre Mühe. Ja, es mag funktionieren, aber es ist eine Aufgabe, also muss ich es auf eine bestimmte Art tun.Und ich sehe nicht wirklich mein Problem und es macht mich verrückt Ich habe versucht jede Antwort gegeben, aber deins, da es zu komplex für mich und Lehrer würde es sofort verstehen. Aber danke nochmal dafür. –

0

Im Code Ihrer Frage verwenden Sie die Find-Methode für alle Zellen des Arbeitsblatts. Wie die Antwort von @ Gary's Student zeigt, sollten Sie die Find-Methode im selben Bereich aufrufen, in dem Sie den Min-Wert gefunden haben.

Außerdem gibt es mehrere Parameter für die Find-Methode, die einen Unterschied machen, wie zum Beispiel nach ganzen Werten suchen oder nicht, nach Formeln suchen oder nicht, nach einem bestimmten Format suchen oder nicht. Sie können leicht Informationen über die Find-Methode im Internet finden.

Hier ist mein nehmen auf Ihrem Code:

Sub MyAssignment() 
    Dim searchRange As Range 
    Dim minCell As Range 
    Dim minTime As Double 
    Dim minRow As Long 
    Dim minCol As Long 

    Set searchRange = ActiveSheet.Range("C5:L14") 
    minTime = WorksheetFunction.Min(searchRange) 

    Set minCell = searchRange.Find(minTime, searchRange.Cells(1), XlFindLookIn.xlValues, XlLookAt.xlWhole, MatchCase:=False, SearchFormat:=False) 
    minCell.Select 

    minRow = minCell.Row 
    minCol = minCell.Column 
End Sub 

Die Parameter, die Sie verwenden, wenn die Find-Methode von VBA Aufruf auf dem Suchen-Dialog gespiegelt wird, wie aus Excel (Strg + F) gesehen. Umgekehrt wirkt sich das Ändern der Optionen im Dialogfeld "Suchen" von Excel auf den nächsten FBA-Aufruf von VBA aus, da die Parameter, die Sie der Find-Methode nicht zur Verfügung stellen, die zuletzt im Dialogfeld verwendeten Werte annehmen.

Lassen Sie uns wissen, wie es sich herausstellt.

+0

Jetzt heißt es Objektvariable oder mit Blockvariable nicht gesetzt. Ich habe Ihren Punkt jetzt, ich werde die Methode im Netz überprüfen danke, danke. Lassen Sie mich wissen, wenn Sie was mit dem Fehler falsch finden :) Ich kann Ihnen den vollen Code zeigen, wenn Sie interessiert sind, senden Sie einfach Freundschaft von Facebook. –

+0

Haben Sie meinen Code wörtlich kopiert und eingefügt? Ich führe es hier und es funktioniert gut. Bitte sag auch immer _wo_ irgendein Code fehlschlägt. – Excelosaurus

+0

Ja, ich habe es kopiert und eingefügt und Variablennamen geändert, damit sie mir passen. Es gibt einen Fehler bei minCell.Select. Weil minCell gleich 0 ist, wenn der obere Code beendet ist. –

Verwandte Themen