| |
Visual-Basic EinsteigerDynamisches Array ohne Duplikate befüllen | | | Autor: El-torro | Datum: 01.11.17 12:12 |
| Hallo Zusammen,
ich möchte ein Dynamisches Array befüllen aber ohne Dublikate.
Das befüllen des Arrays habe ich hin bekommen, aber mit Dublikaten.
Ich habe eine Datenliste mit vielen Zeilen und er soll jede Zeile prüfen ob der Wert schon in dem Array vorhanden ist. Wenn ja, in die nächste Zeile springen, wenn nicht ins Array aufnehmen und dann die nächste Zeile prüfen.
Ich habe das ganze als Do loop Schleife gebaut.
Folgender Code klappt soweit mit Duplikate
Dim Stadt() As String
Dim gefunden As Integer 'Index vom Array
Dim znr As Integer
znr = 2 'weil Zeile 1 Überschrift ist
Do Until Range("A" & znr) = ""
ReDim Preserve Stadt(gefunden)
Stadt(gefunden) = Range("A" & znr)
gefunden = gefunden + 1
znr = znr + 1
Loop
Die Prüfung hatte ich so geschrieben, welche nicht funktioniert...
Do Until Range("A" & znr) = ""
If Range ("A" & znr) = Stadt (gefunden) then
ReDim Preserve Stadt(gefunden)
Stadt(gefunden) = Range("A" & znr)
gefunden = gefunden + 1
znr = znr + 1
End if
Loop
Kann mir da jemand weiter helfen?
Vielen Dank!
Beitrag wurde zuletzt am 01.11.17 um 12:23:14 editiert. | |
Re: Dynamisches Array ohne Duplikate befüllen | | | Autor: effeff | Datum: 01.11.17 15:39 |
| Wenn Du nicht zu viele Begriffe hast, die Du überprüfen möchtest:
Erstelle eine String-Variable. Bei jedem Städtenamen prüfst Du, ob dieser bereits "instr" in dieser Variablen enthalten ist. Wenn nicht, dann füge ihn der Variablen hinzu und füge ein Trennzeichen an. Wenn Du alle Zeilen Deiner Excel-Tabelle durch bist, löscht du das letzte Zeichen dieses Strings und splittest den String in ein Array auf.
Einfaches Beispiel:
Sub juhu()
Dim Var As String
Dim Stadtname As String
Var = ""
Stadtname = "Leipzig"
Var = StadtnameEnthalten(Stadtname, Var)
Stadtname = "München"
Var = StadtnameEnthalten(Stadtname, Var)
Stadtname = "Berlin"
Var = StadtnameEnthalten(Stadtname, Var)
Stadtname = "Hamburg"
Var = StadtnameEnthalten(Stadtname, Var)
Var = StadtnameEnthalten(Stadtname, Var)
Stadtname = "München"
Var = Left(Var, Len(Var) - 1)
Dim arr() As String
arr = Split(Var, ",")
End Sub
Private Function StadtnameEnthalten(ByVal Stadtname As String, ByVal Var As _
String) As String
If InStr(1, Var, Stadtname) <= 0 Then
StadtnameEnthalten = Var & Stadtname & ","
Else
StadtnameEnthalten = Var
End If
End Function EALA FREYA FRESENA | |
Re: Dynamisches Array ohne Duplikate befüllen - Lösung mit Array | | | Autor: effeff | Datum: 01.11.17 16:55 |
| Hier ist noch eine Lösung, die nur per Array arbeitet:
Dim arr() As String
Sub StadtnamenAuswerten()
ReDim Preserve arr(0)
Dim Stadtname As String
Dim i As Integer
i = 0
Stadtname = "Leipzig"
StadtnameHinzufuegen (Stadtname)
Stadtname = "München"
StadtnameHinzufuegen (Stadtname)
Stadtname = "Berlin"
StadtnameHinzufuegen (Stadtname)
Stadtname = "Hamburg"
StadtnameHinzufuegen (Stadtname)
Stadtname = "München"
StadtnameHinzufuegen (Stadtname)
Stadtname = "Leipzig"
StadtnameHinzufuegen (Stadtname)
For i = 0 To UBound(arr()) - 1
MsgBox (arr(i))
Next
End Sub
Private Sub StadtnameHinzufuegen(ByVal Stadtname As String)
If Not StadtnameEnthaltenArr(Stadtname) Then
ReDim Preserve arr(UBound(arr()) + 1)
arr(UBound(arr()) - 1) = Stadtname
End If
End Sub
Private Function StadtnameEnthaltenArr(ByVal Stadtname As String) As Boolean
Dim i As Integer
Dim gefunden As Boolean
For i = 0 To UBound(arr()) - 1
If arr(i) = Stadtname Then
StadtnameEnthaltenArr = True
Exit For
End If
Next i
End Function EALA FREYA FRESENA
Beitrag wurde zuletzt am 01.11.17 um 16:56:16 editiert. | |
Re: Dynamisches Array ohne Duplikate befüllen | | | Autor: Blackbox | Datum: 01.11.17 17:16 |
| Hallo,
gerade für so etwas ist eine Dollcetion genau das Richtige!
Private oCol as Collection
Dim i As Long
Dim r As Excel.Range
Set oCol = New Collection
ActiveSheet.Columns(1).Select
On Error Resume Next
For Each r IN Application.Selection
i = i + 1
If i > 2 Then
IF i > ActiveSheet.UsedRange.Rows.Count Then Exit For
oCol.Add r.Value, r.Value
End If
End If
Next
On Error Goto 0 Die Collection kann man wie ein Array auslesen: oCol(1) ... oder oCol.Item(1) ...
wie es beliebt. | |
Re: Dynamisches Array ohne Duplikate befüllen | | | Autor: Rippler | Datum: 01.11.17 18:10 |
| Dafür gibt es in EXCEL eine Methode:
https://msdn.microsoft.com/de-de/vba/excel-vba/articles/range-removeduplicates-method-excel
| |
Re: Dynamisches Array ohne Duplikate befüllen | | | Autor: Blackbox | Datum: 02.11.17 21:53 |
| Hallo,
danach wurde aber nicht gefragt, sondern nach VBA-Code. | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats sevGraph (VB/VBA)
Grafische Auswertungen
Präsentieren Sie Ihre Daten mit wenig Aufwand in grafischer Form. sevGraph unterstützt hierbei Balken-, Linien- und Stapel-Diagramme (Stacked Bars), sowie 2D- und 3D-Tortendiagramme und arbeitet vollständig datenbankunabhängig! Weitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|