343 Aufrufe
Gefragt in Tabellenkalkulation von

Hallo zusammen,

ich komme nicht mehr weiter. Ich filtere in einer Tabelle nach Zeilen und möchte deren Inhalt (nicht Copy der Zeile) rausschreiben und in eine andere Tabelle an einer bestimmten Position einfügen.

Folgenden Code verwende ich aktuell:

Do While eingefügteZeilen3 < anzahlZeilen1
            Worksheets("ÄMs Datenextract").Activate     'Spalte B Kopieren Inhalt Text
            zeileninhalt_text = ActiveSheet.Cells(eingefügteZeilen2, 2).Value
            Worksheets("ÄMs").Activate
            ActiveSheet.Range("B" & gesuchteZeile3) = zeileninhalt_text

            Worksheets("ÄMs Datenextract").Activate     'Spalte C Kopieren Inhalt Text
            zeileninhalt_text = ActiveSheet.Cells(eingefügteZeilen2, 3).Value
            If zeileninhalt_text <> "" Then
                zeileninhalt_datum = CDate(zeileninhalt_text)
                Worksheets("ÄMs").Activate
                ActiveSheet.Range("C" & gesuchteZeile3) = zeileninhalt_datum
            Else
                Worksheets("ÄMs").Activate
                ActiveSheet.Range("C" & gesuchteZeile3) = zeileninhalt_text
            End If
                        
            Worksheets("ÄMs Datenextract").Activate     'Spalte D Kopieren Inhalt Text
            zeileninhalt_text = ActiveSheet.Cells(eingefügteZeilen2, 4).Value
            Worksheets("ÄMs").Activate
            ActiveSheet.Range("D" & gesuchteZeile3) = zeileninhalt_text
           

            eingefügteZeilen2 = eingefügteZeilen2 + 1
            gesuchteZeile3 = gesuchteZeile3 + 1
            eingefügteZeilen3 = eingefügteZeilen3 + 1           
Loop

So der Code gekürzt (geht bis Spalte O so weiter). Ich muss mir jeweils den Inhalt raussuchen, da die ursprüngliche Tabelle alles als Text ausgibt und ich teilweise Datum oder Zahlen habe.

Mein Problem (rot markiert) ist, dass ich nicht mit einer Schleife arbeite und daher nicht nur die sichtbare Zeile rüberschreibe, sondern auch die gefilterten. Die max. Anzahl der Zeilen funktioniert einwandfrei.

Kann mir hier jmd. mit der Schleife dazu helfen, ich komme einfach nicht weiter?
ich kann auch gerne eine Schleife pro Spalte (Und nicht pro Zeile) machen, ist vom Verständnis her für mich einfach, trotzdem klappt es nicht.

Freundliche Grüße

4 Antworten

0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)

Hallo,

versuche es mal so (ich hoffe, ich habe dich richtig verstanden):

Do While eingefügteZeilen3 < anzahlZeilen1
   'prüfen, ob Zeile ausgeblendet ist
   If Rows(eingefügteZeilen2).Hidden = False Then
       'falls nicht, dann Inhalt kopieren
       Worksheets("ÄMs").Range("B" & gesuchteZeile3) = Worksheets("ÄMs Datenextract").Cells(eingefügteZeilen2, 2).Value

       If Worksheets("ÄMs Datenextract").Cells(eingefügteZeilen2, 3).Value <> "" Then
         Worksheets("ÄMs").Range("C" & gesuchteZeile3) = CDate(Worksheets("ÄMs Datenextract").Cells(eingefügteZeilen2, 3).Value)
        Else
          Worksheets("ÄMs").Range("C" & gesuchteZeile3) = Worksheets("ÄMs Datenextract").Cells(eingefügteZeilen2, 3).Value
        End If

        Worksheets("ÄMs").Range("D" & gesuchteZeile3) = Worksheets("ÄMs Datenextract").Cells(eingefügteZeilen2, 4).Value

   End If

...

Gruß
M.O.

0 Punkte
Beantwortet von

Hallo M.O.

ja du hast mich richtig verstanden, danke. Mit 1-2 Anpassungen funktioniert es auch super, vielen Dank.
Anbei noch meine Anpassungen, da die Laufzeit nicht ganz gepasst hätte sonst (Man muss anfangs naütlich das richtige Tabellenblatt aktivieren und hinten mit einem Else richtig weiterzählen).
So eine einfache Bedingung eigentlich surprise

Do While eingefügteZeilen3 < anzahlZeilen1
            Worksheets("ÄMs Datenextract").Activate
            If Rows(eingefügteZeilen2).Hidden = False Then  'prüfen, ob Zeile ausgeblendet ist
                Worksheets("ÄMs Datenextract").Activate     'Spalte B Kopieren Inhalt Text
                zeileninhalt_text = ActiveSheet.Cells(eingefügteZeilen2, 2).Value
                Worksheets("ÄMs").Activate
                ActiveSheet.Range("B" & gesuchteZeile3) = zeileninhalt_text
                
                Worksheets("ÄMs Datenextract").Activate     'Spalte C Kopieren Inhalt Text
                zeileninhalt_text = ActiveSheet.Cells(eingefügteZeilen2, 3).Value
                If zeileninhalt_text <> "" Then
                    zeileninhalt_datum = CDate(zeileninhalt_text)
                    Worksheets("ÄMs").Activate
                    ActiveSheet.Range("C" & gesuchteZeile3) = zeileninhalt_datum
                Else
                    Worksheets("ÄMs").Activate
                    ActiveSheet.Range("C" & gesuchteZeile3) = zeileninhalt_text
                End If
                            
                Worksheets("ÄMs Datenextract").Activate     'Spalte D Kopieren Inhalt Text
                zeileninhalt_text = ActiveSheet.Cells(eingefügteZeilen2, 4).Value
                Worksheets("ÄMs").Activate
                ActiveSheet.Range("D" & gesuchteZeile3) = zeileninhalt_text
                 
                eingefügteZeilen2 = eingefügteZeilen2 + 1
                gesuchteZeile3 = gesuchteZeile3 + 1
                eingefügteZeilen3 = eingefügteZeilen3 + 1
            Else
                eingefügteZeilen2 = eingefügteZeilen2 + 1
            End If
        Loop

0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)

Hallo,

ja, da hatte ich bei der Prüfung natürlich noch das entsprechende Worksheet vergessen:

If Worksheets("ÄMs Datenextract").Rows(eingefügteZeilen2).Hidden = False Then
..

Auf Activate und Select kannst du in den meisten Fällen verzichten. Auch kannst du die Daten ohne Variablen in andere Tabellenblätter oder auch Arbeitsmappen kopieren. Daher mein gekürzter und angepasster (und leicht fehlerhafter) Code oben.

Gruß

M.O.

0 Punkte
Beantwortet von
Ja, super vielen lieben Dank. Am Ende bin ich ja am einfachsten Teil:

         If Rows(eingefügteZeilen2).Hidden = False Then

gescheitert.
Habe im übrigen auch keine vollständige Lösung erwartet sondern eine Hilfe und das hast du mehr als übererfüllt, danke :)
...