Registriert seit: 13.10.2023
Version(en): 2019
Ich habe eine große Tabelle, aus der ich einige Daten in eine andere übernehmen möchte.
Beispiel Nr. Name Prüffeld (unsichtbar) 1 A 0 2 B 1 3 C 0 4 D 2 5 E 3 6 F 0
Je nachdem, was in einem anderen Feld eingegeben wird, ändert sich der Inhalt des Prüffelds. Ich möchte per Makro nun alle Einträge, bei denen eine 0 steht, in eine andere Tabelle kopieren, und zwar so, dass dort keine Lücken sind. Es sollte dort also so aussehen:
Nr. Name 1 A 3 C 6 F (alternativ würde mir auch nur Nr. oder Name reichen, den Rest kann ich dann mit INDEX rüberholen)
Wer kann mir dazu ein Makro erstellen? (Nr. kann dabei A1 sein, Name A2 etc. Das kann ich dann anpassen.)
Registriert seit: 12.04.2014
Version(en): Office 365
moin eine Möglichkeit Code: Option Explicit
Sub irgendwas() Dim lngLetzte As Long, lngZiel As Long Dim i As Long lngLetzte = Cells(Rows.Count, 3).End(xlUp).Row With Sheets("Tabelle2") lngZiel = .Cells(.Rows.Count, 1).End(xlUp).Row + 1 For i = 2 To lngLetzte If Cells(i, 3).Value = 0 Then .Cells(lngZiel, 1).Value = Cells(i, 1).Value .Cells(lngZiel, 2).Value = Cells(i, 2).Value lngZiel = lngZiel + 1 End If Next End With End Sub
zu starten aus deiner "großen Tabelle" den Tabellenblattnamen deiner Zieltabelle ggf. anpassen mfg Tom
Registriert seit: 21.08.2022
Version(en): 2016
@ Tom, dafür nimm Excelfunktionalitäten! Code: Sub x()
With Worksheets("Tabelle1").Range("A1").CurrentRegion .AutoFilter field:=3, Criteria1:="0" .Copy Worksheets("Tabelle2").Range("A1") .AutoFilter End With
End Sub
VG Juvee
Folgende(r) 1 Nutzer sagt Danke an juvee für diesen Beitrag:1 Nutzer sagt Danke an juvee für diesen Beitrag 28
• Crazy Tom
Registriert seit: 13.10.2023
Version(en): 2019
@Juvee:
Wie baue ich deinen Teil in das Makro von Tom ein? Kannst du das als Gesamtwerk einmal posten?
@Tom:
Was muss ich ändern, wenn ich das Makro aus der Zieltabelle starten möchte?
Registriert seit: 12.04.2014
Version(en): Office 365
16.10.2023, 09:30
(Dieser Beitrag wurde zuletzt bearbeitet: 16.10.2023, 09:33 von Crazy Tom.)
moin mein Code würde dann so aussehen Code: Sub irgendwas() Dim lngLetzte As Long, lngZiel As Long Dim i As Long lngZiel = Cells(Rows.Count, 1).End(xlUp).Row + 1 With Sheets("Tabelle1") 'Tabellenblatt Quelle lngLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row For i = 2 To lngLetzte If .Cells(i, 3).Value = 0 Then Cells(lngZiel, 1).Value = .Cells(i, 1).Value Cells(lngZiel, 2).Value = .Cells(i, 2).Value lngZiel = lngZiel + 1 End If Next End With End Sub
aber den Code von Juvee kannst du so übernehmen wie er ist egal von welchem Tabellenblatt aus mfg Tom
Registriert seit: 13.10.2023
Version(en): 2019
@Tom: Ich denke, ich komme mit deiner Version besser zurecht, was Anpassung angeht, die andere Version ist mehr so Doktorarbeit statt Aufsatz, was das Verständnis meinerseits angeht ... Ein paar kurze Fragen noch, um zu sehen, ob ich das richtig verstehe, damit ich es anpassen kann: 1. Cells(Rows.Count, 1) => rows.count zählt was? nichtleere Zellen? alle Zellen des Tabellenblatts? Eigentlich muss die Vergleich-und Kopier-Arie nur in den Zeilen 3 bis 56 laufen, macht es das einfacher? Die "1" bezieht sich auf die Spalte, also zählt er in Spalte A, richtig? Für Spalte F müsste dort eine "6" sein? 2. If .Cells(i, 3).Value = 0 Then Cells(lngZiel, 1).Value = .Cells(i, 1).Value Cells(lngZiel, 2).Value = .Cells(i, 2).Value lngZiel = lngZiel + 1 End If Hier schaut er nach, ob in Spalte C (die "3") eine 0 steht. Wenn ja, wird der Wert der Zelle (aktuelle Reihe, Spalte A) geändert... was hat das "i" zu bedeuten? Das gleiche dann mit Zelle (aktuelle Reihe, Spalte B). Dann geht er eine Reihe tiefer? Wenn ich im Zielblatt also nicht Spalten A und B ändern möchte, sondern C und D, muss ich statt "1" und "2" eine "3" und "4" respektive einsetzen? Sorry, wenn das so Noob-Fragen sind, aber ich habe nur ein rudimentäres Verständnis von VBA...
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen, Rows.Count = Zeilen.Anzahl, also hier alle Zeilen des Blattes. Schränkt man den Bereich ein, z.B. Range("A1:A3").Rows.Count, werden die Zeilen von A1 bis A3 gezählt... --> auch mit With Range("A1:A3") Cells(.Rows.Count,1) ... End With --> um mal auf den Bezugspunkt hinzuweisen
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 26.09.2022
Version(en): 2019
Moin,
hier ist aber Rows.Count wichtig, weil es in dem Code darum geht, von der alleruntersten Zeile einer Spalte zur nächsten gefüllten Zelle nach oben zu springen. Damit wird die Tastenkombination Strg+PfeilOben simuliert. Es ist daher nicht ratsam, die Codezeile anzupassen.
Viele Grüße derHöpp
Registriert seit: 13.10.2023
Version(en): 2019
19.10.2023, 08:01
(Dieser Beitrag wurde zuletzt bearbeitet: 19.10.2023, 08:53 von Stryke.)
Ok, ich sehe schon, mein Optimismus, ein Makro anpassen zu können, wenn ich nur allgemeine Daten bzw Beispiele vorgebe, war unangebracht. Ich bin nach wie vor aufgeschmissen und weiß nicht weiter, weil ich leider die ganzen Befehle nicht verstehe und anwenden kann. Vielleicht versuche ich es nochmal mit den genauen Angaben in meiner Tabelle.
Das Makro (aufzurufen aus dem Tabellenblatt "NVZ") soll folgendes machen:
1. Lösche den Inhalt der Zellen C3 bis C46 in Tabellenblatt "NVZ"
2. Prüfe den Inhalt der Zelle Y3 in Tabellenblatt "Datenblatt" 3. Wenn dort eine Null steht, gehe zu Punkt 5. 4. Wenn dort etwas anderes als eine Null steht, kopiere den Inhalt der Zelle G3 in Tabellenblatt "Datenblatt" in Zelle C3 in Tabellenblatt "NVZ" 5. Springe eine Zeile weiter nach unten und wiederhole Punkt 2. bis 4. (also alles mit Y4, G4, C4 (oder C3, wenn in Y3 eine Null war) etc.)
6. Es sollen alle Zellen von Y3 bis Y56 durchgeprüft werden. Und letztlich soll in Tabellenblatt "NVZ" in der Spalte C eine Liste ohne leere Zeilen sein.
Kann mir einer das Makro so schreiben, bitte?
Registriert seit: 12.04.2014
Version(en): Office 365
Moin Mein "Makro" würde so aussehen: Code: =FILTER(Tabelle1[Hamster];Tabelle1[Wurstfinger]<>0)
Wir sehen uns! ... Detlef
Meine Beiträge können Ironie oder Sarkasmus enthalten.
|