Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Array: Wert finden und löschen
zurück: win7 x64 + directx9 + vba weiter: alle Zellennamen die sich auf eine Zelle beziehen löschen Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Feedback Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
Seboo
Im Profil kannst Du frei den Rang ändern


Verfasst am:
05. Apr 2011, 14:47
Rufname:

Array: Wert finden und löschen - Array: Wert finden und löschen

Nach oben
       Version: Office 2003

Hallo Zusammen,

Habe im Netz leider nichts passendes dafür finden können, vllt wisst ihr ja hier weiter.

Ich habe ein Array mit Inhalt und einen TEIL jedes Array Values kenne ich, genauer gesagt, die letzten Zeichen. Diese Zeichen möchte ich nnun im Gesamten Array suchen und löschen. Die angegebenen Zeichen sind IMMER im Array vorhanden, muss also nicht erst geprüft werden.

Hier einmal konreter:

Array Test123 enthält die Werte "hallo welt", "schönes wetter", "sonne scheint"
Gelöscht werden soll der Eintrag, der "welt" enthält (bekannt ist immer der letzte Teil des Array Eintrages).

Danke für eure Hilfe!
Gast



Verfasst am:
05. Apr 2011, 14:53
Rufname:


AW: Array: Wert finden und löschen - AW: Array: Wert finden und löschen

Nach oben
       Version: Office 2003

HI
noch konkreter
was meinst du genau mit gelöscht:

soll dein Array nur noch die beiden Werte "Schönes Wetter" und "Sonne Scheint" enthalten oder sollen es die drei Werte "", "Schönes Wetter" und "Sonne Scheint"

Gruß, Daniel
Seboo
Im Profil kannst Du frei den Rang ändern


Verfasst am:
05. Apr 2011, 15:16
Rufname:

AW: Array: Wert finden und löschen - AW: Array: Wert finden und löschen

Nach oben
       Version: Office 2003

Nein, gelöscht und neu dimensioniert muss es sein, sry Smile
Phelan XLPH
Fortgeschritten


Verfasst am:
05. Apr 2011, 15:27
Rufname: Phelan

AW: Array: Wert finden und löschen - AW: Array: Wert finden und löschen

Nach oben
       Version: Office 2003

Hallo,

Code:
Sub RedimArray()
    Dim ar As Variant
    Dim such As Variant
    Dim i As Long
    Dim n As Long
    ar = Array("hallo welt", "schönes wetter", "sonne scheint")
   
    such = "welt"
   
    For i = LBound(ar) To UBound(ar)
        If InStr(ar(i), such) = 0 Then
            ar(n) = ar(i)
            n = n + 1
        End If
    Next
    ReDim Preserve ar(n - 1)
    MsgBox Join(ar, " | ")
End Sub

_________________
Was vorstellbar ist, ist auch machbar. - Albert Einstein
Seboo
Im Profil kannst Du frei den Rang ändern


Verfasst am:
05. Apr 2011, 16:33
Rufname:


AW: Array: Wert finden und löschen - AW: Array: Wert finden und löschen

Nach oben
       Version: Office 2003

Passt, vielen Dank!
Bitsqueezer
Office-VBA-Programmierer


Verfasst am:
05. Apr 2011, 22:22
Rufname:

AW: Array: Wert finden und löschen - AW: Array: Wert finden und löschen

Nach oben
       Version: Office 2003

Hallo,

wenn Du nicht unbedingt auf Arrays angewiesen bist, würde ich Dir empfehlen, einfach eine Collection zu verwenden. Diese kannst Du einfach mit "Add" mit neuen Werten befüllen, jedem Wert einen (String) Key zuweisen und auf jedes Element mit dem Key oder dem numerischen Index direkt zugreifen und es mit "Remove" entfernen.
Da Elemente von Collections auch mit For Each durchlaufen werden können, ist das Ergebnis u.U. schneller als mit Arrays.

Gruß

Christian
Phelan XLPH
Fortgeschritten


Verfasst am:
06. Apr 2011, 08:53
Rufname: Phelan

AW: Array: Wert finden und löschen - AW: Array: Wert finden und löschen

Nach oben
       Version: Office 2003

@Bitsqueezer

wie würde denn so ein Löschvorgang aussehen bei mehrfach vorkommenden
gleichen werten?

_________________
Was vorstellbar ist, ist auch machbar. - Albert Einstein
Bitsqueezer
Office-VBA-Programmierer


Verfasst am:
06. Apr 2011, 09:55
Rufname:

AW: Array: Wert finden und löschen - AW: Array: Wert finden und löschen

Nach oben
       Version: Office 2003

Hallo,

das hängt immer davon ab, was man in die Collection gibt und wozu es gebraucht wird. Man könnte z.B. jedem Element eine ID zum Key hinzufügen, die für jeden gleichen Key-Wert hochgezählt wird, z.B. so:

"1,Hallo"
"2,Hallo"
"3,Hallo"
"1,Welt"
"2,Welt"
"1,Noch"
"1,ein"
"1,paar"
"1,Werte"

Damit kann man sich darauf verlassen, daß es immer eine ID 1 für jeden Wert gibt, so kann man immer den ersten Wert finden und von da an die ID hochzählen, dem Key hinzufügen und so lange aus der Collection entfernen, bis die Collection keinen Key mehr mit der hochgezählten ID/Key findet, also im Beispiel etwa, wenn man bei "4Hallo" angelangt ist, liefert die Collection einen Fehler und man kann das Löschen einstellen.

Das Schöne bei Collections ist, daß man dort eben auch Objekte hineinschieben kann, so kann man auch "komplexe Variablen" erstellen, indem man z.B. ein Klassenmodul erstellt, dessen Inhalt einfach so aussieht:

Code:
Public lngID As Long
Public strKey As String
Public varValue As Variant


Beim Befüllen kann man so ohne umständliche Stringmanipulationen auch direkt auf die einzelnen Teile der "Variablen" zugreifen.

Ich benutze Arrays mittlerweile nur noch da, wo sich der Aufwand einer Collection nicht lohnt, ansonsten ist der Komfort einer Collection und deren riesiger Möglichkeiten nicht zu überbieten - ganz zu schweigen von der Verarbeitungsgeschwindigkeit. Gerade für Excel sind Collections superpraktisch. Z.B. mal eben ein "Array" von Ranges anzulegen usw.

Gruß

Christian
Phelan XLPH
Fortgeschritten


Verfasst am:
06. Apr 2011, 18:17
Rufname: Phelan

AW: Array: Wert finden und löschen - AW: Array: Wert finden und löschen

Nach oben
       Version: Office 2003

Code:
Z.B. mal eben ein "Array" von Ranges anzulegen


Das geht auch mit arrays.

Das Einlesen und Auslesen der Collection dauert länger.
Deshalb bevorzuge ich das Dictionary, das auch Objekte speichern kann.

Es kann das Ergenis als Array ausgeben , benötigt also keine Schleife
zum Auslesen.

Das Umschaufeln in den Arrays ist dennoch schneller als das löschen per
.Removeitem der Collection.

Habs getestet.

_________________
Was vorstellbar ist, ist auch machbar. - Albert Einstein
Bitsqueezer
Office-VBA-Programmierer


Verfasst am:
06. Apr 2011, 23:33
Rufname:

AW: Array: Wert finden und löschen - AW: Array: Wert finden und löschen

Nach oben
       Version: Office 2003

Hallo,

wie hast Du das denn getestet und was kam dabei heraus?
Der Geschwindigkeitsvorteil der Collection ist, daß über den Key auf jedes Element direkt zugegriffen werden kann, da der Key gleichzeitig den Inhalt repräsentieren kann ("benannte Arrays"). In einem Array muß man erst alle Elemente durchlaufen, um das richtige zu finden. In dem einfachen Beispiel hier im Thread wird das vermutlich keine besonderen Vorteile für die Collection bringen, aber in komplexeren Datenszenarios macht sich genau dieser Direktzugriff, der mit einer indizierten Datenbanktabelle verglichen werden kann, durchaus bemerkbar.

Das Dictionary-Objekt ist auch eine interessante Variante, eine erweiterte Collection sozusagen. Was mich daran stört ist, daß man dazu auf das externe Scripting Object zugreifen muß und das ist für die wenigen Zusätze, die das Dictionary anbietet, (für mich persönlich) ein Grund, es nicht zu verwenden. Ich versuche in VBA immer zu vermeiden, externe Objekte hinzuzuziehen, wenn es keine Notwendigkeit gibt, die nicht auch mit VBA-Mitteln zu lösen wäre. Schade, daß MS auch heute noch kein Dictionary in Office eingebaut hat.

Gruß

Christian
Phelan XLPH
Fortgeschritten


Verfasst am:
07. Apr 2011, 07:12
Rufname: Phelan

AW: Array: Wert finden und löschen - AW: Array: Wert finden und löschen

Nach oben
       Version: Office 2003

Hallo,

ja du hast recht. Der Löschvorgang, da direkt zugegriffen werden kann, ist
beim Collection schneller als ein Schleifendurchlauf beim Array.

Beim Auslesen der der Collection kommt man um einen Schleifendurchlauf
nicht drum herum.

Da benutze ich entweder nur Arrays oder die Kombination Array + Dictionary.
Da das Dictionary mit .Items und .Keys also die Werte und die Schlüssel
als Array zurückgibt und das direkt ins Blatt ausgegen werden kann.

Aber ich denke der Einsatz von Collection ist die übersichtlichere Methode.

_________________
Was vorstellbar ist, ist auch machbar. - Albert Einstein
Bitsqueezer
Office-VBA-Programmierer


Verfasst am:
07. Apr 2011, 09:07
Rufname:

AW: Array: Wert finden und löschen - AW: Array: Wert finden und löschen

Nach oben
       Version: Office 2003

Hallo,

stimmt - daß "Items" und "Keys" beim Dictionary-Objekt keine Collections sind, sondern Methoden sind, die jeweils ein Array mit den Werten zurückliefern, ist mir noch gar nicht aufgefallen (eben weil ich es eher nicht benutze). Das ist in der Tat im Fall von Excel ein entscheidender Vorteil, denn das Zuweisen von Arrays zu Zellbereichen (und natürlich auch umgekehrt) ist ein wirklich tolles Feature von Excel.
Vielleicht sollte ich mich doch noch mal näher mit dem Dictionary-Objekt befassen..Smile

Gruß

Christian
Phelan XLPH
Fortgeschritten


Verfasst am:
07. Apr 2011, 11:32
Rufname: Phelan

AW: Array: Wert finden und löschen - AW: Array: Wert finden und löschen

Nach oben
       Version: Office 2003

Ja, das ist ein großer Vorteil.

Den einzigen Nachteil den Dictionary gegenüber Collection hat ist, das
nur über den Key auf das Item zugegriffen werden kann. Indizes gibts keine.

Noch ein weiterer Unterschied:
Wird der Collection ein Wert einem bereits existierenden Schlüssel zugewiesen
so gibts einen Fehler. Leider kann das Existieren eines Schlüssels nicht
überprüft werden, also bleibt da einem nur die Fehlerbehandlung.

Wird der Dictionary ein Wert eines bereits existirenden Schlüssels zugewiesen
so wird der alte Wert mit dem neuen überschrieben. Die Existenz eines Schlüssels
lässt sich aber über die Methode .Exists(Key) überprüfen.

_________________
Was vorstellbar ist, ist auch machbar. - Albert Einstein
Bitsqueezer
Office-VBA-Programmierer


Verfasst am:
07. Apr 2011, 19:03
Rufname:

AW: Array: Wert finden und löschen - AW: Array: Wert finden und löschen

Nach oben
       Version: Office 2003

Hallo,

hab' mal in der Zwischenzeit versucht, das Dictionary-Objekt in VBA nachzustellen. Herausgekommen ist die Klasse im Anhang. Es gibt kleine Unterschiede, zum Beispiel geben "Items" und "Keys" im Dictionary-Objekt ein Array mit UBound von -1 zurück, das kann man in VBA nicht nachstellen, stattdessen wird ein leeres Array mit UBound = 0 zurückgegeben.

Damit es auch wie eine Collection funktioniert, waren ein paar kleine Tricks notwendig, zwei versteckte Attributzeilen, die man nur extern im Texteditor hinzufügen kann und die nur erhalten bleiben, wenn man den Code (die betroffenen Funktionen) im VBA-Editor danach nicht mehr ausschneidet und an eine andere Stelle kopiert.

Um die Klasse zu verwenden, muß man sie importieren, darf ebenfalls nicht mit Copy/Paste geschehen.

Die eine Attributzeile bewirkt, daß man die Klasse in "For Each" benutzen kann, die andere, daß die Property "Item" Default-Property ist. Man kann die Klasse ansonsten benutzen, wie eine normale Collection, also:

Code:
Dim objDict As clsCCDictionary
Set objDict = New clsCCDictionary


Danach kann man wegen der Default-Property auf ein hinzugefügtes Element auch mit "objDict("Key")" zugreifen, was ansonsten nur mit "objDict.Item("Key")" ginge.

Kann sein, daß nicht alles so exakt wie bei einer Collection oder einem Dictionary-Objekt funktioniert, aber soweit ich getestet habe, sieht es bei beiden nahezu identisch aus. Das Praktische ist, daß mit dieser Wrapper-Klasse nun auch die Möglichkeit offensteht, diese um weitere Funktionen zu erweitern. So kann man hier eben auch auf den numerischen Index zugreifen, dafür aber einen Key nicht ersetzen (könnte man aber noch programmieren). Man könnte auch Sortierfunktionen hinzufügen oder eine weitere Key-Collection, um z.B. eine andere Zugriffsmethode auf die gleichen Elemente zu realisieren usw.

Gruß

Christian



clsCCDictionary.zip
 Beschreibung:
Wrapper-Klasse für die VBA Collection, die ein Dictionary-Objekt nachbildet, ohne Windows Scripting Host verwenden zu müssen.

Download
 Dateiname:  clsCCDictionary.zip
 Dateigröße:  2.39 KB
 Heruntergeladen:  87 mal

Phelan XLPH
Fortgeschritten


Verfasst am:
08. Apr 2011, 08:30
Rufname: Phelan


AW: Array: Wert finden und löschen - AW: Array: Wert finden und löschen

Nach oben
       Version: Office 2003

Hallo,

hab noch nicht reingeschaut, aber der Geschwindigkeit der Ausgabe
wird sich wohl nichts ändern.

_________________
Was vorstellbar ist, ist auch machbar. - Albert Einstein
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Excel Formeln: Gefundenen Wert aus Spalte A in D1... 3 Gundel 1328 27. Jan 2005, 00:09
Gast Gefundenen Wert aus Spalte A in D1...
Keine neuen Beiträge Excel Formeln: Kann Fehler nicht finden 2 sreuber 492 22. Jan 2005, 11:22
Gast Kann Fehler nicht finden
Keine neuen Beiträge Excel Formeln: #WERT! ausblenden 2 acki-bm 1532 20. Jan 2005, 14:06
acki-bm #WERT!   ausblenden
Keine neuen Beiträge Excel Formeln: Verknüpfung zu anderer xls-Datei löschen 3 cerkens78 1745 19. Jan 2005, 12:46
Kuwe Verknüpfung zu anderer xls-Datei löschen
Keine neuen Beiträge Excel Formeln: Wert einmal vergeben 3 Jony123 1117 13. Jan 2005, 11:47
ae Wert einmal vergeben
Keine neuen Beiträge Excel Formeln: Verknüpfungen zu anderen Datenquellen finden 2 Guido05 2036 12. Jan 2005, 16:21
Gast Verknüpfungen zu anderen Datenquellen finden
Keine neuen Beiträge Excel Formeln: Wert wird nicht angezeigt 10 NixWisserin 1127 01. Jan 2005, 23:06
NixWisserin Wert wird nicht angezeigt
Keine neuen Beiträge Excel Formeln: größten wert auslesen und woanders um 50 erhöhen 1 GE 1220 20. Dez 2004, 12:51
icke größten wert auslesen und woanders um 50 erhöhen
Keine neuen Beiträge Excel Formeln: Tabellenbläter Wert aufstellen 13 Gast 1133 15. Dez 2004, 17:40
webnaex Tabellenbläter Wert aufstellen
Keine neuen Beiträge Excel Formeln: Formel mit "festem" Wert kopieren 2 sebbi 1937 08. Dez 2004, 20:36
sebbi Formel mit "festem" Wert kopieren
Keine neuen Beiträge Excel Formeln: Zweit größte Zahl über Formel finden 2 Daniel 222 2472 02. Nov 2004, 18:34
Daniel 222 Zweit größte Zahl über Formel finden
Keine neuen Beiträge Excel Formeln: Abfrage ob ein gültiger Wert vorhanden ist 12 chinaman 2245 28. Okt 2004, 19:29
Gast Abfrage ob ein gültiger Wert vorhanden ist
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Microsoft Excel-Formeln