Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1424to1428
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

vba: Werte zwischen 2 Tabellen einer Datei

vba: Werte zwischen 2 Tabellen einer Datei
21.05.2015 10:48:51
Bernhard
Hallo,
ich habe 2 Blätter (Kurse und Geo-Magnetismus)in der Tabelle Astronavigation.
In der Tabelle "Kurse" gibt es für jeden der minimal 1 bis maximal 38 Wegpunkte Breitengrad, Längengrad und Kalenderdatum. Die Wegpunkt-Zeilen stehen in Zeilen 190 bis 228, und nochmals in Zeilen 237 bis 275.
In Zeilen 190 bis maximal 228, Spalte O stehen die Breitengrade, in Spalte P die Längengrade... case-abhängig mindestens in Zeile 190 bis maximal in Zeile 228... andernfalls weisen die Zellen durch "" in der Formel keinen Wert aus.
In Zeilen 237 bis maximal 275 stehen die zugehörigen Kalenderdaten der Wegpunkte, und zwar in Spalten J,K,L... Tag, Monat, Jahr. Analog case-abhängig mindestens in Zeile 237 bis maximal 275... andernfalls keinen Wert durch "" in der Formel.
In der Tabelle "Geo-Magnetismus" soll er nun bei vba-Start zu jedem dieser Wegpunkte (so vorhanden) zeilenweise von oben nach unten die Deklination und Inklination (horizontale und vertikale geomagnetische Nadelablenkung) berechnen und die Ergebnisse wieder in die Tabelle "Kurse", Spalte C, Zeilen 237 bis maximal 275 (andernfalls leer lassen) rein schreiben.
Hierzu Datenerfassung (durch zu erstellendes vba) in Tabelle "Geo-Magnetismus": Breitengrad in Zelle F2, Längengrad in Zelle F3, Tag, Monat, Jahr in F6, G6, H6 soll durch vba nacheinander rein geschrieben werden.
Die Inklination rechnet er in "Geo-Magnetismus", Zelle C44, die Deklination in Zelle C46... jeweils neu nach neuer Datenerfassung.
Nach jeder Berechnung soll er die Ergebnisse in "Kurse", Spalte C, Zeilen 237 bis maximal 275 rein schreiben.
Weiss jemand ein vba hierzu?
Besten Dank und Grüsse...

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: vba: Werte zwischen 2 Tabellen einer Datei
21.05.2015 14:36:44
Michael
Hi Bernhard,
ein paar Daten irgendwohin zu schaufeln und Ergebnisse, die dort berechnet werden, abzugreifen und woandershin zu stecken ist keine große Sache in VBA.
Ich hab mal schnell ne Prinzip-Lösung geschrieben, die Du aber an die Zellen mit Deinen Daten anpassen mußt.
Kernstück ist der Index, den ich in "Geo-Magnetismus" in die betreffenden Zellen eingesetzt habe und der Dir die gewünschten Daten aus der Kurs-Tabelle zieht, je nachdem, in was für einer Zeile sich das Makro gerade befindet.
Das Makro zählt also die Zeilen hoch und zieht sich die (hier durch eine dummy-Formel) errechneten Werte.
Ohne vorhandene Beispieltabelle mag ich Deine Datenstrukturen nicht nachvollziehen, zu viel Aufwand.
Aber mit der Prinzip-Lösung ist Dir ja sicher schon mal geholfen.
https://www.herber.de/bbs/user/97759.xls
Schöne Grüße,
Michael

Anzeige
AW: vba: Werte zwischen 2 Tabellen einer Datei
25.05.2015 19:53:01
Bernhard
Hallo Michael,
besten Dank für deine Antwort und dein file.
Leider traf sie insofern nicht ganz, als dass ich die Anzahl der zu rechnenden Zeilen nicht im Vorhinein weiss, sondern das vba soll automatisch erkennen, ob ein Wegpunkt "bestückt" ist oder nicht, anhand ungleich "" (oder nicht) der Spalte B, die der Ergebnisspalte C benachbart ist.
Ich habe jetzt folgenden Code pro Wegpunkt verwendet (Beispiel-Schnipsel für 2 Wegpunkte):
Sub Missweisung1Bc()
If Sheets("Kurse").Range("b580")  "" Then
Sheets("Kurse").Range("n533").Copy
Sheets("Geo-Magnetismus").Range("f2").PasteSpecial Paste:=xlPasteValues
Sheets("Kurse").Range("o533").Copy
Sheets("Geo-Magnetismus").Range("f3").PasteSpecial Paste:=xlPasteValues
Sheets("Kurse").Range("j580:l580").Copy
Sheets("Geo-Magnetismus").Range("f6:h6").PasteSpecial Paste:=xlPasteValues
Sheets("Geo-Magnetismus").Range("c46").Copy
Sheets("Kurse").Range("c580").PasteSpecial Paste:=xlPasteValues
If Sheets("Kurse").Range("b581")  "" Then
Sheets("Kurse").Range("n534").Copy
Sheets("Geo-Magnetismus").Range("f2").PasteSpecial Paste:=xlPasteValues
Sheets("Kurse").Range("o534").Copy
Sheets("Geo-Magnetismus").Range("f3").PasteSpecial Paste:=xlPasteValues
Sheets("Kurse").Range("j581:l581").Copy
Sheets("Geo-Magnetismus").Range("f6:h6").PasteSpecial Paste:=xlPasteValues
Sheets("Geo-Magnetismus").Range("c46").Copy
Sheets("Kurse").Range("c581").PasteSpecial Paste:=xlPasteValues
'usw. usw.
End If
End If
End Sub
Jetzt arbeitet das vba zwar richtig... aber bei 32 Blöcken (= 32 Module) à 38 Wegpunkte ein Haufen Konzentrations- und Programmier-Tipp-Arbeit noch, jeweils die Range Nr. um 1 händisch zu erhöhen... mit 6 Übertippungen pro Wegpunkt :-)))
Trotzdem vielen Dank nochmals!
Beste Grüsse,
Bernhard

Anzeige
AW: vba: Werte zwischen 2 Tabellen einer Datei
26.05.2015 17:05:27
Michael
Hallo Bernhard,
halt, halt, das geht doch eleganter:
Sub Missweisung1Bc()
Dim i As Long
For i = 580 To 581      ' oder wie weit auch immer
If Sheets("Kurse").Range("b" & i)  "" Then
'Sheets("Kurse").Range("n533").Copy     was ist 580-533?
Sheets("Kurse").Range("n" & i - 47).Copy
Sheets("Geo-Magnetismus").Range("f2").PasteSpecial Paste:=xlPasteValues
Sheets("Kurse").Range("o" & i - 47).Copy
Sheets("Geo-Magnetismus").Range("f3").PasteSpecial Paste:=xlPasteValues
Sheets("Kurse").Range("j" & i & ":l" & i).Copy
Sheets("Geo-Magnetismus").Range("f6:h6").PasteSpecial Paste:=xlPasteValues
Sheets("Geo-Magnetismus").Range("c46").Copy
Sheets("Kurse").Range("c" & i).PasteSpecial Paste:=xlPasteValues
End If
Next
End Sub
Wenn i den Wert 580 hat, kannst Du auf C580 mit Range("C" & i) zugreifen; der & Operator setzt "Strings" zusammen und konvertiert die Zahl 580 automatisch in den String "580".
Schöne Grüße,
Michael

