vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Top-Preis! AP-Access-Tools-CD Volume 1  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Visual-Basic Einsteiger
Dynamisches 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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

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