Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Daten per Makro aus einer Tabelle in eine andere übernehmen
#1
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.)
Antworten Top
#2
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
Antworten Top
#3
@ 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:
  • Crazy Tom
Antworten Top
#4
@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?
Antworten Top
#5
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
Antworten Top
#6
@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  Huh ...

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...
Antworten Top
#7
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 Smile
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#8
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
Antworten Top
#9
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?
Antworten Top
#10
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.

Antworten Top


Gehe zu:


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