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.

Bei bestimmter Bedingung Zeile kopieren
#1
Hallo zusammen,

ich habe folgendes Problem.

Meine Datei ist aufgebaut wie das Beispiel anbei. Ziel ist folgendes:

Wenn in Tabelle2 in Spalte B ein "nein" steht möchte ich ein Makro haben, das die entsprechende Zeile (von Spalte E bis N) in Tabelle1 kopiert.

Ich habe meine bescheidenen VBA Skills angewendet, bin aber leider zu keinem Ergebnis gekommen.

Könnt ihr hier helfen?

Danke & Gruß,
Fabian


Angehängte Dateien
.xlsx   Beispiel.xlsx (Größe: 9,21 KB / Downloads: 9)
Antworten Top
#2
Arbeitsblatt mit dem Namen 'Tabelle1'
A
1Spalte 1
2A
3A

ZelleFormel
A2=WENNFEHLER(INDEX(Tabelle2!$B$2:$N$6;AGGREGAT(15;6;ZEILE(Tabelle2!$B$2:$N$6)/(Tabelle2!$B$2:$B$6="Nein")-1;ZEILE(A1));4+SPALTE(A1)-1);"")
A3=WENNFEHLER(INDEX(Tabelle2!$B$2:$N$6;AGGREGAT(15;6;ZEILE(Tabelle2!$B$2:$N$6)/(Tabelle2!$B$2:$B$6="Nein")-1;ZEILE(A2));4+SPALTE(A2)-1);"")
Verwendete Systemkomponenten: [Windows (32-bit) NT 10.00] MS Excel 2016
Diese Tabelle wurde mit Tab2Html (v2.6.0) erstellt. ©Gerd alias Bamberg

Vll  mit  Formel statt Makro?


Angehängte Dateien
.xlsx   Beispiel (1).xlsx (Größe: 17,5 KB / Downloads: 1)
Eine Menge reden, aber nichts sagen können viele...
Antworten Top
#3
Falls eine Makrolösung gewünscht ist, dann so:

Code:
Sub uebertragen()
Dim i As Integer
Dim letzte As Integer
Dim erste As Integer

letzte = Sheets("Tabelle2").Cells(Rows.Count, 2).End(xlUp).Row
erste = Sheets("Tabelle1").Cells(Rows.Count, 1).End(xlUp).Row + 1

With Sheets("Tabelle2")
   For i = 2 To letzte
       If .Cells(i, 2).Value = "nein" Then
           Sheets("Tabelle1").Range("A" & erste & ":J" & erste).Value = .Range("E" & i & ":N" & i).Value
           erste = erste + 1
       End If
   Next i
End With

End Sub
Schöne Grüße
Berni
Antworten Top
#4
Auch wenn Du eine funktionierende gute Formellösung hast:
Aggregat ist bei großen Bereichen recht träge und imo nicht zu empfehlen.
Warum nicht einfach Autofilter Spalte B = nein?
oder erweiterter Filter mit entsprechendem Kriterienbereich?

Wenn es VBA sein soll/muss:
Nutze ebenfalls den Autofilter und kopiere ab der ersten Werte-Zeile.
Den Turbo zündest Du, indem Du vorher Spalte B sortierst, so dass der Filterbereich nicht fragmentiert ist.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#5
Hallo Berni,

ich bekomme leider die Fehlermeldung "Index ist außerhalb des gültigen Bereichs".

Da meine Datei deutlich größer ist als das Beispiel, habe ich den Code wie folgt abgeändert:

Code:
Sub uebertragen()
Dim i As Integer
Dim letzte As Integer
Dim erste As Integer

letzte = Sheets("Tabelle2").Cells(Rows.Count, 2).End(xlUp).Row
erste = Sheets("Tabelle1").Cells(Rows.Count, 1).End(xlUp).Row + 1

With Sheets("Tabelle2")
   For i = 2 To letzte
       If .Cells(i, 2).Value = "nein" Then
           Sheets("Tabelle1").Range("A" & erste & ":Z" & erste).Value = .Range("E" & i & ":Z" & i).Value
           erste = erste + 1
       End If
   Next i
End With

End Sub
Da die ich mehr Spalten habe (bis "Z") habe ich das "N" jeweils durch das "Z" ersetzt.
BG Fabian
Antworten Top
#6
Berni A:J = E:N
Du A:Z = E:Z
Fällt Dir was auf?

Zur Fehlermeldung:
Du musst schon die korrekten Tabellennamen eingeben!

Ansonsten bleibe ich bei den Empfehlungen meiner letzten Antwort.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#7
(12.06.2018, 11:44)RPP63 schrieb: Auch wenn Du eine funktionierende gute Formellösung hast:
Aggregat ist bei großen Bereichen recht träge und imo nicht zu empfehlen.
...
Gruß Ralf

Hallo, dafür kann man ja eine Hilfsspalte einfügen (nach lupo1-Art) mit VERGLEICH() und dann superschnell mit INDEX()...
Gruß Jörg
ich muss mich erst wieder ganz langsam heran robben. Also bitte ich um Nachsicht

"Wer immer tut, was er schon kann, bleibt immer das, was er schon ist." - Henry Ford
Antworten Top
#8
Theoretisch ja, Jörg!
Hier soll aber ja ein "gefiltertes" Ergebnis generiert werden.
Die Vergleich-Spalte könnte man nach diesem Schema aufbauen:
http://www.herber.de/excelformeln und bitte suchen .../formeln.html?welcher=224
Trotz Zählenwenn() dürfte (natürlich die dritte, also die Index-Formel) dies schneller als Aggregat sein.
Jetzt bin ich aber trotzdem zickig  :21: und bleibe bei meiner Filterlösung nebst vorherigem Sortieren.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#9
(12.06.2018, 12:20)RPP63 schrieb: Berni A:J = E:N
Du A:Z = E:Z
Fällt Dir was auf?

Zur Fehlermeldung:
Du musst schon die korrekten Tabellennamen eingeben!

Ansonsten bleibe ich bei den Empfehlungen meiner letzten Antwort.

Gruß Ralf

Ja, da habe ich einen Fehler eingebaut.

Aber A:V = E:Z müsste doch korrekt sein oder?

Und was meinst du mit den korrekten Tabellennamen?
Antworten Top
#10
Ausnahmsweise mal ein Textbaustein:
Ein Tabellenblatt kannst Du in plain Excel nur mit dem Namen, der auf dem "Tabellenreiter" steht ansprechen!
Bei VBA gibt es drei Möglichkeiten:
  1. Die .Name-Eigenschaft: Worksheets("Meine Tabelle").Range("A1") [steht in der Klammer]
  2. Den Code-Name: Tabelle4.Range("A1") [vor der Klammer]
  3. Den Index (lfd. Nr. des Sheets, von links mit 1 beginnend) Worksheets(4).Range("A1")
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top


Gehe zu:


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