Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Excel Array Zeilen Kopieren

Excel Array Zeilen Kopieren
28.07.2024 21:35:26
Peter.grom
Hallo
ich habe eine tabelle1 mit mehreren spalten
daraus möchte ich zeilen mit inhalt A der spalte 1(A) und 13 der spalte 6(F)
in tabelle 2 Kopieren in zeilen 3-21
dann
zeilen mit inhalt B der spalte 1(A) und 14 der spalte 6(F)
in tabelle 2 Kopieren in zeilen 24-42

bisher geht das so


With Tabelle1
ZeileMax = .UsedRange.Rows.Count
n = 3
For zeile = 3 To ZeileMax
If .Cells(zeile, 1).Value = "A" And .Cells(zeile, 6).Value = "13" Then
.Rows(zeile).Copy Destination:=Tabelle5.Rows(n)
n = n + 1

End If
Next zeile
End With

soll aber mit array schneller gehen hab ich gehört

wäre für hilfe dankbar
lg peter grom
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel Array Zeilen Kopieren
28.07.2024 22:52:53
{Boris}
Hi,

die einfachste Lösung dürfte der Autofilter sein:
Bereich filtern, Filterergebnis kopieren und einfügen. Und dabei den Makrorecorder mitlaufen lassen.

VG, Boris
AW: Excel Array Zeilen Kopieren
29.07.2024 10:19:31
daniel
HI
Arbeiten mit Array bringt dir hier nicht viel, da das Zeitaufwendige das Copy-Paste ist.
Dabei ist die Anzahl der Copy-Paste-Vorgänge das entscheidende. Wieviele Zeilen bei einem Copy-Paste dann kopiert werden, spielt kaum eine Rolle.

um die Anzahl dieser Schritte zu minimieren, gibt es zwei Wege.
a) man nutzt aus, dass Excel im Sortieren sehr schnell ist und sortiert die Liste zunächst so, das die Zeilen, die kopiert werden sollen, einen Block bilden.
dann ermittelt man erste und letzte Zeile dieses Blocks und kopiert in dann als ganzes:

Sub Kopieren_mit_Sortieren()

Dim ZeileMax As Long
Dim i As Long
Dim ZeileAb As Long
Dim ZeileBis As Long

With Tabelle1
ZeileMax = .UsedRange.Rows.Count
With .Range("3:" & ZeileMax)
.Sort key1:=.Cells(1, 1), order1:=xlAscending, key2:=.Cells(1, 2), order2:=xlAscending, Header:=xlNo
End With

For i = 3 To ZeileMax
If .Cells(i, 1).Value & "|" & .Cells(i, 2).Value = "A|13" Then Exit For
Next
ZeileAb = i
For i = i To ZeileMax + 1
If .Cells(i, 1).Value & "|" & .Cells(i, 2).Value > "A|13" Then Exit For
Next
ZeileBis = i - 1
.Range(.Rows(ZeileAb), .Rows(ZeileBis)).Copy Destination:=Tabelle5.Cells(3, 1)
End With

End Sub


b) man markiert zuerst die Zellen, die kopiert werden müssen so, dass man sie über das Inhalte auswählen als ganzes selektieren kann, den auch so kann man sie dann als ganzes kopieren. Da kann man machen, wenn die Liste nicht sortiert werden soll:
Sub Kopieren_Zellenwahl_per_Formel()

With Tabelle1.UsedRange
With .Columns(.Columns.Count + 1)
.FormulaR1C1 = "=IF(RC1&RC2=""A13"",1,"""")"
If WorksheetFunction.Sum(.Cells) > 0 Then
With .SpecialCells(xlCellTypeFormulas, 1)
.ClearContents
.EntireRow.Copy Destination:=Tabelle5.Cells(3, 1)
End With
End If
.ClearContents
End With
End With
End Sub

wie du siehst, wird der Code herfür sehr schlank, und kommt ohne Schleifen, IFs und auch ohne Variablen aus.
bei sehr großen Tabellen mit vielen Werten (10.000 Zeilen und mehr) würde ich aber auch hier ein Sortieren voranstellen, damit die zu kopierenden Zellen einen Block bilden.

Gruß Daniel
Anzeige
AW: Excel Array Zeilen Kopieren
29.07.2024 09:16:48
Peter.grom
Danke erst mal
funktioniert nicht da in tabelle 2 schon einträge stehen und in zeile 22 und 23 berechnungen durchgeführt werden sollen
lg peter
AW: Excel Array Zeilen Kopieren
29.07.2024 10:00:45
Herbert Grom
Hallo Namensvetter,

lade doch mal eine Beispielarbeitsmappe hoch, dann tun wir uns evtl. etwas leichter, dir zu helfen.

Servus
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige