Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1156to1160
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

Zahlenreihen zusammenfassen Performanceverbesserun

Zahlenreihen zusammenfassen Performanceverbesserun
Daniel
Hallo
folgendes Problem:
ich habe 2 Zahlenreihen in Spalte A und B
innerhalb einer Zahlenreihe sind die Werte eindeutig
die Reihen sind sortiert.
jetzt sollen alle Werte aus Spalte B, die nicht in Spalte A vorkommen, unten an Spalte A angefügt werden, so daß eine Zahlenreihe entsteht, die jeden Wert aus Spalte A und B genau 1x enthält:
also in etwa so:
Ausgansituaton:
A   B
1   1
2   3
4   4
6   5

Ziel:
A
1
2
4
6
3
5

wobei die Sortierung keine Rolle spielt.
Momentan habe ich das ganze so gelöst, daß ich in Spalte C mit folgender Formel die Entsprechenden Werte mit einem Wahrheitswert markiere und unten anfüge:
=Wenn(SVerweis(B1;A:A;1;1)=B1;0;WAHR)

allerdings dauert die Berechnung dieser Formel recht lange, da die Datenmengen recht gross sind (pro Datenreihe grösser 30.000 Werte). Hat jemand eine Idee, wie man das per Makro schneller lösen kann?
mein bisheriger Code dazu sieht so aus:
with ActiveSheet.Usedrange.Columns(2).Offset(0,1)
.FormulaLocal = "=Wenn(SVerweis(B1;A:A;1;1)=B1;0;WAHR)"
.SpecialCells(xlcelltypeformulas, 4).Offset(0,-1).Copy Cells(Rows.Count, 1).end(xlup).offset(1, _
0)
.Clear
End with
columns(2).Clear
Gruß, Daniel

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

Betreff
Benutzer
Anzeige
AW: Zahlenreihen zusammenfassen Performanceverbesserun
07.05.2010 18:29:00
{Boris}
Hi Daniel,
in Spalte A unter die 6:
{=KKLEINSTE(WENN(ZÄHLENWENN(B$1:B$4;A$1:A$4)=0;B$1:B$4);ZEILEN($1:1))}
und runterkopieren.
Grüße Boris
AW: Zahlenreihen zusammenfassen Performanceverbesserun
08.05.2010 01:26:23
Daniel
Hi
danke für den Ansatz, aber bei 30000 Zeilen mit ZählenWenn und Matrix-Formeln zu operieren ist nicht besonders sinnvoll. (es sei denn, man hat viel Zeit)
Gruß, Daniel
AW: Zahlenreihen zusammenfassen Performanceverbesserun
07.05.2010 20:16:37
Peter
Hallo Daniel
hier eine Lösung mit ("Scripting.Dictionary")
'***** Extrem schnell bei vielen Werten > 20.000
Public Sub Sortierte_Unikate_mit_Dictionary()
Dim objDic As Object
Dim vntIn As Variant
Dim L As Long
Dim vntOut As Variant
Dim T As Double
T = Timer
Workbooks.Add
Tabelle1.Range("a1:a30000").Copy Destination:=ActiveWorkbook.Sheets(1).Range("A1")
Tabelle1.Range("b1:b30000").Copy Destination:=ActiveWorkbook.Sheets(1).Range("A30001")
'Übergabe Werte im Range an Array
vntIn = ActiveWorkbook.Sheets(1).Range("A:A").Value
Application.DisplayAlerts = False
ActiveWorkbook.Close
Application.DisplayAlerts = True
Set objDic = CreateObject("Scripting.Dictionary")
For L = LBound(vntIn) To UBound(vntIn)
objDic(CStr(vntIn(L, 1))) = 0
Next
vntOut = objDic.keys
Call QuickSort(vntOut)
With ThisWorkbook.ActiveSheet
.Range("D2").Resize(UBound(vntOut) + 1) = WorksheetFunction.Transpose(vntOut)
.Range("D1") = Timer - T
End With
Set objDic = Nothing
End Sub

Public Sub QuickSort(vSort As Variant, Optional ByVal lngStart As Variant, Optional ByVal  _
lngEnd As Variant)
If IsMissing(lngStart) Then lngStart = LBound(vSort)
If IsMissing(lngEnd) Then lngEnd = UBound(vSort)
Dim i As Long
Dim j As Long
Dim h As Variant
Dim x As Variant
i = lngStart: j = lngEnd
x = vSort((lngStart + lngEnd) / 2)
Do
While (vSort(i)  x): j = j - 1: Wend
If (i  j)
If (lngStart 
https://www.herber.de/bbs/user/69477.xls
Gruß
Peter
Anzeige
AW: thats it
08.05.2010 01:28:09
Daniel
HI
ja, das schaut gut aus ist ist nochmal deutlich schneller als meine Lösung.
ich glaube, das Dictionary muss ich mir doch mal genauer anschauen.
Gruß, Daniel

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige