Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1880to1884
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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.

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.
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
Anzeige
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?
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.
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".
Anzeige
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.
Gerne !
01.05.2022 18:12:34
onur

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige