Seite 1 von 1

Zeiten sortieren (kkleinste)

Verfasst: Fr, 18.05.2007 18:34
von Siox
Hallo ich suche ne Möglichkeit die kleinste Zeit zu ermitteln.

Die Zeit liegt im Format MM:SS,000 vor.

Wenn ich wie hier im Forum schonmal vorgeschlagen kkleinste nehme erhalte ich nur den Fehler #WERT!

Das ganze geht aber noch weiter. Dann brauche ich den Index der Zeile und die Werte dazu. Ich hab es auch schon via Makro versucht, welches ich dann automatisch starte wenn jemand den Button "Neue Runde" drückt. Doch ich bekam immer nur eine leere Zeichenkette zurück.

Code: Alles auswählen

sub F2GetBestRound
	
   dim bestTime as date
   dim bestRoundRow as integer
   bestTime = "99:99,999"

  oCalc = thisComponent
     oSheet = oCalc.sheets().getByName("SetupManager")
     oCellRange = osheet.getCellRangeByName("AB18:AB29")
'auslesen der Eckpunkte  
     iErsteZeile = oCellRange.rangeAddress.startRow
     iLetzteZeile = oCellRange.rangeAddress.EndRow
  
     'Schleife über die Zeilen im Sheet
      For i = iErsteZeile to iLetzteZeile
         oCell=osheet.getcellrangebyName("AB"&i+1)
         currentRoundTime = oCell.String
           if currentRoundTime < bestTime Then
           		bestTime = currentRoundTime
           		bestRoundRow = i+1
           end if
      next i
      
    oSheet.getcellrangebyName("Q30").string =oSheet.getcellrangebyName("Q"&bestRoundRow).string
	oSheet.getcellrangebyName("S30").string = oSheet.getcellrangebyName("S"&bestRoundRow).string
	oSheet.getcellrangebyName("U30").string = oSheet.getcellrangebyName("U"&bestRoundRow).string
	oSheet.getcellrangebyName("W30").string = oSheet.getcellrangebyName("W"&bestRoundRow).string
	oSheet.getcellrangebyName("Y30").string = oSheet.getcellrangebyName("Y"&bestRoundRow).string
	oSheet.getcellrangebyName("AB30").string = oSheet.getcellrangebyName("AB"&bestRoundRow).string  
end sub
Bild

Verfasst: Sa, 19.05.2007 20:40
von FranzX
Hallo,

die kleinste Zeit erhältst du mit KKLEINSTE()

Beispiel:
Die Zeiten (im Format MM:SS,000) stehen im Bereich A3:A11.
Die kleinste Zeit erhältst du in der Zelle D3 mit der Funktion:
=KKLEINSTE(A3:A11;1)

Den Wert der korrespondierenden Zelle der Spalte B erhältst du dann mit der Formel:
=INDEX($B$3:$B$11;VERGLEICH(D3;$A$3:$A$11;0);1)

Ich hoffe, dieses Beispiel hilft dir weiter.

Viele Grüße
FranzX
--------------------------------------------
TIPP: OpenOffice.org Calc - Formeln und Funktionen
TIPP: Writer-Tuning; 194 clevere Tips und Tricks für OpenOffice.org 2 und StarOffice 8.

Verfasst: So, 20.05.2007 08:57
von Siox
mhh Danke, doch ich habs nun anders gelöst.

Das Problem warum ich mit KKLEINSTE() nur den Fehler #Wert! bekam habe ich gelöst. Doch so löste sich auch das Problem mit dem Makro..

Die Zeit wurde nämlich in ein Textfeld eingetragen und dieses wurde mit einer Zelle verknüpft. Erzeugte aber nicht wie gehofft einen Zahlenwert sondern einen String. Dies ist nicht gleich aufgefallen. Statt 1:34,123 bekam ich so den Wert '1:34,123.

Ich hab dann das Textfeld durch ein formatiertes ersetzt und konnte so nun auf einen richtigen Zahlenwert zurückgreifen.

Jetzt funktioniert auch das Makro

Code: Alles auswählen

sub F2GetBestRound
	
   dim bestTime as double
   dim bestRoundRow as integer
   bestTime = "999,000"

  oCalc = thisComponent
     oSheet = oCalc.sheets().getByName("SetupManager")
     oCellRange = osheet.getCellRangeByName("AB18:AB29")
'auslesen der Eckpunkte  
     iErsteZeile = oCellRange.rangeAddress.startRow
     iLetzteZeile = oCellRange.rangeAddress.EndRow
  
     'Schleife über die Zeilen im Sheet
      For i = iErsteZeile to iLetzteZeile
         oCell=osheet.getcellrangebyName("AB"&i+1)
         currentRoundTime = oCell.getvalue
         'msgbox currentRoundTime
           if currentRoundTime < bestTime Then
            if currentRoundTime <> 0 Then
           		bestTime = currentRoundTime
           		bestRoundRow = i+1
           		'msgbox bestRoundRow
           	end if
           end if
      next i
      
    oSheet.getcellrangebyName("Q30").setvalue(oSheet.getcellrangebyName("Q"&bestRoundRow).getvalue)
	oSheet.getcellrangebyName("S30").setvalue(oSheet.getcellrangebyName("S"&bestRoundRow).getvalue)
	oSheet.getcellrangebyName("U30").setvalue(oSheet.getcellrangebyName("U"&bestRoundRow).getvalue)
	oSheet.getcellrangebyName("W30").setvalue(oSheet.getcellrangebyName("W"&bestRoundRow).getvalue)
	oSheet.getcellrangebyName("Y30").string = oSheet.getcellrangebyName("Y"&bestRoundRow).string
	oSheet.getcellrangebyName("AB30").setvalue(oSheet.getcellrangebyName("AB"&bestRoundRow).getvalue)
end sub