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

VBA Anfänger

VBA Anfänger
07.10.2002 12:56:23
Bader Stephan
Hallo an alle Excel- und VBA-Spezialisten

Bin neu auf dem Gebiet des VBA, könnte desshalb etwas Hilfe benötigen :

Ich muss aus einer Liste von 10000 Werten alle jene in das Blatt "Ergebnis" kopieren, die in Spalte A ein "x" haben. Sollte das Blatt "Ergebnis" nicht existieren, sollte dieses Angelegt werden.

Besten Dank für allfällige Hilfe

Stephan

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: VBA Anfänger
07.10.2002 13:21:04
Udo RiHü
Hallo,
lohnt sich überhaupt eine VBA-Lösung? Das Ganze ist doch in einer Minute 'von Hand' zu erledigen.
Autofilter auf Spalte A legen, "X" herausfiltern, alle Zellen markieren, kopieren, neues Blatt einfügen und das Filterergebnis einfügen. Fertig!
Wenn dich der Code interessiert, kannst du dir die Aktion mit dem Recorder aufzeichnen. Dabei lernst du mehr über VBA als durch eine 'vorgekaute' Lösung.;-)

Gruss Udo

Re: VBA Anfänger
07.10.2002 13:56:22
Bader Stephan
Besten Dank für Deine Antwort

Leider ist es nicht ganz so einfach.
Das ganze wird immer wieder ausgeführt und dies von Anwendern, die von Excel gleich viel Ahnung haben, wie von der Coreoliskraft.
Auch ändern die Anzahl zu kopierende Werte dauernd. Der Recorder nimmt immer fixe Bereiche, die er kopiert.

Es geht mir übriges nicht darum, möglichs billig zum Code zu kommen, sonst hätte ich nicht den ganzen Morgen an einer Lösung herumprobiert (wobei ich auch viel gelernt habe ;-))

Gruss Stephan

Anzeige
Re: VBA Anfänger
07.10.2002 14:22:43
Chris
Dim wert
i = Range("A1").End(xlDown).Row
i2 = Range("A1").End(xlToRight).Column
For x = 1 To i
Sheets("Blatt1").Select
If ActiveSheet.Cells(x, 1).Formula = "x" Then
For z = 1 To 65000
If Sheets("Ergebnis").Cells(z, 1).Formula = "" Then Exit For
Next z
For y = 1 To i2
Sheets("Ergebnis").Cells(z, y).Formula = Sheets("Blatt1").Cells(x, y).Formula
Next y
End If
Next x


Hallo Stephan

Hier mal einen Ansatz. Ueberträgt von 'Blatt1' nach 'Ergebnis'.

Unberücksichtigt ist das Makro um ein neues Blatt zu erzeugen, falls noch nicht vorhanden. Müsstest dieses einfach noch am Anfang einfügen.

Gruss
Chris

Anzeige
Re: VBA Anfänger
07.10.2002 14:28:58
Joachim S

Damit erzeugst du eine neues Blatt
den Rest hast du ja schon

Re: Daten in andere Tabelle übernehmen
07.10.2002 14:31:59
Martin Beck
Hallo Stephan,

folgende Annahmen:

1. Das Tabellenblatt mit den Ausgangsdaten heißt "Tabelle1". (Code entsprechend anpassen)

2. Es sollen die gesamten Zeilen übernommen werden, in denen in Spalte A ein "x" steht.

Folgendes Makro:

Gruß
Martin Beck

Re: VBA Anfänger
07.10.2002 14:42:12
Bader Stephan
An alle

Vielen Dank für Eure Mühe. Jetzt wird mir auch klar, dass ich heute morgen gar nicht so weit von der Lösung war.

Grüsse an alle

Stephan

Re: VBA Anfänger
07.10.2002 15:03:19
Martin Beck
Hallo Chris,

ist sonst nicht meine Art, andere, die sich hier Mühe geben, zu kritisieren. Aber da sich Stephan als Anfänger geoutet hat und evtl. Dein Makro an seine Verhältnisse anpassen will und da er vielleicht noch etwas dazu lernen kann, hier ein paar Anmerkungen zu Deinem Code.

Wozu die Variablendeklarration, wenn die Variable Wert im Code gar nicht benutzt wird?

Dim wert

Die nächste Codezeile ermittelt die letzte Zeile der Tabelle dann nicht, wenn in Spalte A leere Zellen vorkommen, wovon man vermutlich ausgehen kann. Besser wäre

i = Range("A65536").End(xlUp).Row

i = Range("A1").End(xlDown).Row

Die nächste Zeile liefert ebenfalls nur dann den gewünschten Wert für die letzte besetzte Spalte, wenn in allen Spalten in Zeile 1 ein Eintrag vorhanden ist. Außerdem ist sie m.E. überflüssig (siehe unten).

i2 = Range("A1").End(xlToRight).Column
For x = 1 To i

Die nächste Zeile ist innerhalb der Schleife falsch "angebracht", sie gehört an den Anfang des Codes. Wird der Code so wie er ist aus einem anderen Tabellenblatt als Blatt1 gestartet, werden die Variablen i und i2 falsch belegt.

Sheets("Blatt1").Select
If ActiveSheet.Cells(x, 1).Formula = "x" Then

Zur nächsten For-Schleife: Die ist sehr ineffizient, da sie immer durchlaufen werden muß, um die nächste leere Zelle zu finden. Je mehr Daten übernommen wurden, um so länger dauert das. Besser wäre es , einen Zähler mitzuführen.

For z = 1 To 65000
If Sheets("Ergebnis").Cells(z, 1).Formula = "" Then Exit For
Next z

In der nächsten Schleife werden die Daten zellenweise übernommen. Schneller geht es bei gleichem Ergebnis, wenn man die Zeilen komplett übernimmt.

For y = 1 To i2
Sheets("Ergebnis").Cells(z, y).Formula = Sheets("Blatt1").Cells(x, y).Formula
Next y
End If
Next x


Hast Du das Makro mal mit 10000 Zeilen hinsichtlich der Performance getestet? Ich habe bei 10000 Zeilen und 3 Spalten nach 6 Minuten abgebrochen.

Nix für ungut.


Gruß
Martin Beck


Anzeige
Re: VBA Anfänger
07.10.2002 16:46:20
Chris
Hallo Martin

Danke für den Hinweis.

Ich bin mir bewusst, dass meine Codes Profianforderungen nicht standhalten. Selber habe ich nie richtig programmieren gelernt und mein Visual-Basic Vocabular ist limitiert.

Grundsätzlich muss ich aber sagen, dass m.E. ein Forum vorallem auch zum Gedankenaustausch besteht und wenn ich einen "schlechten" Code poste, habe ich überhaupt nichts dagegen, wenn mir jemand eine bessere Lösung zeigt. Gerade von deinen Hinweisen konnte auch ich einiges lernen.

Schliesslich möchte ich aber auch noch sagen, dass viele "Profis" die in Profiaugen uninteressanten Beiträge ignorieren und da konnte ich mit meine Code-Gebastel öfter schon helfen, denn oft ist die Performance für solche Fälle nebensächlich.

Folgender Beitrag ist ein Beispiel. Bin sicher, dass ihn ein Profi relativ einfach lösen könnte, wenn man nochmals kurz nachfragen würde, was genau gewünscht wird :-)
https://www.herber.de/forum/messages/166086.html

Dies soll eine Aufmunterung zum freien Gedankenaustausch sein, auch wir Anfänger möchten ein bischen mitreden :-)

Gruss
Chris


Anzeige
Re: VBA Anfänger
07.10.2002 18:00:40
Martin Beck
Hallo Chris,

so wie Du es aufgefaßt und geschildert hast, wollte ich meinen ergänzenden Beitrag auch verstanden wissen. Jeder sollte hier nach bestem Wissen sein Lösungsvorschläge posten und ich zumindest bin kein Purist, der nach optimalen Lösungen sucht. Funktionsfähige mit angemessener Performance tun's ja auch.

Auf dem Weg vom Anfänger zum etwas Fortgeschritteneren habe ich persönlich aber selbst viele Irrwege begangen, daß ich es ab und an für sinnvoller halte, dies anderen zu ersparen und Vorschläge zu unterbreiten, wie ein (durchaus funktionsfähiger) Code verbessert werden kann (das auch mit Blick auf die Recherche und das Archiv).

Weiterhin erfolgreiches Arbeiten mit Excel/VBA und in diesem Forum wünscht Dir

Martin Beck

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige