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

Werte in Array schreiben: Ich brauche Hilfe

Werte in Array schreiben: Ich brauche Hilfe
Holger,
Guten Morgen liebes Forum,
heute steht mal wieder das unleidige Thema Array an meiner Tagesordnung.
Stück für Stück nähere ich mich an. In diesem Fall schleife ich durch einen Rangebereich.
Hierbei prüfe ich ob der Zellwert unter dem aktuellen unterschiedlich ist oder nicht.
Sinn und Zweck der Übung: Nur die eindeutigen Werte herausfinden.
Wenn ich einen neuen Wert gefunden habe, will ich den in ein Array schreiben.
Nur wie kann ich prüfen ob ich den Wert schon mal in ein Array geschrieben habe,
da ich in den Array ja nur eindeutige Werte haben möchte.
Außerdem weiß ich nicht wie ich mein Array bei 1 beginnen lassen kann
Hier mal mein Ansatz, in diesem würden aber alle vorhandenen Werte n-fach vorkommen.
Sub Ansatz
Dim ArrValues(1 to 10) as variant
Dim lngA as long
lngA = 1
For Each RNGCELL In rngAge
If Cells(RNGCELL.Row, intOPENOSCol).Offset(1, 0)  Cells(RNGCELL.Row, intOPENOSCol) Then
lngA = lngA +1
arrvalues(lngA) = UCase(Cells(RNGCELL.Row, intOPENOSCol))
next RNGCELL
End Sub

Such mal nach Scripting.Dictionary im Archiv oT
16.02.2011 10:28:56
Bertram
Habe da aber ein Syntax Problem
16.02.2011 10:48:58
Holger,
Hallo Bertram,
ok, ich habe danach gesucht, gefunden und es eingebaut.
Jetzt weiß ich nicht, wie ich dieses Object füllen muss, damit der Wert neben dem Array auch in das Object geschrieben wird. Denn wenn es dort nicht steht, kriege ich ja doch immer wieder diesselben Werte.
Hier mein Code, kannst du mir bitte weiterhelfen?
        If Cells(RNGCELL.Row, intOPENOSCol).Offset(1, 0)  Cells(RNGCELL.Row, intOPENOSCol)  _
Then
If Not objSCR.exists(UCase(Cells(RNGCELL.Row, intOPENOSCol))) Then
objSCR = ?
arrFeature(lngSCR) = UCase(Cells(RNGCELL.Row, intOPENOSCol))
lngSCR = lngSCR + 1
End If
end if

Anzeige
Evtl. so
16.02.2011 11:00:45
Bertram
Hallo Holger,
probier's mal so:
Public Sub Ansatz()
Dim ArrValues As Object
Dim rngAge As Range
Dim RNGCELL As Range
Set rngAge = Range("B1:B10")
Set ArrValues = CreateObject("Scripting.Dictionary")
For Each RNGCELL In rngAge
ArrValues(RNGCELL.Value) = 0 'Nur Unikate sammeln
Next
End Sub

Gruß
Bertram
Habe auch einen Ansatz
16.02.2011 11:09:44
Holger,
Hallo Bertram,
was hälst du davon?
objSCR.Add UCase(Cells(RNGCELL.Row, intOPENOSCol)), 1

So habe ich es nun gelöst
16.02.2011 14:24:48
Holger,
Hallo Bertram,
Vielen Dank für deinen Tipp. So sieht es nun aus und so klappt es bislang auch.
Die Str Variable fülle ich, weil ich später in einer MsgBox anzeige, welche Unikate
ermittelt wurden.
Gruß+Dank
Holger
Sub So
If Cells(RNGCELL.Row, intFeatureCol).Offset(1, 0)  Cells(RNGCELL.Row, intFeatureCol)  _
Then
If Not objSCR.exists(UCase(Cells(RNGCELL.Row, intFeatureCol))) Then
strFeature = strFeature & UCase(Cells(RNGCELL.Row, intFeatureCol)) & Deli
objSCR.Add UCase(Cells(RNGCELL.Row, intFeatureCol)), 1
arrFeature(lngSCR) = UCase(Cells(RNGCELL.Row, intFeatureCol))
lngSCR = lngSCR + 1
End If
End If
End Sub

Anzeige
AW: Werte in Array schreiben: Ich brauche Hilfe
16.02.2011 11:40:33
Beverly
Hi Holger,
eine prinzipielle Möglichkeit ohne Dictionary.Object:
Sub ArrayUnikate()
ReDim arrUnikate(0)
Dim lngZeile As Long
Dim lngVorhanden As Long
lngZeile = 1
arrUnikate(0) = Cells(lngZeile, 1)
For lngZeile = 2 To 12
On Error Resume Next
lngVorhanden = Application.Match(Cells(lngZeile, 1), arrUnikate(), 0)
On Error GoTo 0
If lngVorhanden = 0 And Cells(lngZeile, 1)  Cells(1, 1) Then
ReDim Preserve arrUnikate(0 To UBound(arrUnikate()) + 1)
arrUnikate(UBound(arrUnikate())) = Cells(lngZeile, 1)
End If
lngVorhanden = 0
Next lngZeile
End Sub



