Supportnet / Forum / Tabellenkalkulation
Zellen kopieren, Makro
Frage
Tach zusammen,
folgende Aufgabe:
in Spalte F steht der Turnus, mit dem sich Zahlungen wiederholen sollen,
1 für mtl
2 für alle 2 Monate
3 für Quartal usw.
Die Zahlungen sollen im Bereich J bis U = 12 Spalten stehen,
= Monatsspalten Jan, Feb, usw.
[u]Bsp1[/u]:
in F3 steht 3 (also für Quartalszahlung), in J3 steht 100,00
das Makro soll den Inhalt von J3 dreimal kopieren,
also nach M3 (Apr), P3 (Jul) und S3 (Okt)
[u]Bsp2[/u]:
wie Bsp1, der erste Wert steht aber in N3 und muss folglich nur zweimal,
also nach Q3 (Aug) und T3 (Nov) kopiert werden.
Vielleicht kann mir jemand von den VBA-Künstlern auf die Sprünge helfen, im Moment habe ich keine Idee.
MfG
schnallgonz
[sub]Ich stimme mit der Mathematik nicht überein.
Ich meine, daß die Summe von Nullen eine gefährliche Zahl ist. (S.J. Lec)
Signatur und Textformatierungen wurden mit [url=http://querschlaegerzone.gu5.info/sntool/]SNTool V1.2.7[/url] erstellt
Antwort 1 von coros
Hi scghnallgonz,
mein Vorschlag wäre folgender:
Das Makro ermittelt in dem Bereich J3:U3 in welcher Spalte ein Eintrag steht. Diese Spalteindexnummer wird in einer Variablen gespeichert. Danach wird eine weitere Schleife gestartet, die als Startpunkt den Wert der Variablen deren Inhalt die Spaltenindexnummer ist hat. Als Abarbeitungsschritte wird die Zahl aus Zelle F3 herangezogen. Je nachdem welcher Wert in Zelle F3 steht, also 1, 2 oder 3, wird die Summe aus der gefundenen Zelle im Bereich J3:U3 kopiert. Also so, wie Du es wolltest.
Probiers mal aus und melde Dich, wenn Du nicht klar kommst.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
mein Vorschlag wäre folgender:
Option Explicit
Sub Füllen()
Dim Wiederholungen As Integer, Start As Integer
For Wiederholungen = 10 To 21
If Cells(3, Wiederholungen) <> Empty Then
Start = Wiederholungen
GoTo Weiter
End If
Next
Weiter:
For Wiederholungen = Start To 21 Step Range("F3")
Cells(3, Start).Copy Cells(3, Wiederholungen)
Next
End Sub
Das Makro ermittelt in dem Bereich J3:U3 in welcher Spalte ein Eintrag steht. Diese Spalteindexnummer wird in einer Variablen gespeichert. Danach wird eine weitere Schleife gestartet, die als Startpunkt den Wert der Variablen deren Inhalt die Spaltenindexnummer ist hat. Als Abarbeitungsschritte wird die Zahl aus Zelle F3 herangezogen. Je nachdem welcher Wert in Zelle F3 steht, also 1, 2 oder 3, wird die Summe aus der gefundenen Zelle im Bereich J3:U3 kopiert. Also so, wie Du es wolltest.
Probiers mal aus und melde Dich, wenn Du nicht klar kommst.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 2 von schnallgonz
Hallo Oliver,
na wenn das nicht schon eine vorgezogene Weihnachtsbescherung ist.
Funzt natürlich bestens, wie immer bei Dir.
Tausend Dank.
MfG
Gert
na wenn das nicht schon eine vorgezogene Weihnachtsbescherung ist.
Funzt natürlich bestens, wie immer bei Dir.
Tausend Dank.
MfG
Gert
Antwort 3 von coros
Hi Gert,
freut mich, wenn Du Dich mit so wenig zufrieden gibst zu Weihnachten. Da werd ich Dir jetzt jedes Jahr ein Makro zu Weihnachten schenken und zum Geburtstag noch eine kleine Makroerweiterung. ;-)
Danke Dir für die Rückmeldung.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
freut mich, wenn Du Dich mit so wenig zufrieden gibst zu Weihnachten. Da werd ich Dir jetzt jedes Jahr ein Makro zu Weihnachten schenken und zum Geburtstag noch eine kleine Makroerweiterung. ;-)
Danke Dir für die Rückmeldung.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 4 von schnallgonz
Hallo Oliver, hallo VBA-Bastler
es ist wie so oft, Problemstellung nicht vollständig geschildert
und nach einer Lösung kommt die nächste Frage.
Ich wollte Deine Lösung in eine weitere Schleife packen, die mehrere Zeilen aus Spalte F durchläuft.
Sieht so aus:
Ich weiß nicht, warum der Laufzeitfehler im letzten Schritt kommt, das Lokalfenster zeigt die Werte für FixAnz und FixZeile korrekt an.
MfG
schnallgonz
es ist wie so oft, Problemstellung nicht vollständig geschildert
und nach einer Lösung kommt die nächste Frage.
Ich wollte Deine Lösung in eine weitere Schleife packen, die mehrere Zeilen aus Spalte F durchläuft.
Sieht so aus:
Sub FixAutoSchleife()
Dim Wiederholungen As Integer, Start As Integer
Dim FixAnz As Integer, FixZeile As Integer
FixAnz = Range("FixkontenAnzahl").Value
For FixZeile = 3 To FixAnz + 2
For Wiederholungen = 10 To 21
If Cells(FixZeile, Wiederholungen) <> Empty Then
Start = Wiederholungen
GoTo Weiter
End If
Next Wiederholungen
Weiter:
For Wiederholungen = Start To 21 Step Range("F" & FixZeile)
REM hier gehts nicht weiter, Laufzeitfehler 1004
Cells(FixZeile, Start).Copy Cells(FixZeile, Wiederholungen)
Next Wiederholungen
Next FixZeile
End SubIch weiß nicht, warum der Laufzeitfehler im letzten Schritt kommt, das Lokalfenster zeigt die Werte für FixAnz und FixZeile korrekt an.
MfG
schnallgonz
Antwort 5 von coros
Hi Gert,
also zunächst einmal würde mich interessieren, wie der Code bei Dir bis zur Rem-Markierung durchläuft, wenn in Deinem Code wirklich die Anweisung
FixAnz = Range("FixkontenAnzahl").Value
so steht. bei mir kommt bereits an der Stelle ein Fehler. Erklär mir doch bitte diese Anweisung, da ich da im Moment etwas auf dem Schlauch stehe, was Du da in die Variable schreiben möchtest.
Welche Zellen betrifft das eigentlich in Spalte F? Kannst Du dazu noch ein paar Infos geben?´
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
also zunächst einmal würde mich interessieren, wie der Code bei Dir bis zur Rem-Markierung durchläuft, wenn in Deinem Code wirklich die Anweisung
FixAnz = Range("FixkontenAnzahl").Value
so steht. bei mir kommt bereits an der Stelle ein Fehler. Erklär mir doch bitte diese Anweisung, da ich da im Moment etwas auf dem Schlauch stehe, was Du da in die Variable schreiben möchtest.
Welche Zellen betrifft das eigentlich in Spalte F? Kannst Du dazu noch ein paar Infos geben?´
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 6 von schnallgonz
Hallo Oliver,
vielen Dank für die schnelle Nachricht.
In der Spalte F steht entweder kein Wert oder ein Wert von 1 bis 12. Es sind z.Zt. ca. 200 Zeilen in Gebrauch, von denen unterschiedlich viele in F einen Wert stehen haben, z.Zt. 20.
Die Zahl 20 wird also in die Variable FixAnz eingelesen.
Weil ich mir nicht anders zu helfen wusste, lasse ich zunächst Spalte F zusammen mit anderen Spalten sortieren, so dass die Zeilen mit Werten in Spalte F am Anfang stehen, beginnend in Zeile 3.
Habe ich z.B. 20 Zeilen mit SpalteF-Werten, sollen diese dann mit o.g. Makro abgearbeitet werden, und zwar von Zeile 3 bis zur Zeile 22.
Dein Makro soll also seinen Dienst in diesem Beispiel nacheinander in 20 Zeilen tun.
Das geht vielleicht auch ohne vorherige Sortierung, aber als VBA-Halbwissender habe ich den anderen Weg genommen.
So läuft das Makro bis zur REM-Zeile, die Variablen werden vorher also erkannt und auch angezeigt.
Habe ich in ähnlicher Form schon mehrfach eingesetzt, nur nicht in einer verschachtelten Schleife.
Ich hoffe, ich habe den Sachverhalt verständlich machen können.
Danke schon mal für Deine erneute Mühe.
MfG
Gert
vielen Dank für die schnelle Nachricht.
Zitat:
FixkontenAnzahl
ist der Name einer Zelle, in der mit ANZAHL das Vorkommen von Werten in der Spalte F gezählt wird.FixkontenAnzahl
In der Spalte F steht entweder kein Wert oder ein Wert von 1 bis 12. Es sind z.Zt. ca. 200 Zeilen in Gebrauch, von denen unterschiedlich viele in F einen Wert stehen haben, z.Zt. 20.
Die Zahl 20 wird also in die Variable FixAnz eingelesen.
Weil ich mir nicht anders zu helfen wusste, lasse ich zunächst Spalte F zusammen mit anderen Spalten sortieren, so dass die Zeilen mit Werten in Spalte F am Anfang stehen, beginnend in Zeile 3.
Habe ich z.B. 20 Zeilen mit SpalteF-Werten, sollen diese dann mit o.g. Makro abgearbeitet werden, und zwar von Zeile 3 bis zur Zeile 22.
Dein Makro soll also seinen Dienst in diesem Beispiel nacheinander in 20 Zeilen tun.
Das geht vielleicht auch ohne vorherige Sortierung, aber als VBA-Halbwissender habe ich den anderen Weg genommen.
So läuft das Makro bis zur REM-Zeile, die Variablen werden vorher also erkannt und auch angezeigt.
Habe ich in ähnlicher Form schon mehrfach eingesetzt, nur nicht in einer verschachtelten Schleife.
Ich hoffe, ich habe den Sachverhalt verständlich machen können.
Danke schon mal für Deine erneute Mühe.
MfG
Gert
Antwort 7 von schnallgonz
Hallo Oliver,
ich hab´s, Code ok, aber nicht die Tabellenwerte!!
Manchmal ist es zum ******, da sucht man in der völlig falschen Ecke.
In einer Zeile stand zwar in Spalte F ein Wert, nicht aber in J bis U.
Baue noch eine Abfangmarke ein.
Ich hoffe, Du bist noch nicht erneut in die Sache eingestiegen.
Vielen Dank
MfG
Gert
ich hab´s, Code ok, aber nicht die Tabellenwerte!!
Manchmal ist es zum ******, da sucht man in der völlig falschen Ecke.
In einer Zeile stand zwar in Spalte F ein Wert, nicht aber in J bis U.
Baue noch eine Abfangmarke ein.
Ich hoffe, Du bist noch nicht erneut in die Sache eingestiegen.
Vielen Dank
MfG
Gert

