Microsoft Excel

Herbers Excel/VBA-Archiv

Datensätze durch Bedingung filtern


Betrifft: Datensätze durch Bedingung filtern von: Nick
Geschrieben am: 24.09.2019 09:38:34

Hallo Leute,

ich bräuchte Mal eure Hilfe. Und zwar habe ich ein Makro vor mir, welches Daten aus einer Tabelle liest und in eine andere Tabelle schreibt.

Ich versuche das Makro dazu zu bringen, dass es den Code nur auf Zeilen anwendet, in denen ein bestimmtes Wort steht. Sagen wir das Wort lautet „Apfel“. Das Wort steht immer der gleichen Spalte. Die Spalte heißt immer gleich, in diesem Beispiel „Obstsorte“. Allerdings kann die Spalte „Obstsorte“ aus Gründen der Formatierung immer an einer anderen Stelle stehen, sei es nun Spalte P, V, AA, etc. Ich habe versucht, den Code abbrechen zu lassen, wenn nicht „Apfel“ oder ein Leerzeichen in einer Zelle der Spalte „Obstsorte“ steht, allerdings soll der Code ja weiterlaufen, weil eventuell weiter unten noch relevante Zellen mit „Apfel“ stehen. Meinen Lösungsansatz füge ich mal an und auch eine anonymisierte Tabelle, um es besser zu veranschaulichen.

Also in dieser angehangenen anonymisierten Tabelle soll er die Datensätze mit „Apfel“ am 01.01.2012 und am 23.01.2012 aus der Tabelle nehmen und in die andere Tabelle schreiben. Der Datensatz „Orange“ am 15.01.2012 soll ignoriert werden, genauso wie die leeren Zeilen über dem ersten Datensatz „Apfel“. Die Datumsangaben sind in diesem Beispiel der Spalte K zu entnehmen.

Ich hoffe, dass ich mein Problem gut schildern konnte.

LG Nick

https://www.herber.de/bbs/user/132158.xlsx

' Obstsorten filtern

Dim Treffer1 As Range
With Tabelle1
Set Treffer1 = Rows(2).Find(what:="obstsorte", lookat:=xlWhole)

Dim Obstsorte As Range
Set Obstsorte = .Rows(1).Find(what:="Obstsorte", lookat:=xlWhole)

If Treffer1 <> "Apfel" Or Treffer1 <> "" Then
End Sub

Else


End If

  

Betrifft: AW: Datensätze durch Bedingung filtern von: Daniel
Geschrieben am: 24.09.2019 10:04:40

Hi
so in der Art?

Sub test()
With ActiveSheet.UsedRange
    .AutoFilter field:=Rows(2).Find("Obstsorte").Column, Criteria1:="Apfel"
    .Copy Destination:=Sheets(2).Cells(1, 1)
End With
End Sub
die Tabelle muss in Spalte A beginnen, ansonsten müsste man die Spaltennummer noch umrechnen auf die Position innerhalb der gefilterten Tabelle.

Gruß Daniel


  

Betrifft: AW: Datensätze durch Bedingung filtern von: Nick
Geschrieben am: 24.09.2019 10:55:29

Danke Daniel, aber das funktioniert leider nicht.

Vielleicht habe ich mein Problem schlecht beschrieben. Ich möchte die Bedingung in ein bestehendes Makro einbauen, quasi an den Anfang des Makros setzen. Das Abbrechen des Makros war ein erster Ansatz von mir, der in diesem Fall vermutlich nicht sinnvoll ist.

Ich möchte nur zu Beginn die Bedingung einfügen, dass der restliche Teil des Makros nur auf die Zeilen angewendet wird, in denen das Schlagwort steht. Zeilen mit anderslautenden Wörtern sollen ignoriert werden. Wenn ich das Makro so laufen lasse, wie es zurzeit ist, kopiert es einfach alle Datensätze und schreibt sie in das andere Arbeitsblatt, also nicht nur die Äpfel, sondern auch die Orangen. Der Rest des Makros läuft ja einwandfrei, nur die Bedingung soll eingefügt.

VG Nick

Quasi:

Sub test()

' Hier werden leere Spalten gelöscht

' Hier soll die Bedingung eingefügt werden, dass der weitere Teil des Makros nur auf die Äpfel angewendet wird

' Ab hier soll das Makro wie gewohnt weiterlaufen


  

Betrifft: AW: Datensätze durch Bedingung filtern von: Daniel
Geschrieben am: 24.09.2019 11:36:44

Hi
das kommt jetzt darauf an, was du machst.
beim Copy-Paste und sonstigen Bearbeitungsschritten von Zellblöcken bearbeitet Excel normalerweise nur die eingeblendeten Zeilen.
außer du bearbeitest in einer Schleife jede Zeilen einzeln, dann musst du selber prüfen
in dem Fall müsstest du dir die Spaltennummer der Obstorte in einer Variable speichen
und dann die jeweilige Zelle prüfen:

spObst = Rows(2).Find(what:="Obstsorte").Column
...
for z  = 3 to letzteZeile
 If Cells(z, spObst) = "Apfel" then
      --- hier der Code zum Bearbeiten der Zeile
  end if
next

Gruß Daniel


  

Betrifft: AW: Datensätze durch Bedingung filtern von: Nick
Geschrieben am: 24.09.2019 13:42:30

Hmm, vermutlich bin ich zu blöd dafür, die Funktion korrekt einzubauen. Bin halt absoluter Neuling. Gibt es da denn alternative Lösungsansätze? Habe ich das Problem adäquat erklären können oder gibt es da noch offene Fragen?

Da ich den Code nicht einfach veröffentlichen darf, versuche ich mal das Vorgehen präziser zu beschreiben, unter der Prämisse, dass wir von der anonymisierten Tabelle ausgehen.

Das Makro prüft nacheinander ob bestimmte Spalten existieren (A-E und K-O). Wenn diese Spalten existieren, kopiert er die Datensätze und fasst alle Daten von einem Tag zu einem Datensatz zusammen, indem er die doppelten Zeilen löscht. Das Vorgehen in den einzelnen Spalten sieht ähnlich dem aus, was ich als ersten Lösungsansatz von mir veröffentlicht habe.

Bisher wird die Spalte F (Obstsorte) gar nicht beachtet, obwohl nur Äpfel relevant sind und nur diese Datensätze kopiert werden sollen.

Gruß Nick


  

Betrifft: AW: Datensätze durch Bedingung filtern von: Daniel
Geschrieben am: 24.09.2019 13:46:26

Hi

hilfreich wäre eine Beispieldatei, in welcher du zeigst
1. wie die Daten zu beginn vorliegen
2. wie du dir das Ergebnis vorstellst
3. welchen Code du schon hast, welches Ergebnis er liefert und was anders sein soll.
Gruß Daniel


Beiträge aus dem Excel-Forum zum Thema "Datensätze durch Bedingung filtern"