Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Array Parameter dynamisch Duplikate über mehrere Spalten

Forumthread: VBA Array Parameter dynamisch Duplikate über mehrere Spalten

VBA Array Parameter dynamisch Duplikate über mehrere Spalten
27.06.2024 06:33:11
Eric
Guten Tag an alle,

Beispieldatei:
https://www.herber.de/bbs/user/170525.xlsm

Wie übergibt man einem Array dynamisch Anzahl und Inhalt der Werte für folgendes Beispiel?

Eine einfache Tabelle hat x Spalten.

Per VBA sollen alle Duplikate entfernt werden.

Das betrifft nur die Zeilen, die vollständig identisch sind, nicht einzelne Spalten, sondern wirklich über alle Spalten hinweg müssen zwei Zeilen identisch sein.

Per Makrorekorder habe ich prinzipiell folgenden Befehl erhalten.

.Range("Hier der Range Bereich").RemoveDuplicates Columns:=Array(1, 2, 3), Header:=xlYes

Der Teil in der Klammer von Range ist kein Problem, das dient hier nur zur Vervollständigung der Befehlszeile.

Dieses "Array(1, 2, 3)" macht mir (und Kollegen aus der VB Programmierung) Kopfzerbrechen.

Die x Spalten können in der Anzahl beliebig sein.

Daher muss der Teil in der Array Klammer dynamisch ermittelt werden, bloß wie?

In Kürze die bisherigen Versuche.

1. Eine Schleife, die ein zuvor dimensioniertes Array mit x Werten befüllt (z.B. arr(2) mit den Werten 1, 2, 3), wobei für die Werte Byte, Integer und Variant verwendet wurden, ist zwar an sich kein Problem, aber in der Befehlszeile wird arr anstatt Array(1, 2, 3) nicht akzeptiert (Fehlermeldung).

2. Nur ein Wert in der Array Klammer wird zwar akzeptiert, der Befehl wird auch ausgeführt, das Ergebnis ist aber nicht das gewünschte. Statt über alle x Spalten die Duplikate zu entfernen, gilt das nur für die Spalte entsprechend des Wertes in der Klammer.

3. Selbst folgendes geht nicht.

Dim MyArray

MyArray = Array(1, 2, 3)

Wenn man dann in der Befehlszeile Array(1, 2, 3) durch MyArray ersetzt, kommt wieder eine Fehlermeldung.

Im Lokalfenster haben die Werte des Arrays den Datentyp Variant/Integer. Erwartet wird der Array Bezeichner "ParamArray ArgList() As Variant", trotzdem wird auch hier die Ausführung mit Fehlermeldung verweigert.

4. Ebenfalls ohne Erfolg war folgender Versuch.

Dim MyArray(2) As Integer

MyArray(0) = 1
MyArray(1) = 2
MyArray(2) = 3

5. In die Array Klammer einen String schreiben und in Variant konvertieren, funktioniert auch nicht.

.Range("Hier der Range Bereich").RemoveDuplicates Columns:=Array(CVar("1, 2, 3")), Header:=xlYes

Ich weiß nicht mehr weiter.

Wer kann mir bitte sagen, wie ich dieses Problem lösen kann, sodass der Teil Array(1, 2, 3) beziehungsweise der Ausdruck in der Klammer dynamisch je nach Spaltenanzahl gesetzt wird oder dass ein dimensioniertes, befülltes Array in der Befehlszeile erkannt und akzeptiert wird?

Vielen Dank für jede Unterstützung!

Liebe Grüße!

Eric
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Array Parameter dynamisch Duplikate über mehrere Spalten
27.06.2024 09:10:01
daniel
Hi

RemoveDuplicates akzepiert die Eingabe mehrere Spalten leider nur über die Funktion ARRAY(....) als Parameter.
damit kann man die Anzahl der Spalten nicht mehr variabel gestalten.
ob Bug oder Feature kann ich dir leider nicht sagen

ein möglicher Workaround wäre, in einer Hilfsspalte die Werte der relevanten Spalten einer Zeile zu einem Wert zusammenzufassen und damit die Duplikate zu ermitteln:
so ginge das, automatisch angepass
With Cells(1, 1).CurrentRegion

With .Columns(.Columns.Count + 1) 'erste freie Spalte am Tabellenende
.FormulaR1C1 = "=CONCAT(RC1:RC[-1])"
.EntireRow.RemoveDuplicates .Column, xlNo
.ClearContents
End With
End With


Gruß Daniel
Anzeige
AW: VBA Array Parameter dynamisch Duplikate über mehrere Spalten
27.06.2024 10:16:49
Eric
Hallo Daniel,

herzlichen Dank für Deine Antwort.

Ich hatte dieselbe Vermutung, wird wohl ein Bug sein.

Zumindest habe ich nun Gewissheit, dass es nicht geht.

Danke für Deine Zeit und alles Gute!

Gruß Eric
AW: VBA Array Parameter über mehrere Spalten (und es geht!)
27.06.2024 11:30:42
peter
Hallo

Mit einem kleinen Trick gehts doch:



Sub test()

Dim list As Object
Set list = CreateObject("System.Collections.ArrayList")

list.Add 1
list.Add 2
list.Add 3

Range("A1:C4").RemoveDuplicates Columns:=list.toarray, Header:=xlNo

End Sub



Peter
Anzeige
AW: VBA Array Parameter über mehrere Spalten (und es geht!)
27.06.2024 11:58:40
Eric
Hallo Peter,

das ist ja fantastisch!

Ganz herzlichen Dank!!!

Probiere ich gleich mal aus, aber scheint ja zu funktionieren!

Viele Grüße und alles Gute!

Eric
AW: VBA Array Parameter über mehrere Spalten (und es geht!)
27.06.2024 12:53:27
Eric
Hallo Peter,

eben wollte ich Deine Lösung testen, erhalte aber folgende Fehlermeldung.

Zeile:
Set list = CreateObject("System.Collections.ArrayList")

Laufzeitfehler 429:
ActiveX-Komponente kann Objekt nicht erstellen

Hast Du dafür eventuell auch eine Lösung?

Muss ein Verweis aktiviert werden, wenn ja, welcher?

Danke nochmal und viele Grüße!

Eric
Anzeige
AW: VBA Array Parameter über mehrere Spalten (und es geht!)
27.06.2024 13:15:32
peter
Hallo

Ich hab folgende Verweise gesetzt

Userbild

Peter
AW: VBA Array Parameter über mehrere Spalten (und es geht!)
27.06.2024 14:33:07
Eric
Hallo Peter,

exakt dieselben Verweise habe ich gesetzt, aber Laufzeitfehler 429 bleibt.

Ich habe den Verweis auf mscorlib.dll gesetzt und Early Binding verwendet, auch das geht nicht.

Hättest Du noch eine Idee, was ich versuchen könnte?

Danke und Gruß

Eric
Anzeige
AW: VBA Array Parameter über mehrere Spalten (und es geht!)
27.06.2024 15:02:50
Eric
Hallo Peter,

funktioniert!

Danke und Gruß

Eric
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige