VBA Kopieren wenn Bedingung erfüllt
#1
Hallo und guten Morgen

Ich bin ein normaler Excel-Anwender ohne richtige VBA Kenntnisse und stehe vor folgendem Problem:
Ich soll eine Arbeitsmappe mit folgenden Kriterien erstellen
Sheet 1als Dateneingabeformular in dem in der Spalte, sagen wir mal L3-L100 der Name der anderen Sheets steht (z.B. Sheet 2 hat den namen 318 dann steht in L3 und/oder L15 usw. 318)
Sheet 2 mit dem Namen 318
Sheet 3 mit dem Namen 744 usw usw

Nun soll ich aus dem Dateneingabeformular alle Zeilen in das Sheet kopieren das den gleichen Namen hat.
Nach dem Kopieren sollen die Werte des Dateneingabeblattes gelöscht werden (die Formatierung muss bestehen bleiben).
Wenn das Dateneingabeformular mit neuen Daten befüllt wird soll die Prozedur von neuem beginnen Gerne auch mit "Klickbutton"
Kopieren der Zeilen in das richtige Sheet in die nächste freie Zeile. Die alten Daten in dem z.B. 318er Sheet müssen erhalten bleiben

Ich hab einmal so angefangen, dass ich eine Formel und ein Macro gemacht habe in dem ich alle nicht 318 ausblende, somit habe ich nur mehr die 318er.

Zuerst frage ich ab ob wahr mit folgender Formel:

=WENN($P$1=$K3;"";"x") 'P1 gebe ich z.B. 318 ein und dann kommt auf L3 die Auswertung

... und dann die beiden Macros hier:

Public Sub Zeilen_ausblenden()
Application.ScreenUpdating = False
For i = 3 To 1000
If Cells(i, 12).Value = "x" Then
    Rows(i).Hidden = True
End If
Next i
Application.ScreenUpdating = True
Range("P1").Select
End Sub

Sub Zeilen_einblenden()
Cells.Rows("3:1000").Hidden = False
Range("P1").Select
End Sub

Das Funktioniert soweit wie geplant.
Jetzt harpert es mit dem kopieren in das richtige Sheet in die nächste freie Zeile

Wenn Ihr mir da Bitte mal unter die Arme greifen könnt.
Noch eine Bitte, da ich nicht sagen kann ob ich die Eingabe noch erweitern muss (also das meine Abfrage nicht in Spalte L sondern z.B. M steht) könntet Ihr das Script mit Erklärungstexten zur Anpassung versehen?

Danke vielmals

Gruß
Herbert
Top
#2
Hallo Herbert,
lade bitte ein Beispiel hoch. Ich bastle doch nicht ein Sheet das Du schon hast.
Grüße aus Nürnberg
Armin
Ich benutze WIN 10 (64bit) und Office 19 (32bit)
Top
#3
Moin!
Mal ein paar allgemeine Anmerkungen:
Warum filterst Du Spalte K nicht einfach nach dem Wert in P1?
(das läuft nämlich erheblich schneller als Deine umständliche Schleife)
Wenn Du das Filtrat kopierst, werden nur die sichtbaren Zellen eingefügt!
Das Tabellenblatt 318, die in P1 steht, wählst Du einfach so aus:
Worksheets(Worksheets("Formular").Range("P1"))

Um die erste freie Zeile zu ermitteln, gibt es unzählige Beispiele im Netz!
Hier gibt es eine Zusammenfassung:
http://www.rondebruin.nl/win/s9/win005.htm

Und jetzt kommt das große ABER:
Der Aufbau Deiner Mappe erscheint mir suboptimal.
Man verteilt Daten nicht anhand eines Kriteriums auf unterschiedliche Sheets!
Dies erschwert die nachgängige Auswertung unnötig.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#4
(28.10.2018, 10:50)EbyAS schrieb: Hallo Herbert,
lade bitte ein Beispiel hoch. Ich bastle doch nicht ein Sheet das Du schon hast.

Servus
Ich habe erst am Donnerstag die groben Parameter bekommen (Freitag war Feiertag in Österreich) und wollte mich vorab schon mal schlau machen.
Wenn das zu früh war dann Mea culpa.
Wenn ich das Grundgerüst erstellt habe dann kommt es asap ins Forum
Top
#5
(28.10.2018, 11:04)RPP63 schrieb: Moin!
Mal ein paar allgemeine Anmerkungen:
Warum filterst Du Spalte K nicht einfach nach dem Wert in P1?
(das läuft nämlich erheblich schneller als Deine umständliche Schleife)
Wenn Du das Filtrat kopierst, werden nur die sichtbaren Zellen eingefügt!
Das Tabellenblatt 318, die in P1 steht, wählst Du einfach so aus:
Worksheets(Worksheets("Formular").Range("P1"))

Um die erste freie Zeile zu ermitteln, gibt es unzählige Beispiele im Netz!
Hier gibt es eine Zusammenfassung:
http://www.rondebruin.nl/win/s9/win005.htm

Und jetzt kommt das große ABER:
Der Aufbau Deiner Mappe erscheint mir suboptimal.
Man verteilt Daten nicht anhand eines Kriteriums auf unterschiedliche Sheets!
Dies erschwert die nachgängige Auswertung unnötig.

Gruß Ralf

Danke für den Tipp, (Worksheets(Worksheets("Formular").Range("P1"))) wie ich oben schon schrieb bin ich primär Anwender der sich seine Sachen im Netzt sucht. Und wenn ich mich dann noch halbwegs durchblicke kann ich sie für meine Zwecke adaptieren.

Zu deinem großen ABER:
So war es von den Chefs gewünscht gewesen.
Ich kenne mich schon kaum aus, aber die Chefs noch weniger.
Was würdest du zur optimierung Vorschlagen?
Ich würde deinen Vorschlag dann den Entscheidungsträgern unterbreiten.

Gruß
Herbert
Top
#6
(28.10.2018, 12:06)Herbert 63 schrieb: Was würdest du zur optimierung Vorschlagen?
Ich würde deinen Vorschlag dann den Entscheidungsträgern unterbreiten.

Erstelle eine Tabelle (oder mehrere, wenn dadurch mittels 1:n - Beziehungen Redundanzen minimiert werden) und lediglich ein Auswerte- (Formular-) Blatt, welches sich gewünschte Daten "zieht".

Genaueres erst nach Vorlage der Datei.

Bis dahin wünsche ich Dir einen schönen Sonntag.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#7
Danke für die Antwort, ich gebe Bescheid sobald ich genaueres sagen kann und ich weitere Hilfe benötige.

Schönen Abend
Herbert
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste