Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
908to912
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
908to912
908to912
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Wer Schreibt Mir Das MAKRO Zu Ende !?

Wer Schreibt Mir Das MAKRO Zu Ende !?
29.09.2007 08:47:00
Leo

Moin Moin zusamen,
ich hab zwar ein MAKRO für ein fortlaufendes Datum, doch benötige ich auch eins für die Spalte E - wie ihr in der Anlage - https://www.herber.de/bbs/user/46432.xls - leicht feststellen könnt ...
Wer kann mir kurz eins schreiben !? !? !?
Mit freundlichem Gruß :
Leo van der Haydn

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wer Schreibt Mir Das MAKRO Zu Ende !?
29.09.2007 08:48:49
Leo
Zur Vervollständigung :
------------------------------
Natürlich soll der Wert in der oberen Zeile in der leeren E SPALTE eingetragen werden !!!
MfG
Leo

AW: Wer Schreibt Mir Das MAKRO Zu Ende !?
29.09.2007 11:46:00
ingUR
Hallo, Leo van der Haydn,
eigentlich wäre es geschickt, wenn Du gleich bei der Zieleneinfügung für fehlende Datumszeilen in der Folge dieses Arbeit erledigen könntest:

Sub DatumInDerASpalteEinfuegen()
Dim lngRow As Long, lngLast As Long
Dim rng As Range
On Error GoTo ErrExit
GMS
lngLast = Cells(Rows.Count, 1).End(xlUp).Row
For Each rng In Range("A2:A" & lngLast)
If IsDate(rng) Then
If rng.Offset(1, 0) > rng + 1 Then
rng.Offset(1, 0).EntireRow.Insert
rng.Offset(1, 0) = rng + 1
rng.Offset(1, 0).NumberFormat = rng.NumberFormat
Range("B" & rng.Row & ":E" & rng.Row).Copy Destination:=rng.Offset(1, 1)
lngLast = lngLast + 1
End If
End If
Next
ErrExit:
GMS True
End Sub

Hier werden also bei Einfügen eines Datums, die Zelleninhalte der Spalten B bis E aus der Zeile vor der eingefügten Zeile in die leeren Zellen der eingefügten Zeile kopiert.
Soll tatsächlich nur der Zelleninhalt der Spalte E in die eingefügte Zeile zu übernehmen sein, dann kann auch geschrieben werden:


rng.offset(1,4)=rng.offset(0,4)

statt des Range.Copy-Befehls.
Liegen die Datumseinträge bereits in ununterbrochener Reihenfolge vor, dann muß Du in einer eigenen Prozedur das nachrägliche Auffüllen erledigen lassen:


Sub QuotesOHLC_InLeerZellenKopieren()
Dim lngRow As Long, lngLast As Long
Dim rng As Range
lngLast = Cells(Rows.Count, 1).End(xlUp).Row
For Each rng In Range("A2:A" & lngLast)
If len(rng.offset(1,4))=0 Then
Range("B" & rng.Row & ":E" & rng.Row).Copy Destination:=rng.Offset(0, 1)
End If
End If
Next
End Sub

Wieder wird hier der Bereich B:E, also O, H, L und C einer der Vorzeile in den leeren Zeilenbereich der Zeile kopiert. Das gleiche, wenn nur die Spalte E einzubeziehen ist:


Sub QuotesC_InLeerZellenKopieren()
Dim lngRow As Long, lngLast As Long
Dim rng As Range
lngLast = Cells(Rows.Count, 1).End(xlUp).Row
For Each rng In Range("E2:E" & lngLast)
If len(rng)=0 Then
rng=rng.offset(-1,0)
End If
Next
End Sub

Obwohl der Programmcode nicht geprüft ist, so meine ich, ist mit diesem Grundprinzip die Aufgabe zu lösen.
Viel Erfolg!
UWe

Anzeige
AW: Wer Schreibt Mir Das MAKRO Zu Ende !?
06.10.2007 11:17:46
Leo
Tag Uwe - und alle zusammen,
ich hab` soeben folgenden Code kopiert ...

Sub QuotesOHLC_InLeerZellenKopieren()
Dim lngRow As Long, lngLast As Long
Dim rng As Range
lngLast = Cells(Rows.Count, 1).End(xlUp).Row
For Each rng In Range("A2:A" & lngLast)
If len(rng.offset(1,4))=0 Then
Range("B" & rng.Row & ":E" & rng.Row).Copy Destination:=rng.Offset(0, 1)
End If
End If
Next
End Sub


doch dann kommt immer nur folgende MICROSOFT VISUAL BASIC Fehlermeldung ...
Compile error:
End if without block If
Hab` die Datei - https://www.herber.de/bbs/user/46559.xls - hochgeladen !!!
Sollte eigentlich kein großes Ding sein aber - offen gestanden - raff ich es nicht ...
MfG
Leo van der Haydn

Anzeige
AW: Wer Schreibt Mir Das MAKRO Zu Ende !?
06.10.2007 11:37:00
Daniel
Hi
was ist daran schwierig?
"End IF" steht 2x hintereinander im Code,
aber du hast nur eine "IF...THEN" Bedingung, also ist ein "END IF" zuviel, weil "IF...THEN" und "END IF" gehören immer zusammen.
lösch das überflüssige "END IF" raus und dein Code wird laufen.
da hat derjenige, von dem du den Code bekommen hast, sein Makro einfach nicht getestet.
allerdings bewirkt dein Code nichts außer Zeitverschwendung, weil er die Zellen auf sich selbst kopiert und somit nichts an der Datei verändert.
Gruß, Daniel

AW: Wer Schreibt Mir Das MAKRO Zu Ende !?
06.10.2007 12:04:00
Daniel
Hi
noch ne Korrektur
ich vermuste mal, du willst die Leeren Zeilen mit den Werten aus der Zeile drüber füllen.
dann musst du in dem Code noch diese Zeile so korriegieren, sonst bewirkt das Makro nichts.
Range("B" & rng.Row & ":E" & rng.Row).Copy Destination:=rng.Offset(1, 1)
alternativ könntest du auch diesen Code testen, er sollte etwas schneller sein, da die schleife nur diejenigen Zellen durchläuft, die tatsächlich leer sind und nicht alle.
Die IF-Abfrage kann somit entfallen:

Sub Für_Formeln_in_Spalte_B_bis_E()
Dim lngLast As Long
Dim rng As Range
lngLast = Cells(Rows.Count, 1).End(xlUp).Row
For Each rng In Range("E2:e" & lngLast).SpecialCells(xlCellTypeBlanks)
rng.Offset(-1, -3).Resize(1, 4).Copy Destination:=rng.Offset(0, -3)
Next
End Sub


Gruß, Daniel

Anzeige
AW: Wer Schreibt Mir Das MAKRO Zu Ende !?
06.10.2007 14:21:00
ingUR
Hallo, Leo van der Hyden,
wie Daniel bereits richtig vermutete, wurden die Prozeduren nicht praktisch von mir getestet, und das ist war nicht gut.
Für den Antwortteil, bei der die Zeitreihe bereis besteht, ist folgender Code zu setzen:

Sub QuotesOHLC_InLeerZellenKopieren()
Dim lngRow As Long, lngLast As Long
Dim rng As Range
lngLast = Cells(Rows.Count, 1).End(xlUp).Row - 1
For Each rng In Range("A2:A" & lngLast)
If len(rng.offset(1,4))=0 Then
Range("B" & rng.Row & ":E" & rng.Row).Copy Destination:=rng.Offset(1, 1)
End If
Next
End Sub

Natürlich kannst du auch das End If weglassen, wenn Du die beiden vorherigen Zeilen zu einer Zeile zusammenfügst bzw. durch ein Leerzeichen unt einen Unterstrich hiter dem Then miteinander verbindest.
Die Korrektur gibt mir Gelegenheit, einen zweiten Logikfehler auszubessern, denn für die letzte Zeile der Datumsspalte A soll dieser IF-Block nicht mehr ausgeführt werden, da keine gültige Zeile mehr folgt und damit das Kopieren der letzten Zeile unterbleiben soll. Damit genügt es also die vorletzte Zeile zu ermitteln: lngLast = Cells(Rows.Count, 1).End(xlUp).Row - 1, die Subraktion um 1 ist hinzugefügt.
Zur Erläuterung:
Es wird die vorletzte Zeilen der Spalte A festgestellt, die die Datumseinträge in ununterbrochener Folge für eine Zeitspanne enthält.
Nun wir für jede Zeile im Bereich rng untersucht, ob in der Spalte E dieser Zeile ein Wert für den Close-Kurs eingetragen ist. Ist dies der Fall, so ist keine weitere Aktion erfordelich und es kann zur nächsten Zeile des Bereichs rng gegangen werden.
Wird hingegen dort kein Wert gefunden, dan werden die Werte für OHLC der aktuellen Zeile dahin kopiert ( z.B. die Kurse vom Gründonnerstag werden auf den Karfreitag übertagen, im nächsten Schritt werden die Kurse vom Karfreitag auf den Samstag übertragen usw., so dass Karfreitag bis Ostermontag, wenn dieses ein handelsfreier Tag ist - mit den Kursen vom letzten Donnerstag vor Karfreitag aufgefüllt wurden.
Range("B" & rng.Row & "E" & rng.Row).copy speichern den benannten Bereich in den Zwischenspeicher. Als Ziel ist dei Adresse Range("B" & rng.Row+1) zu bezeichnen, was eben auch dadurch erreicht werden kann, dass man mir der Offset-Eigenschaft der Zelle Range("B" & rng.Row ) selbst arbeitet. Im Offset-Befehl ist der erste Parameter der Zeilenversprung und der zweite Parameter der Spaltenversatz.
Ich hoffe damit ist die Vorgehensweise des Programmteils ausreichend beschrieben. Für die eingebauten Fehler bitte ich um Nachsicht.
Gruß,
Uwe

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige