eine ganze Zeile kopieren wenn Bdingung erfüllt ist. Excel?

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Da würde ich mir am besten ein Makro für verwenden, denn mit Formeln musst du nicht nur die Zeile 1:1 übertragen, sondern auch die Lücken schließen, die in den Zeilen entstehen, in denen nicht Irlbach steht.

Sub ExtrahiereIrlbach()
    Dim i, j As Integer
    Dim wsQuelle, wsIrlbach As Worksheet
    Set wsIrlbach = Worksheets("Irlbach")
    Set wsQuelle = Worksheets(1)
    i = 1: j = 1
    While wsQuelle.Range("D" & i).Value <> ""
        If LCase(wsQuelle.Range("D" & i).Value) = "irlbach" Then
            wsQuelle.Rows(i).Copy wsIrlbach.Rows(j)
            j = j + 1
        End If
        i = i + 1
    Wend
End Sub

Das kann man natürlich noch abstrahieren.


RigaDone 
Beitragsersteller
 24.02.2017, 18:44

das ist eine super lösung :) so kurz und macht alles was ich will. 

RigaDone 
Beitragsersteller
 19.07.2017, 09:08

ist es mit diesem makro auch möglich wenn zwei Bedingungen erfüllt sein müssen? zb. D=SK und E=LP ?

Suboptimierer  19.07.2017, 10:21
@RigaDone

Danke für die HA.
Klar, dann verbindest du die Bedingungen einfach mit And.

If D = SK And E = LP Then
  '...
End If
RigaDone 
Beitragsersteller
 24.02.2017, 18:46

und was muss ich ändern wenn alle anderen außer Irlbach in der Liste Gast kopiert werden soll? bzw kann man das in ein befehl zusammen machen? wenn Irbach steht dann in die liste Irlbach und wenn irlbach nicht drin steht sondern z.b. grünthal dann soll die besagte zeile nach Gast kopiert werden?

Suboptimierer  24.02.2017, 20:55
@RigaDone

Der Code ist ausbaufähig. Wenn alles, was nicht Irlbach ist, nach Gast soll, ist die Änderung kleiner, als wenn du für jeden möglichen Wert ein Tabellenblatt ansteuern willst oder gar dynamisch solche erzeugen willst.

Lösung mit allem Nicht-Irlbach nach Gast:

Sub ExtrahiereIrlbach()
    Dim i, j, k As Integer
    Dim wsQuelle, wsIrlbach, wsGast As Worksheet
    Set wsGast = Worksheets("Gast")
    Set wsIrlbach = Worksheets("Irlbach")
    Set wsQuelle = Worksheets(1)
    i = 1: j = 1: k = 1
    While wsQuelle.Range("D" & i).Value <> ""
        If LCase(wsQuelle.Range("D" & i).Value) = "irlbach" Then
            wsQuelle.Rows(i).Copy wsIrlbach.Rows(j)
            j = j + 1
        Else
            wsQuelle.Rows(i).Copy wsGast.Rows(k)
            k = k + 1
        End If
        i = i + 1
    Wend
End Sub

Verwende zunächst einen (Auto)Filter für Spalte D, die du dann nach "Irlbach" filterst. Jetzt kannst du den ganzen Bereich markieren und in das neue Tabellenblatt einfügen.

Wenn du eine ganze Zeile kopieren möchtest, markierst du sie, indem du den Zeilenkopf links anklickst.