Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Find() Dezimalzahl / wissenschftl. Zahl

Forumthread: Find() Dezimalzahl / wissenschftl. Zahl

Find() Dezimalzahl / wissenschftl. Zahl
01.05.2022 15:21:00
miles
Servus,
ich möchte aus 15 Zeilen die größten 3 Zahlen sowie ihre entsprechenden Zeilen herausfinden.Hierfür nutze ich zuerst die Large-Funktion und dann die Find-Funktion.
Bei den Zahlen handelt es sich teilweise um ganze Zahlen, teilweise um bis zu 20 stellige Dezimalzahlen (z.B. 0,000442477876106073), welche in der Excel-Zelle als Dezimalzahl angegeben wird, in VBA jedoch automatisch im wissenschaftlichen Format (4,42477876106073E-04) gespeichert wird.
Mit der Find()-Funktion sucht VBA nach der VBA-Variablen (wissenschaftliches Format). Excel erkennt hier nicht dass die Dezimalzahl gleich der wissenschaftlichen Zahl ist.
Sub1()
Dim Top1 as Double
Dim ZTop1 as Integer
Dim Top2 as Double
Dim ZTop2 as Integer
Dim Top3 as Double
Dim ZTop3 as Integer
'Top1 = 1 'aus Zelle ausgelesen
'Top2 = 0,5 'aus Zelle ausgelesen
'Top3 = 0,000442477876106073 'aus Zelle ausgelesen
Top1 = Application.WorksheetFunction.Large(Sheets("Daten").Range(Sheets("Daten").Cells(11, 7), Sheets("Daten").Cells(25, 7)), 1)
ZTop1 = Sheets("Daten").Range(Sheets("Daten"). _
Cells(11, 7), Sheets("Daten").Cells(25, 7)).Find(Top1, LookIn:=xlValues, lookat:=xlWhole, SearchDirection:=xlNext).Row
Top2 = Application.WorksheetFunction.Large(Sheets("Daten").Range(Sheets("Daten").Cells(11, 7), Sheets("Daten").Cells(25, 7)), 2)
ZTop2 = Sheets("Daten").Range(Sheets("Daten"). _
Cells(11, 7), Sheets("Daten").Cells(25, 7)).Find(Top2, LookIn:=xlValues, lookat:=xlWhole, SearchDirection:=xlNext).Row
Top3 = Application.WorksheetFunction.Large(Sheets("Daten").Range(Sheets("Daten").Cells(11, 7), Sheets("Daten").Cells(25, 7)), 3)
ZTop3 = Sheets("Daten").Range(Sheets("Daten"). _
Cells(11, 7), Sheets("Daten").Cells(25, 7)).Find(Top3, LookIn:=xlValues, lookat:=xlWhole, SearchDirection:=xlNext).Row
End Sub
Vielen Dank.
Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Find() Dezimalzahl / wissenschftl. Zahl
01.05.2022 15:28:05
{Boris}
Hi,
ungetestet:
Teste mal Application.Match statt Find.
VG, Boris
AW: Find() Dezimalzahl / wissenschftl. Zahl
01.05.2022 17:31:46
miles
@ Boris:
die Application.Match Methode führt bei mir zu unplausiblen Ergebnissen:
Dim ZTop3 as range
ZTop3 = Application.WorksheetFunction.Match(Top3, Sheets("Daten").Range("G11:G25"))
1) obige Funktion gibt als Ergebnis eine 15 aus, ein für mich nicht nachvollziebares Ergebnis.
2) Ich kann die Match-Funktion und die .row-Funktion leider nicht verknüpfen, da dann die Fehlermeldung "ungültiger Bezeichner" erscheint.
Anzeige
Match hat auch noch...
01.05.2022 18:25:58
{Boris}
Hi,
...einen 3. Parameter - den musst Du mit 0 (=exakte Übereinstimmung) angeben - dann gibt es auch keine "unplausiblen" Ergebnisse mehr.
VG, Boris
AW: Match hat auch noch...
01.05.2022 18:34:10
miles
Danke für den Hinweis.
Wenn die exakte Übereinstimmung mehrfach vorkommt (Top1 = Top2), dann wird stets die erste Top-Zeile gefunden, die zweite Zeile wird niemals mit Match gefunden. Gibt es hier einen Workaround?
Anzeige
AW: Match hat auch noch...
01.05.2022 18:53:13
miles
Problem gelöst.
Thread kann geschlossen werden.
Danke an die tatkräftige Hilfe der Community
AW: Find() Dezimalzahl / wissenschftl. Zahl
01.05.2022 17:28:16
Daniel
Hi
Bei .Find mit looat:= xlvalues muss du den Suchbegriff so angeben wie der Wert in der Zelle angezeigt wird (ob mit Punkt oder Komma musst du testen)
Daher besser wie von Boris vorgeschlagen, die Position mit Application.Match (entspricht der Funktion Vergleich) ermitteln.
Gruß Daniel
Anzeige
AW: Find() Dezimalzahl / wissenschftl. Zahl
01.05.2022 17:42:08
onur
SO geht das:

Dim Top1
Dim ZTop1 As Integer
Dim Top2
Dim ZTop2 As Integer
Dim Top3
Dim ZTop3 As Integer
'Top1 = 1 'aus Zelle ausgelesen
'Top2 = 0,5 'aus Zelle ausgelesen
'Top3 = 0,000442477876106073 'aus Zelle ausgelesen
arr = Range(Sheets("Daten").Cells(11, 7), Sheets("Daten").Cells(25, 7))
Top1 = WorksheetFunction.Large(arr, 1)
ZTop1 = WorksheetFunction.Match(Top1, arr, False) + 10
Top2 = WorksheetFunction.Large(arr, 2)
ZTop2 = WorksheetFunction.Match(Top2, arr, False) + 10
Top3 = WorksheetFunction.Large(arr, 3)
ZTop3 = WorksheetFunction.Match(Top3, arr, False) + 10

Anzeige
AW: Find() Dezimalzahl / wissenschftl. Zahl
01.05.2022 17:57:42
miles
prima, das hat einwandfrei funktioniert.
Am Ende wird 10 addiert, um auf die richtige Zeilennummer zu kommen. Was wird eigentlich berechnet (ohne die +10)?
Wenn 1 Wert doppelt vorkommt (Top1 = Top2), dann wird immer auf die erste Zelle mit dem Wert verwiesen.
Bei der Find() Funktion habe ich daher einmal xlnext und einmal xlprevious angeben (suche aufsteigend und suche absteigend). Spontan fällt mir für die Match Funktion keine Lösung ein.
Anzeige
AW: Find() Dezimalzahl / wissenschftl. Zahl
01.05.2022 18:01:26
onur
"Was wird eigentlich berechnet (ohne die +10)" ?
Die Position (Index) im Array arr. Match ist ja schliesslich nix Anderes als die deutsche Excel-Funktion "VERGLEICH".
AW: Find() Dezimalzahl / wissenschftl. Zahl
01.05.2022 18:05:19
onur
Gern geschehen !
AW: Find() Dezimalzahl / wissenschftl. Zahl
01.05.2022 18:11:48
miles
Vielen Dank für die schnelle Hilfe.
Anzeige
Gerne !
01.05.2022 18:12:34
onur
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige