Mittels Cells "Bedingung" von in Tabelle kopieren

josef24

Erfahrenes Mitglied
Guten Abend. Habe mal wieder ein kleines Problem mit einem Kopiervorgang und möchte den Code von mir, mittels Forum kopiert und abgeändert, gleich anhängen.
Ich möchte Zeilen kopieren wenn eine gewisse Bedingung erfüllt ist. Zur Erklärung:
In den Spalten "F" und "G" befindet sich unterschiedlicher Text den ich mit "*" bezeichnen will, also alles anzeigen wo Text vorhanden.
In der Spalte "H" soll ein Wert (Zahl) <=100 als Suchkriterium gelten. Es soll jeder Wert mit entsprechendem Inhalt in der Tabelle erscheinen. So etwas wie und/oder Funktion.
Ich bitte möglichst um Unterstützung. Danke und Gruß Josef

Code:
Sub test()
Dim a As Long, i As Long
Application.ScreenUpdating = False
a = 2
For i = 1 To 10000
With Worksheets("Tabelle1")
If .Cells(i, "F") = "Neue Verordnung" Or .Cells(i, "G") = "Keine SEPA" _
Or .Cells(i, "H") = "<=100" Then
.Rows(i).Copy _
Destination:=Worksheets("Tabelle2").Rows(a)
a = a + 1
End If
End With
Next i
Application.ScreenUpdating = True
End Sub
 
Als erstes. Formatiere deinen Code. Alles vorne Bündig ist unlesbar. Man erkennt keine Struktur
Hier mal dein Code in lesbarer Form
Visual Basic:
Sub test()
	Dim a As Long, i As Long
	Application.ScreenUpdating = False
	a = 2
	For i = 1 To 10000
		With Worksheets("Tabelle1")
			If .Cells(i, "F") = "Neue Verordnung" Or .Cells(i, "G") = "Keine SEPA" _
			Or .Cells(i, "H") = "<=100" Then
				.Rows(i).Copy _
				Destination:=Worksheets("Tabelle2").Rows(a)
				a = a + 1
			End If
		End With
	Next i
	Application.ScreenUpdating = True
End Sub

Gut. Du hast einen Code und willst Unterstützung. Wo harzt es? Kommt eine Fehlermeldung? Oder funktioniert es nicht richtig? Wenn ja, wie ist das Fehlverhalten?
Ev. reicht es, wenn du die OR durch AND ersetzt, damit es keine Oderbedinnung ist. Gemäss deinem Text sollte es kein ODER sein.
 
Danke für den Tipp. Die Abfrage läuft, nur erfordert der Filtert präzisen Text, wo ich aber wegen der Vielfalt mit * arbeiten möchte, wenn das machbar?
Mein Problem ist folgendes:
Die folgende Code- Zeile funktioniert wobei ich abfragen möchte wenn ich einfach mit z. B. "*" Funktion eingebe, das alle Zeilen mit Text Entsprechend erscheinen.
Also Textinhalt aus Spalte "F" und "G".
Code:
If .Cells(i, "F") = "Neue Verordnung" Or .Cells(i, "G") = "Keine SEPA" _
Weiterhin soll aus Spalte "H" alles erfasst werden, wo der Wert z. B. kleiner gleich 100 ist. Hier funktioniert gar nichts sozusagen, es wird kein Wert angezeigt.
Code:
And .Cells(i, "H") = "<=100" Then


Mach mal einen Anhang der Datei. Gruß Josef​
 

Anhänge

  • Test Dat 1.zip
    13,2 KB · Aufrufe: 4
1) Mit * kann man arbeiten. Aber dann ist es nicht mehr = sondrn Like
Visual Basic:
If .Cells(i, "F") Like "*Verordnung*" ...

2) Warum hast du <= im Text? Und warum vergleichst du das Feld als Text wenn es eine Zahl ist
Visual Basic:
And .Cells(i, "H") <= 100  Then

Einfache Vergleichsoperatoren
=
>=
<=
<
>
<>
LIKE
 
Danke erst mal, aber eine Reaktion auf den Code verstehe ich nicht. In Zeile 3 steht weiter kein Wert, somit dürfte die Zeile nicht rüber kopiert werden. Muss hier vielleicht noch eine Ergänzung gemacht werden? Wenn du vielleicht mal in die Datei schaust???? Gruß Josef
 
1) Der Code gehört in ein eigenes Modul und nicht hinter ein Sheet.

2) Arbeite an deinen Formatierungen. Einfach willkürlich Tabs setzen bringt nix.

3) Wir haben ein Chaos mit AND und OR.
Ich verstehe deien Bedinungen noch nicht. Bitte genau beschreiben.
Ich rate jetzt mal:
In F soll ein Text stehen, der "Neue Verordnung" beinhaltet. Also keine genaue Suche
Oder G soll "SEPA" beinhalten.
Zusätzlich soll aber immer geprüft werden, ob H kleiner als 70 ist
 
Neuer Versuch
  1. eigenes Modul: Hier weis ich absolut zu wenig drüber um hier zu reagieren
  2. leider wie Nr. 1
  3. Wenn in F oder G Text steht, dann Zeile übernehmen. Bei beiden ebenfalls.
  4. Und dazu soll in Spalte H der Wert größer/gleich 1 und kleiner/gleich 70 sein.
  5. Zeilen ohne diese Angaben sollten nicht berücksichtigt werden, wie bei dem Beispiel Zeile 3 wo alle Angaben leer sind. Gruß
 
Also egal welcher Text? Warum hast du dann feste Text in deinen Beispielen? Naja, egal.

Formatieren:
Wenn etwas beginnt und Endet ist das gleich eingerückt. Alles dazwischen hat ein Tab mehr.

Hier mal meine Umsetzung
Visual Basic:
Sub test()
    Dim a As Long, i As Long
    Application.ScreenUpdating = False
    a = 1
    For i = 1 To 10000
        With Worksheets("Tabelle1")
            If (.Cells(i, "F") <> "" Or .Cells(i, "G") = "SEPA") And .Cells(i, "H") > 1 And .Cells(i, "H") <= 70 Then
                .Rows(i).Copy Destination:=Worksheets("Tabelle2").Rows(a)
                a = a + 1
            End If
        End With
    Next i
    Application.ScreenUpdating = True
End Sub

Neues Modul:
2017-11-17_155955.png

Ansonsten findet man ganz einfach Infos, was ein neues Modul ist. Sollte auf den ersten 5 Seiten eines VBA-Buches stehen.
Das sind Grundlagen. Ohne diese solltest du dir noch gar keine Gedanken machen, was du programmieren sollst.
Sorry, das klingt jetzt hart. Aber es ist als ob du einfach mal drauflos läufst ohne eine Ahnung zu haben was Strassen, Ampeln und Signale sind.
 
Danke, so gehst, kann Kritik vertragen, kein Problem. Nur, in meiner Datei die Zeile 3 dürfte meiner Meinung nach dann nicht erscheinen.
Hatte das mal angemerkt, vielleicht wurde es übersehen. Gruß Josef

: Zeilen ohne diese Angaben sollten nicht berücksichtigt werden, wie bei dem Beispiel Zeile 3 wo alle Angaben leer sind. Gruß
 
Zurück