Re: Hochwasser SituationsBericht
- From: Robert Jakob <jakobrobert@xxxxxx>
- Date: Fri, 13 Mar 2009 14:56:36 +0100
Am Fri, 13 Mar 2009 08:21:40 +0100 schrieb Michael v. Fondern:
Hallo Robert,
Nun möchte ich gerne in eine Neue Tabelle mit Namen :
"SituationsBericht"
die Archivdaten der anderen Tabelle zu "Rate" ziehen und dort die
Pegelstände der anderen Tabellen zum Zeitpunkt von Datum und Uhrzeit
eintragen lassen.
Eigentlich wäre das ein Klax, wenn es zum exakt gleichen Zeitpunkt
auch einen Eintrag in den anderen Tabelle gäbe,
denn dann könnte man ja einfach Application.vlookup verwenden.
da du ja alles mit VBA machst, kannst du dir doch einfach eine Funktion
schreiben, bei der du Datum+Uhrzeit (als Parameter vom Typ "Date")
vorgibst, und die dir mittels einer for-Schleife in einer gegebenen
Spalte nach dem "Datum+Uhrzeit" sucht, die dem Wert am nächsten kommt.
also so in etwa (Luftcode):
Function SucheZeile(d as date, col as long) as long
dim dmin as double, rowmin as long, row as long
dmin=1000000
rowmin=-1
for row = 1 to Cells.SpecialCells(xlCellTypeLastCell).Row
if Abs(Cells(row,col).Value-d) < dmin then
dmin = Abs(Cells(row,col).Value-d)
rowmin=row
end if
next
SucheZeile=rowmin
end function
(das hier setzt allerdings voraus, dass der fertige Datums+Zeitwert
einer einzigen Spalte steht, sollte sich aber auch auf zwei Spalten
erweitern lassen).
Um den zeitlich nächsten Wert davor oder den danach zu suchen, um ggf.
den Pegelstand zu einem bestimmten Zeitpunkt zu interpolieren, musst du
die Funktion ggf. ein wenig anpassen (Abs weglassen, aufs Vorzeichen achten)
>...
Diese Berechnung oder Rückrechnung ist für mich kein Problem,
dann brauchst du ja der obigen Funktion nur diesen rückgerechneten Wert
zu übergeben
Wenn allerdings, der nächst höherer ZeitWert um viele Stunden
verschoben ist, dann wird mir nicht die Bewegung der "Welle"
angegeben die sich im Beispiel angenommen,
von Mainz nach Koblenz bewegt hat,
sondern eine völlig uninteressanter anderer Wert.
Wenn also der zurück berechnete Zeitwert, plus oder minus 3 Stunden
aufweist, dann sollen einfach nur 3 Sternchen *** angezeigt werden
weil der passende Wert nicht da ist.
Dann musst du halt prüfen, um wieviele Stunden der mit obiger Funktion
gefundene Wert vom vorgegebene Datums-/Zeitwert abweicht, und wenn es
mehr als drei Stunden sind, die *** ausgeben:
row = SucheZeile(d,col)
if row>=0 then
if Abs(d-Cells(row,col).value)*24 > 3 then
' *** ausgeben
end if
end if
Grüße
- Michael -
Hallo Michael,
mit VBA habe ich schon viele Dinge gemacht, aber mit dem Thema
"Function schreiben" habe ich bisher noch keine Erfahrung
Ich habe zwar schon Functions-Prozeduren im Einsatz, aber die
hat dann ein Anderer geschrieben und ich habe diese dann in
einem Modul übernommen, das zunächst einmal vorweg.
Es ist natürlich klar, daß man eine Function genauso wie eine
Prozedur für einen Commandbutton schreiben kann, wenn man denn
Ahnung hat wie eine Function aufgebaut sein muß.
Ich traue mich zwar an alles dran, aber ohne Unterstützung wäre
das für mich dann im Moment noch ein langer Weg.
Vielleicht fehlt mir auch nur der Anschub, wenn Du mir dazu den
Anschub geben würdest, dann würde mich das freuen.
Ich habe bisher Funktionen umgangen indem ich Hilfsspalten in
Anspruch genommen habe und dann den Wert in der Hilfsspalte
zwischengelagert haben. Mir ist auch klar, daß Funktionen noch
viel mehr als das können.
Im vorliegenden Fall halte ich eine Schleife für nicht erforderlich
denn ich möchte ja nicht alle Werte der einzelnen Tabellen abfragen
sondern nur einige wenige Werte zeilenweise von Fall zu Fall.
In der Tabelle "SituationsBericht" soll dann, wie in meinem
"Anfangscode" gepostet der aktuelle Wert der Spalten A:C
einer Zeile aus der Tabelle Koblenz in die Spalten A:C der Tabelle
"SituationsBericht" übertragen werden.
Das macht mein Code auch so einwandfrei.
In der Spalte D soll dann Datum und Uhrzeit des zur Abfrage
passenden Datums und Uhrzeit von Karlsruhe/Maxau hingeschrieben
werden und in Spalte E dann der Pegelstand von Karlsruhe/Maxau.
in den folgenden Spalten dann
F = Datum/Uhrzeit Speyer
G = Pegel Speyer
u.s.w.
Damit es besser lesbar ist, werde ich mir dann mit einer Prozedur
die Spalten D, F, H u.s.w. aus- oder wieder einblenden, aber sowas
kann ich natürlich selbst.
Meine eigentliche Frage war also, wie kann ich eine Abfrage der
Oberrhein-Tabellen machen, die einerseits zeitlich nicht mehr als 3 Stunden
toleriert und andererseits den Datum und Zeitwert von Koblenz als Basis
nimmt.
Mit Lookup jedenfalls bekomme ich wenn es nicht genau die passende Zeit
ist, immer den nächst höheren Zeitwert, der aber könnte Tage später sein
und wäre dann nicht mehr brauchbar.
Wie kann man sowas eingrenzen und in eine Abfrage einbauen ?
Kannst Du mir dazu Hinweise geben ?
MfG
Robert
.
- References:
- Hochwasser SituationsBericht
- From: Robert Jakob
- Re: Hochwasser SituationsBericht
- From: Michael v. Fondern
- Hochwasser SituationsBericht
- Prev by Date: Re: Vergleich von 2 Zellen, wenn gleich msgbox
- Next by Date: Re: AutoFilter
- Previous by thread: Re: Hochwasser SituationsBericht
- Next by thread: Re: Hochwasser SituationsBericht
- Index(es):
Relevant Pages
|