Anzeige
AW: vba: Werte zwischen 2 Tabellen einer Datei
28.05.2015 13:19:40
Bernhard
Hallo Michael,
danke für die Vereinfachung des Codes.
Ein Block (dieser berechnet den Steuerkurs anhand des rechtweisenden Kurses (rwK) eines Schlags (Reiseteilstück) auf der Reise) ist wie folgt in maximal 38 Wegpunkte + Start-Ort aufgebaut:
Blatt "Kurse", Beispiel 1.Block:
1. Für Start-Ort plus maximal 38 Wegpunkte in Zeilen 532 bis maximal 570: Berechnung der rwK's zwischen 2 WP's anhand deren geograf. Breite und Länge.
2. Dann: Für Start-Ort plus maximal 38 Wegpunkte in Zeilen 579 bis maximal 617: Berechnung der Steuerkurse zwischen 2 WP's, anhand der oben zuvor berechneten rwK's.
Je nachdem, wie stark ich den Schlag in WP's prozentual per Eingabe zerstückele, eine unterschiedliche Zahl an Wegpunkten, bis maximal 38 + Start-Ort. Andernfalls bleiben die Felder neben den WP's
durch "" leer....
1. Berechnung der rwK's:
Zeile 532, Spalte A (Bezeichnung): Start-Ort, Spalte N: geograf. Breite Start-Ort, Spalte O: geograf. Länge Start-Ort, Spalte R: rwK vom Start-Ort zum Wegpunkt (WP) 1.
Zeile 533, Spalte A (Bezeichnung): WP1, Spalte N: geograf. Breite WP1, Spalte O: geograf. Länge WP1, Spalte R: rwK vom WP1 zum WP2.
Zeile 534, Spalte A (Bezeichnung): WP2, Spalte N: geograf. Breite WP2, Spalte O: geograf. Länge WP2, Spalte R: rwK vom WP2 zum WP3.
usw... bis maximal WP38 in Zeile 570.
2. Berechnung der Steuerkurse von WP zu WP mit Hilfe der Missweisung und der Inklination (zum Kompass-Wechsel):
Zeile 579, Spalte A (Bezeichnung): Start-Ort; Spalte B: in Teil 1 Zeile 532 errechneter rwK; Spalte C: Missweisung und Spalte Y: Inklination, die er beide jeweils im Blatt "Geo-Magnetismus" in C46 und C44 mit jeweiliger Länge und Breite aus "Kurse", Spalten N und O, via vba ausrechnen und sodann in Spalten C und Y von "Kurse" rein schreiben soll. Dto. das Datum aus "Kurse" Spalten J bis L in "Geo-MagnetismuS", Zellen F6 bis H6 reinschreiben...
Zeile 580, Spalte A (Bezeichnung): WP1; Spalte B: in Teil 1 Zeile 533 errechneter rwK; Spalte C: Missweisung und Spalte Y: Inklination, die er beide jeweils im Blatt "Geo-Magnetismus" in C46 und C44 mit jeweiliger Länge und Breite aus "Kurse", Spalten N und O, via vba ausrechnen und sodann in Spalten C und Y von "Kurse" rein schreiben soll. Dto. das Datum aus "Kurse" Spalten J bis L in "Geo-MagnetismuS", Zellen F6 bis H6 reinschreiben...
Zeile 581, Spalte A (Bezeichnung): WP2; Spalte B: in Teil 1 Zeile 534 errechneter rwK; Spalte C: Missweisung und Spalte Y: Inklination, die er beide jeweils im Blatt "Geo-Magnetismus" in C46 und C44 mit jeweiliger Länge und Breite aus "Kurse", Spalten N und O, via vba ausrechnen und sodann in Spalten C und Y von "Kurse" rein schreiben soll. Dto. das Datum aus "Kurse" Spalten J bis L in "Geo-MagnetismuS", Zellen F6 bis H6 reinschreiben...
usw.... bis maximal WP38 in Zeile 617.
(Im Ergebnis rechnet er nach weiteren Beschickungen in Spalte I dann die Steuerkurse von WP zu WP aus, aber das nur nebenbei...).
Da die Berechnung von Missweisung und Inklination eine Wahnsinns-Rechnerei ist (18 Spalten und 102 Zeilen pro WP), ist hier eine vba Lösung sinnvoll, um den komplexen Algorithmus nicht 38 x 32 Mal in ein Sheet kopieren zu müssen... ;-)
Das ganze Spiel dann für weitere 31 Blöcke, deren Berechnung dann aber separat angestartet werden soll (deshalb unterschiedliche Module).
Vielen Dank für Deine Unterstützung!
Beste Grüsse,
Bernhard
Anzeige

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige