# Mittels Cells "Bedingung" von in Tabelle kopieren



## josef24 (16. November 2017)

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


```
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
```


----------



## Yaslaw (17. November 2017)

Als erstes. Formatiere deinen Code. Alles vorne Bündig ist unlesbar. Man erkennt keine Struktur
Hier mal dein Code in lesbarer Form
	
	
	



```
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.


----------



## josef24 (17. November 2017)

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".

```
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.

```
And .Cells(i, "H") = "<=100" Then
```


Mach mal einen Anhang der Datei. Gruß Josef​


----------



## Yaslaw (17. November 2017)

1) Mit * kann man arbeiten. Aber dann ist es nicht mehr = sondrn Like

```
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

```
And .Cells(i, "H") <= 100  Then
```

Einfache Vergleichsoperatoren
=
>=
<=
<
>
<>
LIKE


----------



## josef24 (17. November 2017)

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


----------



## Yaslaw (17. November 2017)

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


----------



## josef24 (17. November 2017)

Neuer Versuch

 eigenes Modul: Hier weis ich absolut zu wenig drüber um hier zu reagieren
 leider wie Nr. 1
Wenn in F oder G Text steht, dann Zeile übernehmen.  Bei beiden ebenfalls.
Und dazu soll in Spalte H der Wert größer/gleich 1 und kleiner/gleich 70 sein.
Zeilen ohne diese Angaben sollten nicht berücksichtigt werden, wie bei dem Beispiel Zeile 3 wo alle Angaben leer sind. Gruß


----------



## Yaslaw (17. November 2017)

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

```
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:



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.


----------



## josef24 (17. November 2017)

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ß_


----------



## Yaslaw (17. November 2017)

Es wird keine Zeile berücksichtigt. Keine hat H  zwischen 1 und 70


----------

