Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Makro: Einfügen in nächste leere Zeile in Excel XP

1,618 views
Skip to first unread message

Anna

unread,
Aug 19, 2003, 5:17:02 AM8/19/03
to
Hallo, Leute,

aus der Datei "xxx" soll der Wert aus Zelle F5 kopiert werden und eingefügt
werden in die Spalte D der Datei "yyy", und zwar in die nächste in Spalte D
verfügbare Zelle. Wenn also beispielsweise in "yyy" in Spalte D schon
Einträge bis einschließlich D17 erfolgt sind, dann soll der Wert in Zelle
D18 eingefügt werden, etc.

Wer kann mir als Makro-Neuling hierbei helfen?

DANKE!

Anna

Lars Küster

unread,
Aug 19, 2003, 6:53:26 AM8/19/03
to
Hallo Anna,

hier eine Lösung, hoffe sie kann Dir helfen:

------ cut -------
Sub kopieren()

Range("F5").Select
Selection.Copy
Windows("yyy.xls").Activate
Range("d1").Select
Do While ActiveCell.Value <> ""
ActiveCell.Offset(1, 0).Range("a1").Select
Loop
ActiveSheet.Paste
Application.CutCopyMode = False


End Sub
------ cut -------

Lars

Anna schrieb:

Thomas Hennig

unread,
Aug 19, 2003, 7:13:04 AM8/19/03
to
Hallo Anna,

Anna wrote:
> aus der Datei "xxx" soll der Wert aus Zelle F5 kopiert werden und eingefügt
> werden in die Spalte D der Datei "yyy", und zwar in die nächste in Spalte D
> verfügbare Zelle. Wenn also beispielsweise in "yyy" in Spalte D schon
> Einträge bis einschließlich D17 erfolgt sind, dann soll der Wert in Zelle
> D18 eingefügt werden, etc.

> Anna

ich versuch's mal. Den Code (ungetestet !!!) in ein Modul packen
und die Sub KopiereInErsteFreieZeile ausfuehren.
Bedingung: Beide EXCEL-Dateien (xxx und yyy) muessen schon
geoeffnet sein.

Ich hoffe, damit kommst Du weiter.

Tschau Thomas.

Option Explicit
'
Public Sub KopiereInErsteFreieZeile()
Dim Quelle As Object, Ziel As Object
Dim ErsteFreieZeileInSpalteD As Long

Set Quelle = Workbooks("xxx").Worksheets("Tabelle1")
Set Ziel = Workbooks("yyy").Worksheets("Tabelle1")

If (Ziel.Cells(2,4).Value <> "") Then
ErsteFreieZeileInSpalteD = Ziel.Cells(1,4).End(xlDown).Row + 1
Else
ErsteFreieZeileInSpalteD = 2
End If

'Kopieren:
Ziel.Cells(ErsteFreieZeileInSpalteD,4).Value = _
Source.Cells(5,6).Value

'Objekte wieder zuruecksetzen:
Set Ziel = Nothing
Set Quelle = Nothing
End Sub

Jean Ruch

unread,
Aug 19, 2003, 7:18:29 AM8/19/03
to

>-----Originalnachricht-----

>aus der Datei "xxx" soll der Wert aus Zelle F5 kopiert
werden und eingefügt werden in die Spalte D der
Datei "yyy", und zwar in die nächste in Spalte D
verfügbare Zelle. Wenn also beispielsweise in "yyy" in
Spalte D schon Einträge bis einschließlich D17 erfolgt
sind, dann soll der Wert in Zelle D18 eingefügt werden.


Hallo Anna,

Eine Alternative zu Lars's Lösung wäre Folgende:( setzt
voraus, daß beide Dateien xxx und yyy geöffnet sind )

Sub Makro_rüberkopieren()

Windows("xxx.xls").Activate
ActiveWorkbook.Sheets("Tabelle2").Range("F5").Copy
Windows("yyy.xls").Activate
ActiveWorkbook.Worksheets("Tabelle3").Range
("A65536").End(xlUp).Offset(1, 0).PasteSpecial
Paste:=xlValues

End Sub


so kopieren und als solches laufen lassen
Tabellen Bezeichnungen mußt Du natürlich anpassen...
Während Lars sich in Spalte D von oben nach unten bewegt,
kommst Du hiermit von unten nach oben. Es besteht also
nicht die Gefahr, daß eine Lücke in Deinen schon
vorhandenen Einträgen in Spalte D sind wo sich ein neuer
Eintrag verlieren könnte :-).

Anna

unread,
Aug 19, 2003, 11:01:24 AM8/19/03
to
Hallo, Lars,

SUPER! Danke! Das funktioniert! So ganz begreife ich den offensichtlich
relevanten Part

> Do While ActiveCell.Value <> ""
> ActiveCell.Offset(1, 0).Range("a1").Select
> Loop

zwar nicht ..., aber wenigstens klappt es bestens!

Nochmals Danke!

Anna


"Lars Küster" <la...@kuester.it> schrieb im Newsbeitrag
news:3F4201A6...@kuester.it...

Lars Küster

unread,
Aug 19, 2003, 2:52:18 PM8/19/03
to
Hallo Anna.

ActiveCell.Value überprüft den Wert der Zelle.
wenn der Wert ungleich (<>) Nichts ("") ist,
dann soll der Code solange (Do While) den Zellmarkierer um einen nach
unten versetzen bis die Behauptung falsch ist. Also der Wert = nix ist,
also die Zelle Leer ist.

Die Anweisung Activecell.offset(1,0).Range("a1").select kann man wie
folgt lesen.

Von der Active Zelle(ActiveCell) versetze denn Zellmarkierer (Offset) um
einen nach unten (erste zahl bestimmt die anzal der reihen, zweite zahl
bestimmt die anzahl der spalten => 1,0 heit eine reihe, keine spalte)
und wähle einen Bereich aus, der so groß ist wie der Beriech A1
(Range("A1").select

Da nun eine Zelle tiefer gesprungen wurde kann die Do while anweisung
wieder überprüfen ob die nun aktive Zelle einen Wert enthält oder nicht.

Das ganze wird solange wiederholt bis die aktive Zelle keinen Wert
enthält, so daß du nun in die leere Zelle einen Wert eintragen kannst.

Ich hoffe es war Verständlich erklärt

Lars


Anna schrieb:

Jean Ruch

unread,
Aug 20, 2003, 5:53:42 AM8/20/03
to

>-----Originalnachricht-----
Hallo Lars,

Dein Makro funktioniert, Du hast ja die Bestätigung und
den Dank von Anna, aber ich kann Dir überhaupt nicht
folgen bei folgender Aussage:

>"und wähle einen Bereich aus, der so groß ist wie der
Beriech A1 (Range("A1").select"


Hast Du nicht eher -in einer Aufzeichnung - einfach die
Zelle A1 angewählt und den Schritt nachher aus dem Makro
nicht wieder entfernt? Weil Du machst ja in der Tat
nichts mit dieser Auswahl, außer Excel über A1 zu jagen.
Läßt Du *Range ("A1")* ganz raus, arbeitet Dein Makro
genau so gut, und, würde man es messen können, schneller.

Oder habe ich eine Feinheit nicht verstanden ?

mit freundlichem Gruß

Jean

>.
>

Lars Küster

unread,
Aug 20, 2003, 7:40:32 AM8/20/03
to
Hallo Jean

Jean Ruch schrieb:


>>-----Originalnachricht-----
>
> Hallo Lars,
>
> Dein Makro funktioniert, Du hast ja die Bestätigung und
> den Dank von Anna, aber ich kann Dir überhaupt nicht
> folgen bei folgender Aussage:
>

na dann schauen wir mal ob ich Dir helfen kann.

>
>>"und wähle einen Bereich aus, der so groß ist wie der
>
> Beriech A1 (Range("A1").select"
>
>
> Hast Du nicht eher -in einer Aufzeichnung - einfach die
> Zelle A1 angewählt und den Schritt nachher aus dem Makro
> nicht wieder entfernt? Weil Du machst ja in der Tat
> nichts mit dieser Auswahl, außer Excel über A1 zu jagen.

Ich jage XL eben nicht über A1. ;)

> Läßt Du *Range ("A1")* ganz raus, arbeitet Dein Makro
> genau so gut, und, würde man es messen können, schneller.
>
> Oder habe ich eine Feinheit nicht verstanden ?
>

Die Feinheit ist, daß Du nach dem Offset über Range("Bereich").Select
einen Bereich auswählen kannst. In diesem Fall ist der Bereich so groß
wie a1, also eine Zelle.
Wenn Du allerdings einen Bereich auswählen möchtest, der 4 Spalten und 5
Zeilen groß ist, würdest Du einen Bereich nennen der so groß ist wie
A1:D5 obwoh Du gerade den Zellmarkierer auf die Zelle d30 gesetzt hast.
Was also bedeutet, daß der der Bereich mit der Zelle d30 beginnt aber so
groß ist die A1:D5, sich also über die Zellen d30:g35 erstreckt.


> mit freundlichem Gruß
>
> Jean
>

Ich hoffe ich konnte die Anweisung mit meinen Ausführungen
verdeutlichen. :))

Lars.

Lars Küster

unread,
Aug 20, 2003, 7:45:20 AM8/20/03
to
ps.: sorry.. natürlich d30:d34 ;)

Probier es doch einfach mal aus, indem Du den Code veränderst. :)

ActiveCell.Offset(1,0).Range("A1:D5").Select

Wenn Du jetzt ActiveSheet.Paste drin behältst, wird natürlich in den
Bereich eingefügt, also der gesamte Bereich mit Werten befüllt.

Lars

Lars Küster schrieb:

Jean Ruch

unread,
Aug 20, 2003, 8:31:34 AM8/20/03
to

Hallo Lars,

Danke für deine schnelle Antwort.

Ich gehe im Prinzip immer davon aus: Make it easy, make it
simple...

Sofern ich gar nicht einen Bereich verarbeiten will ( bzw.
wenn mein Bereich nur EINE =1 Zelle betrifft) und ohne den
Hinweis *Range("A1")* ganz gut auskomme, dann lasse ich
ihn gleich weg. Wenn man jeweils immer alle mögliche /
vorgesehene Parameter eingeben müßte, würde das
Programieren (mir) kaum noch Spaß machen :-))

Anders ist es natürlich wenn der Bedarf besteht...
und aus meiner Sicht besteht er hier nicht.

Aber nochmals vielen Dank und

mit freundlichem Gruß

Jean

Lars Küster

unread,
Aug 20, 2003, 8:44:55 AM8/20/03
to
Hallo Jean,

Du hast Recht, es läuft auch ohne. Jedoch war das Posting für eine VBA
Anfängerin, und da empfand ich es als wichtig Ihr die Möglichkeit zu
geben zu entscheiden. :)
Wie immer alles eine Sache der Sichtweise.

Viel Spaß weiterhin


Lars :)

Jean Ruch schrieb:

Anna

unread,
Aug 23, 2003, 2:52:49 AM8/23/03
to
Hallo, Lars,

sorry für die verspätete Antwort. Danke für Deine ausführliche Erklärung -
so komme ich der Sache schon näher. Danke!

Anna


"Lars Küster" <la...@kuester.it> schrieb im Newsbeitrag

news:3F4271E2...@kuester.it...

0 new messages