anchle
Goto Top

Excel suchen per Makro

ich habe eine Gebührentabelle. In Spalte A stehen die Werte. z.Bsp. 6000. In D1 gebe ich den Wert ein, der gesucht werden soll, z.B. 5900. Die werden natürlich nicht gefunden. Schön wäre es allerdings, wenn das Makro den Wert 6000 findet. In der Spalte B steht dann die Gebühr,

such = Range("D1")

Range("A6").Select


On Error Resume Next
Cells.Find(What:=such, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
Cells.FindNext(After:=ActiveCell).Activate

Content-Key: 222871

Url: https://administrator.de/contentid/222871

Printed on: April 25, 2024 at 03:04 o'clock

Member: colinardo
colinardo Nov 24, 2013 updated at 17:41:59 (UTC)
Goto Top
Hallo anchle,
wozu ein Makro wenn du es auch mit einer Matrix-Formel erledigen kannst:
=SVERWEIS(INDEX($A$6:$A$65535;VERGLEICH(WAHR;$A$6:$A$65535>=$D$1;0));$A6:$B$65535;2;WAHR)
Dies Formel gibst du in einer Zelle deiner Wahl ein, diese Zeigt dann zu deinem eingetragenen Wert in D1 den dazu passenden Wert aus Spalte B passend zu den Einträgen in A6:A65535 an. Wenn der Wert nicht existiert wird der nächst größere Wert genommen.
BITTE BEACHTEN: Dies ist eine Matrix-Formel. Man muss die Formel mit STRG-SHIFT-ENTER abschließen anstatt nur mit einem "einfachen" Enter. Eine Matrixformel erkennt man in Excel daran das in der Formelzeile die Formel mit geschweiften Klammern eingefasst wird.

Wenn doch keine Formel in Frage kommt, hier auch eine Variante per Makro:
Hierbei steht in D1 dein Suchwert welches in A6:A65535 gesucht wird, und bei Übereinstimmung bzw. nächst größerem, der Wert in Spalte B in Zelle E1 eingetragen wird. Passt der Wert nicht ganz, wird in D1 automatisch der dazu passende Wert eingetragen. Das verwendete Sheet ist noch in Zeile 3 anzupassen.
Sub Search()
    Dim rngSuchwert As Range, rngTarget As Range, rngSearch As Range, sheet As Worksheet
    Set sheet = Worksheets(1)
    Set rngSuchwert = sheet.Range("D1")  
    Set rngTarget = sheet.Range("E1")  
    
    For i = 6 To 65535
        If sheet.Cells(i, 1).Value >= rngSuchwert.Value Then
            rngTarget.Value = sheet.Cells(i, 2).Value
            rngSuchwert.Value = sheet.Cells(i, 1).Value
            Exit For
        End If
    Next
End Sub
Falls noch etwas unklar sein sollte, hier ein Demo-Excel-File zum Download.

Grüße Uwe
Member: anchle
anchle Nov 24, 2013 at 18:43:30 (UTC)
Goto Top
Hallo, recht herzlichen Dank. Ich liebe Makros, daher habe ich diese Variante gewählt. Ich lasse erst Dein Makro laufen, dann korrigiert er den Suchbetrag und den suche ich dann mit meinem Makro. Er springt auf die Zelle und ich kann die verschiedenen Gebühreneinheiten ablesen. einfach genial! Danke!