Makro Spalte kopieren

Hallo miteinander,

ich brauche eure Hilfe.

Hier mein Problem:

Ich hab eine Tabelle.
In der Zelle F6 steht ein Datum, 01/02/11
In der Zelle AL6 steht ebenfalls das Datum 01/02/11
In der Zelle AK6 das Datum 02/02/11
In der Zelle AJ6 das Datum 03/02/11
bis zur Zelle K6 mit dem Datum 28/02/11

Per Makro soll nun die Werte der Spalte F16:F591 kopiert und ab der Zelle AL16:AL591 eingefügt werden.

Sobald ich meine Arbeit abgeschlossen habe ändert sich das Datum der Zelle F6 zum Datum 02/02/11 und auch die Werte der Spalte F.
Das heisst nun soll per Makro wiederum die Spalte F16:F591 kopiert und ab der Zelle AK16:AK591 eingefügt werden.
usw.

F (…) AJ AK AL
01/02/11 03/01/11 02/01/11 01/01/11

x
x
x
x
x

Ich hab das schon per Makroaufnahme probiert. Aber ich weiss nicht, wie ich das der Makro beibringen soll, dass ich nicht immer nur alles in Spalte AL haben will, sondern dass er danach die Werte in die Spalte AK eingibt usw.

Ich hoffe, ich habe mich klar ausgedrückt.
Für eure Hilfe wäre ich euch wirklich sehr dankbar.

Liebe Grüsse
chacha

Ich kann noch nicht die Logik, wann in welche oder wie vielte Spalte kopiert werden soll.

Daher hier nur ein genereller Tipp und Ansatz:
Benenn den Bereich von wo die Daten kommen F16:F91 mit einem Namen (Aufruf Namen = F3) In meinem Beispiel ist der Name „DataSource“.

dann führ diesen Code aus
Range(„SourceData“).Copy
Range(„SourceData“).Offset(0, 31).PasteSpecial xlPasteAll

Jetzt musst du nur noch sehen, wann und wie 31 weiterzählst, bzw auf eine andere Spalte verweist.

mfg
T. Wagner

Ok, lieber chacha.

Das Datum in Zeile 6 ist für mich erst mal gar nicht relevant, da Du ja erst ab Zeile 16 kopieren willst.
Du musst nun zählen: F its die sechste Spalte, AK die 37. Spalte.

Also gibst Du ein:

Sub zellenkopieren()

quellspalte = 6
zielspalte = 37
startzeile = 16
endzeile = 591

For zeile = startzeile To endzeile
Cells(zeile, zielspalte) = Cells(zeile, quellspalte)
Next

End Sub

Schöne Grüße
richtig

Hallo,
ich bin mir nicht sicher ob ich das Problem richtig verstanden habe. Die Reihenfolge der Zellen ist mir nicht wirklich klar.
Davon unabhängig würde ich folgenden Lösungsansatz wählen.

Da es sich um Datumswerte handelt, verwende die eingebaut e Funktion in einer inkrement Schleife und füge damit die Werte in die entsprechenden Zellen ein. Die Reihenfolge der Zellen wird auch mit eine rinkrement Schleife bestimmt.
Damit spart du dir auch das einzelne befüllen der 1. Spalte
wenn die die Datumswerte in regelkmäßigen Abstnden sich verändern.

For i = F to …
For x = Date()
x= Date() +1
Next x
next i …

Sorry,
ich denke, Du weißt vielleicht nicht, dass man per Makro-Rekorder immer nur das aufzeichnet, was man gerade in dem Kontext des Zellezigers macht, den man dabei bewegt. Wenn man das aufgezeichnete flexibel für allgemein-gültige Abarbeitungen verwenden möchte, muss man den Code des Makro-Rekorders entsprechend manuell abändern.

Das heißt: Der akro-Rekorder ist nur gut für Aktionen, die man genau so an derselben Stelle wiederholen möchte und außerdem dafür, dass man die Bezeichnungen der Funktionen und Zell-Beriche etc. namentlich kennenlernt. Alles weitere bedarf einer mühsamen manuellen Programmierung.

Bitte zerlege Deine Aufgabenstellung in einzelne Teilschritte und stelle eine kurze konkrete Frage - diese werde ich Dir dann in einigen VBA-Zeilen beantworten.

Hallo Chacha9

Per Makro soll nun die Werte der Spalte F16:F591 kopiert und
ab der Zelle AL16:AL591 eingefügt werden.

Sobald ich meine Arbeit abgeschlossen habe ändert sich das
Datum der Zelle F6 zum Datum 02/02/11 und auch die Werte der
Spalte F.
Das heisst nun soll per Makro wiederum die Spalte F16:F591
kopiert und ab der Zelle AK16:AK591 eingefügt werden.

Du brauchst eine Zelle, in der Du speicherst, wie oft Du schon kopiert hast. In meinem Beispiel-Code habe ich die Zelle A1 [Cells(1, 1)] dafür verwendet.

Erstmal der Beispiel-Code:

Dim Speicher As Long 'deklariert eine Variable vom Datentyp Long.
Speicher = CLng(Tabelle1.Cells(1, 1)) 'weist der Variablen den zum Datentyp Long konvertierten Wert der Zelle A1 zu
Tabelle1.Range(Cells(16, 6), Cells(591, 6)).Copy Range(Cells(16, 38 + Speicher), Cells(591, 38 + Speicher)) 'kopiert die Werte aus F16:F591 nach A?16:A?591
Tabelle1.Cells(1, 1) = CLng(Tabelle1.Cells(1, 1)) + 1 'Addiert 1 zum Wert in Zelle A1

Die Variable „Speicher“ habe ich nur zum besseren Verständnis verwendet. Du könntest in der Codezeile, die für das Kopieren eigentlich zuständig ist, die Variable „Speicher“ ersetzen durch „Cells(1, 1)“ und dann die ersten beiden Codezeilen komplett löschen.

Hoffe, das hilft Dir weiter.

VG
Carsten

nachtrag:

wenn du willst dass er die nächste eingabe aus spalte F dann in spalte AL (also Nr. 38) einträgt, dann lege eine zelle fest, in der du den zähler für die zielspalte definierst, zum Beispiel so:

zielspalte = Cells(1, 37)

diese zelle solltest du später schreibschützen, weil ein gelöschter inhalt hier natürlich ungewolltes überschreiben könnte. oder du machst eine sicherheitsabfrage, etwa so:

if zielspalte

Hallo Junoland,

danke für deine Antwort. Du hast Recht, ich hab nicht wirklich viel Ahnung. :wink:
Ich glaube, dass die Makro ungefähr so aussehen soll:

Sheets(„Input“).Select
Range(„F16:F591“).Select
Selection.End(xlToRight).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Also das funktioniert nicht. Ein Kollege meint, man müsse da noch

Active.Cell.Offset(0,1).Select

einbauen.

*Seufz, danke für deine Hilfe. Ich arbeite und lebe in Bora Bora und das Internet ist noch superlangsam und von Excel Experten wimmelt es hier auch nciht. :wink:

LG Chacha

Hallo!
Da mußtest Du einen Zähler mitführen, und dann die Zielangabe durch die form „cells.offset(x,y)“ (oder so ähnlich) ersetzen.

Gruß Wolfram