Löschen von Elementen in einem Array, wenn das Element einen Bestimmten Wert mit VBA
Habe ich ein globales array, prLst()
können von variabler Länge. Es dauert in zahlen als strings "1"
zu Ubound(prLst)
. Allerdings, wenn der Benutzer "0"
möchte ich löschen, das element aus der Liste. Ich habe den folgenden code geschrieben, um diese durchführen:
count2 = 0
eachHdr = 1
totHead = UBound(prLst)
Do
If prLst(eachHdr) = "0" Then
prLst(eachHdr).Delete
count2 = count2 + 1
End If
keepTrack = totHead - count2
'MsgBox "prLst = " & prLst(eachHdr)
eachHdr = eachHdr + 1
Loop Until eachHdr > keepTrack
Funktioniert das nicht. Wie kann ich effizient löschen von Elementen in dem array prLst
wenn das element "0"
?
HINWEIS: Dies ist Teil eines größeren Programms, für das die Beschreibung kann hier gefunden werden: Sortieren von Gruppen von Zeilen Excel-VBA-Makro
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ein array ist eine Struktur mit einer bestimmten Größe. Sie können dynamische arrays in vba, die Sie kann schrumpfen oder wachsen mit ReDim, aber Sie können nicht entfernen Sie Elemente in der Mitte. Es ist nicht klar, aus Ihrer Probe, wie Ihr array funktional arbeitet oder wie ermitteln Sie die index-position (eachHdr), aber Sie haben im Grunde 3 Optionen
(A) Schreiben Sie eine benutzerdefinierte 'löschen' - Funktion für das array wie (ungetestet)
(B) setzt man Einfach ein "dummy" - Wert als den Wert, der statt wirklich zu löschen das element
(C) Stoppen mit einem array und ändern Sie es in ein VBA.Sammlung. Eine Sammlung ist eine (eindeutige)Schlüssel/Wert-paar-Struktur, wo Sie können frei hinzufügen oder löschen von Elementen aus
Beim erstellen des array, warum nicht einfach überspringen 0s und sparen Sie sich die Zeit zu haben, um sorgen um Sie später? Wie oben erwähnt, arrays sind nicht gut geeignet für die Löschung.
Ich bin Recht neu in vba & excel - nur tun Sie dies für etwa 3 Monate -
Ich dachte, ich würde teilen meine array-Deduplizierung Methode, da dieser post scheint relevant zu:
Diesen code, wenn Sie Teil einer größeren Anwendung, die Analysen Rohr-Daten-
Die Rohre sind aufgelistet in der ein Blatt mit der Nummer in xxxx.1, xxxx.2, yyyy.1, yyyy.2 .... format. so thats, warum alle string-manipulation vorhanden ist.
im Grunde ist es nur speichert der pipe-Nummer nur einmal, und nicht die .2 oder .1 Teil.
Mit einem Haufen von message-Boxen für debugging-atm - ich bin sicher, Sie werden ändern Sie es für Ihre eigene Arbeit.
Ich hoffe, die Leute finden diese hilfreich,
Grüße
Joe
löschen von Elementen in einem Array mit bestimmter Zustand ist, können Sie code wie diesen
Ich oft manipulieren 1D-Array mit Join/Split
aber wenn Sie zum löschen bestimmter Wert in Multi-Dimension-ich schlage vor, Sie zu ändern-Array in 1D-Array wie folgt
hier ist ein Beispiel von code mithilfe der
CopyMemory
Funktion, die Arbeit zu tun.Ist es angeblich "viel schneller" (abhängig von der Größe und Typ des Arrays...).
ich bin nicht der Autor, aber ich habe es getestet :
Ich weiß, das ist alt, aber hier ist die Lösung, die ich kam mit, wenn ich nicht wie die, die ich gefunden.
-Schleife durch das array (Variant) hinzufügen jedes element und einige Teiler ein string, es sei denn, es entspricht, den Sie entfernen möchten
-Dann teilen Sie die Zeichenfolge auf der Trennlinie
Offensichtlich die Verwendung von strings erzeugt einige Einschränkungen, wie benötigen, um sicherzustellen, dass die Informationen, die bereits im array, und ist dieser code macht das erste array-element leer ist, aber es tut, was ich brauche, und mit ein wenig mehr Arbeit, könnte es vielseitiger sein.
Ist es einfach. Ich Tat es den folgenden Weg, um eine Zeichenfolge mit einzigartigen Werte (aus zwei Spalten einer output-sheet):