Anzeige
AW: Werte in Array schreiben: Ich brauche Hilfe
16.02.2011 14:23:15
Holger,
Hallo karin,
da finde ich den Ansatz von Kai eleganter Arrays Redim, soweit bin ich noch nicht ;).
Mir ist immer wichtig, den Code 100% zu verstehen.
Trotzdem Vielen Dank für deine Hilfe, deinen Code habe ich aufgehoben, denn
mit Sicherheit werde ich ihn an anderer Stelle einsetzen.
Gruß+Dank
Holger
AW: Werte in Array schreiben: Ich brauche Hilfe
16.02.2011 15:23:28
Beverly
Hi Holger,
was hat das Verstehen eines Codes mit Eleganz eines Codes zu tun? ;)
Korrekter Weise müsste mein Code noch vor der ReDim-Anweisung ergänzt werden um diese (erste) Code-Zeile, damit das Array auch korrekt deklariert ist:
Dim arrUnikate()

Die Redim-Anweisung legt die Größe des dynamischen Arrays fest (bzw. verändert sie) und da zuerst nur 1 Wert (aus A1) eingetragen werden soll, ist nur 1 Feld erforderlich - deshalb
ReDim  arrUnikate(0)

0 deshalb, weil normalerweise die Feldzählung in einem Array immer mit 0 beginnt, es sei denn, es wurde mittels
Option Base 1

explizit festgelegt, dass es mit Feld 1 beginnt.
Die Zeile
lngVorhanden = Application.Match(Cells(lngZeile, 1), arrUnikate(), 0)

stellt fest, an welcher Position im Array sich der Inhalt der Zelle Cells(lngZeile, 1) befindet - das würde auf einen Fehler hinauslaufen, wenn der Wert nicht enthalten ist, deshalb On Error Resume Next vor dieser Zeile und das Zurücksetzen der Fehlerbehandlung mittels On Error Goto 0 nach dieser "Prüf"-Zeile.
Ist der Wert nicht enthalten, bleibt die Variable lngVorhanden 0 - also If lngVorhanden = 0 .... Da aber lngVorhanden auch 0 ergibt wenn der Zellwert = A1 ist (steht ja im 0. Feld des Arrays), muss noch geprüft werden, ob der Zellwert A1 ist - folglich
If lngVorhanden = 0 And Cells(lngZeile, 1)  Cells(1, 1) Then

Ist diese Bedingung erfüllt und somit der Wert aus Cells(lngZeile, 1) tatsächlich nicht enthalten, wird das Array um 1 erweitert unter Beibehaltung der bereits vorhandenen Einträge:
ReDim Preserve arrUnikate(0 To UBound(arrUnikate()) + 1)

Anschließend wird der Wert in das oberste Feld des um 1 Feld erweiterten Arrays eingeschrieben.
Ich hoffe, damit ist etwas klarer geworden, was der Code macht.


Anzeige
AW: Erinnerung
16.02.2011 14:21:17
Holger,
Ist erledigt ;)
Du bist ja sehr hartnäckig, aber andererseits finde ich es auch schade, wenn
Postings unbeantwortet bleiben. Passiert mir aber auch sehr oft und manchmal
hat man auch einfach keine Zeit oder es kommt etwas dazwischen.
Anzeige
Man hat ohnehin das Gefühl, Erich, dass er sich...
16.02.2011 19:01:37
Luc:-?
…Älteres gar nicht mehr ansieht!
Gruß Luc :-?
@Luc:-? Danke für dein Mit-Gefühl! :-)
16.02.2011 19:06:31
Erich
Das stimmt nicht! ;)
16.02.2011 21:09:49
Holger,
Hi Luc,
das ist nicht wahr, wie du siehst ;). Zumindest nicht immer ;)))
In der Tat geht es manchmal aber so hektisch zu, dass ich selber etwas den Überblick verliere.
Die Anforderungen sich auch manchmal fies. Ich kriege einen Auftrag, überlege wie ich es mache
und plötzlich kommt noch eine "Kleinigkeit" dazu und ich kann alles über den haufen werfen und von vorne anfangen. Sprich, ich bin immer wieder etwas überfordert mit den Aufgaben, aber
da muss ich durch. Ich lese Bücher, nur leider fehlt immer ein Detail für mein aktuelles Problem, da bin ich froh über dieses Forum.
Oder ich merke erst später, dass ich mich in einer Sackgasse befinde. Aufgrund fehlender Erfahrung passiert das öfter.
Aber ich gebe mir wirklich Mühe, immer alles zu beantworten und es gibt nicht wenige, die hier
gar nicht auf einen Vorschlag antworten und man hört nie wieder etwas.
Schönen Abend und Gruß
Holger
Anzeige
Letzteres stimmt leider! Sterben wahrscheinl...
16.02.2011 22:06:36
Luc:-?
…alle jung bzw leiden unter Amnesie, Holger…
Aber ich sehe gleich mal nach, ob du dir Älteres auch mehrmals ansiehst… ;-)
Gruß Luc :-?
JETZT WEISS ICH AUCH WARUM
17.02.2011 10:05:16
Holger,
Hi Luc,
dazu eine Schwierigkeit:
Wenn ich unter 'Deine Beiträge" schaue, sehe ich ja diese.
Aber da kann ich dann nicht antworten.
Über die Forumsliste zu dem Beitrag zu kommen, ist aber sehr umständlich.
Gibt es dafür eine Lösung?
Gib deinen Nickname in <<Forumsliste an! orT
17.02.2011 10:49:56
Luc:-?
Gruß Luc :-?
Aha! Wieder erwischt! Gruß owT
17.02.2011 00:20:09
Luc:-?
:-?

314 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige