Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1520to1524
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Datensätze aufspalten

Datensätze aufspalten
30.10.2016 08:53:12
iceer
Hallo,
ich habe schon in einem anderen Forum gefragt und eine Lösung bekommen.
Nun ist diese aber aus Gründen der Performance nicht machbar.
Ich brauche eine Dauerhafte Aktualisierung der Daten, welche schnell von Statten geht.
Eine anderer Lösungsansatz war die Formel:
=WENN(INDEX(Tabelle1!A:A;AGGREGAT(15;6;ZEILE($A$1:$A$6000)/((Tabelle1!$A$1:$A$6000"") *(ISTFEHLER(SUCHEN("asd";Tabelle1!$B$1:$B$6000))))+ZEILE($A1)-1-(ABRUNDEN(ZEILE(A1)/19;0)*19); AUFRUNDEN(ZEILE($A1)/19;0)))="";"";INDEX(Tabelle1!A:A;AGGREGAT(15;6;ZEILE($A$1:$A$6000) /((Tabelle1!$A$1:$A$6000"")*(ISTFEHLER(SUCHEN("asd";Tabelle1!$B$1:$B$6000))))+ZEILE($A1) -1-(ABRUNDEN(ZEILE(A1)/19;0)*19);AUFRUNDEN(ZEILE($A1)/19;0))))
Dies ist aber auch um einiges zu langsam.
In der nicht anonymisierten tabelle habe ich Momentan um die 3000 Zeilen.
In einem Monat dürften das 30000 sein.
Ich brauche wirklich eine Lösung, welche schnell und effizient ist.
Bei einer manuellen EIngabe sowie copy paste, muss das Ergebnis der Änderung auf den Blättern 2 und 3 unmittelbar vergfügbar sein.
Falls jemand eine Idee hat, bitte bitte melden. Auch wenn dafür andere Programme benötigt werden würden.
Ich muss das irgendwie bewerkstelligen.
https://www.herber.de/bbs/user/109101.xlsx
Momentan wird dies verwendet:
Option Explicit
Sub kopieren()
ScreenUpdating = False
EnableEvents = False
Dim x As Long
Sheets("Tabelle2").Cells.ClearContents
Sheets("Tabelle3").Cells.ClearContents
For x = 1 To LetzteZeile(Sheets("Tabelle1"))
If Sheets("Tabelle1").Range("A" & x).Text "" And Not Sheets("Tabelle1").Range("B" & x).Text Like "*asd*" Then
Sheets("Tabelle1").Range("A" & x & ":E" & x + 18).Copy _
Sheets("Tabelle2").Range("A" & LetzteZeile(Sheets("Tabelle2")) + 1)
x = x + 18
Else
Sheets("Tabelle1").Range("A" & x & ":E" & x).Copy _
Sheets("Tabelle3").Range("A" & LetzteZeile(Sheets("Tabelle3")) + 1)
End If
Next x
ScreenUpdating = True
EnableEvents = True
MsgBox "Fertig!"
End Sub
Public Function LetzteZeile(wks As Worksheet) As Long
On Error Resume Next
LetzteZeile = wks.Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious). _
Row
If Err Then
LetzteZeile = 0
End If
On Error GoTo 0
End Function

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datensätze aufspalten
30.10.2016 13:13:54
fcs
Hallo iceer,
hier ein optimiertes Excel-Makro.
Laufzeit auf meinem Notebook unter Windows Vista/Excel2010 ca. 4 Sekunden bei ca. 30000 Datenzeilen
LG
Franz
Sub kopieren_Neu()
Dim Zeile As Long
Dim SpalteX As Long
Dim Zeile_L As Long
Dim StatusCalc As Long
Dim wks_1 As Worksheet
'Makrobremsen lösen
With Application
.ScreenUpdating = False
.EnableEvents = False
StatusCalc = .Calculation
.Calculation = xlCalculationManual
End With
Set wks_1 = Sheets("Tabelle1")
'Altdaten löschen
Sheets("Tabelle2").UsedRange.ClearContents
Sheets("Tabelle3").UsedRange.ClearContents
With wks_1
SpalteX = LetzteSpalte(wks_1) + 1 'Spalte für Hilfswert
Zeile_L = LetzteZeile(wks_1) 'letzte Zeile mit Daten
'Hilfswert WAHR in Hilfspalte eintragen für alle Zeilen, _
die nach "Tabelle2" kopiert werden sollen
For Zeile = 1 To Zeile_L
If Sheets("Tabelle1").Cells(Zeile, 1).Text  "" Then
If Not .Cells(Zeile, 2).Text Like "*asd*" Then
.Range(.Cells(Zeile, SpalteX), .Cells(Zeile + 18, SpalteX)).Value = True
Zeile = Zeile + 18
End If
End If
Next Zeile
'Zeilen nach Tabelle2 kopieren
With .Range(.Cells(1, SpalteX), .Cells(Zeile_L, SpalteX))
.SpecialCells(Type:=xlCellTypeConstants, Value:=xlLogical).EntireRow _
.Copy Destination:=Worksheets("Tabelle2").Range("A1")
End With
'Spalten rechts von Spalte E löschen
With Worksheets("Tabelle2")
.Range(.Cells(1, 6), .Cells(Zeile_L, SpalteX)).EntireColumn.Delete
End With
'Zeilen nach Tabelle3 kopieren
With .Range(.Cells(1, SpalteX), .Cells(Zeile_L, SpalteX))
.SpecialCells(Type:=xlCellTypeBlanks).EntireRow _
.Copy Destination:=Worksheets("Tabelle3").Range("A1")
End With
'Spalten rechts von Spalte E löschen
With Worksheets("Tabelle3")
.Range(.Cells(1, 6), .Cells(Zeile_L, SpalteX)).EntireColumn.Delete
End With
'Hilfsspalte wieder löschen
.Cells(1, SpalteX).EntireColumn.Delete
End With
'Makrobremsen zurücksetzen
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = StatusCalc
End With
MsgBox "Fertig!"
End Sub
Public Function LetzteZeile(wks As Worksheet) As Long
On Error Resume Next
LetzteZeile = wks.Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).  _
_
Row
If Err Then
LetzteZeile = 0
End If
On Error GoTo 0
End Function
Public Function LetzteSpalte(wks As Worksheet) As Long
On Error Resume Next
LetzteSpalte = wks.Cells.Find(After:=wks.Cells(1, 1), What:="*", SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
If Err Then
LetzteSpalte = 0
End If
On Error GoTo 0
End Function

Anzeige
AW: Datensätze aufspalten
31.10.2016 07:27:51
iceer
Hallo,
wirft mir leider sofort einen Syntaxfehler hier aus:
Public Function LetzteZeile(wks As Worksheet) As Long
On Error Resume Next
LetzteZeile = wks.Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious). _
AW: Datensätze aufspalten
31.10.2016 07:34:14
iceer
Falls es hilft:
Version ist 14.0.7128.500 32 Bit
Office 2010 Standard.
Seit wann haben wir 2010?
Ähm Sry für die falsche Angabe. Das sieht so gar nicht nach dem 2010 er aus...
AW: Datensätze aufspalten
31.10.2016 07:45:05
Gerd
Hallo I.!
Angezeigt wird im Forum:
LetzteZeile = ........xlPrevious). _
_
Row
in deinem Code musst du die "Enden" ohnen Umbruch der Forumssoftware zusammenschreiben:
LetzteZeile = ........xlPrevious).Row
P.S.: Es ist immer gut, die Fehlernummer u. -beschreibung hier mitzuteilen.
Gruß Gerd
Anzeige
AW: Datensätze aufspalten
31.10.2016 10:24:45
iceer
Also ich weine gerade fast vor Freude :)
3-6 Sekunden bei 50 k Zeilen.
Damit ist nun wirklich zu arbneiten!
Vielen Vielen Dank
Matthias

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige