Hallo zurück,
ich danke dir schonmal für deine Antwort. Mir ist es inzwischen gelungen die Suche umzusetzen. Für eventuelle Mitleser poste ich ein paar Tips und entscheidene Code Schnipsel. Bitte immer dran denken, dass das ganze ohne VBA Vorkenntnisse entstanden ist und z.B. die Array Längen immernoch Hardcoded sind und einige andere Sachen sind ebenfalls "unschön". ABER: Es tut das was es soll.
Ich habe Daten in einer Exceltabelle (zurzeit<90 Zeilen). Diese werden in einen Array eingelesen, für meine Zwecke nur die Städte mit den dazugehörigen Typ. Die nächsten 6 Spalten des Arrays (also nach Stadt und Typ) sind Boolean Werte wobei jede Spalte einen Typ repräsentiert. Mit einer If abfrage habe ich dann jeweils einen Wert auf True gesetzt abhängig vom Typ. Später dann alle doppelten Städte zusammengefasst und alle True Werte übernommen. So ist eine Art Suchcode entstanden: (010101) In dem Array Test habe ich auf 6 Stellen die Werte der Checkboxen übernommen
Die Eigentliche Suchabfrage war dann doch recht einfach:
For d = 1 To 100 'wie gesagt alles hardcoded, wird noch verbessert wenn
' Zeit ist/schlechter Stil
For i = 0 To 5
If Staedte(d, i + 3) <= Test(i) Then
Else: GoTo NaechsteZeile
End If
Next i
ErgebnisZeile(y) = d
y = y + 1
NaechsteZeile:
Next d Verbesserungsvorschläge etc. nehme ich gerne an. Ich hoffe auf weitere Arbeitsaufträge in Richtung VBA, werde also bestimmt bald nochmal eine Frage haben. Bis dahin,
Lg
David
Andere Codeschnipsel für Interessierte:
Einlesen des Tabellenblatts in den Daten Array
For d = 1 To 100
Daten(d, 1) = Tabelle1.Cells(d, 7).Value
Daten(d, 2) = Tabelle1.Cells(d, 13).Value
'MsgBox Daten(d, 1) & " " & Daten(d, 2)
Next d Hier der Teil in dem ich meinen Suchcode erstelle, Zunächst wird geprüft ob identische Einträge vorhanden sind. Also 1 Stadt mehrmals mit dem gleichen Typ gelistet ist und doppelte Einträge werden durch LEER im Stadtfeld ersetzt,anschließend werden die Werte für die Suchcodes ausgelesen.
For d = 1 To 100
For e = 1 To 100
If e <> d Then
If Daten(d, 1) = Daten(e, 1) And Daten(d, 2) = Daten(e, 2) Then
Daten(e, 1) = "LEER"
Daten(e, 2) = "LEER"
End If
End If
Next e
If Daten(d, 2) = "TYP1" Then
Daten(d, 3) = True
Else: Daten(d, 3) = False
End If
If Daten(d, 2) = "Typ2" Then
Daten(d, 4) = True
Else: Daten(d, 4) = False
End If
If Daten(d, 2) = "Typ3" Then
Daten(d, 5) = True
Else: Daten(d, 5) = False
End If
If Daten(d, 2) = "Typ4" Then
Daten(d, 6) = True
Else: Daten(d, 6) = False
End If
If Daten(d, 2) = "Typ5" Then
Daten(d, 7) = True
Else: Daten(d, 7) = False
End If
If Daten(d, 2) = "Typ6" Then
Daten(d, 8) = True
Else: Daten(d, 8) = False
End If
Next d Hier werden dann aus merhern Einträgen für eine Stadt ein Eintrag.
z.B. 10000 und 001000 zu 101000
Schöner wäre direkt keine leeren Felder zu haben, da hab ich noch was zu tun.
For d = 1 To 100
For x = 1 To 100 ' Doppelte Einträge finden
If Daten(x, 1) = Daten(d, 1) And d <> x Then '
If Daten(x, 1) = "LEER" Then GoTo LeeresFeld
For e = 3 To 8 'Alle Trues Hochkopieren in
' ersten Treffer
If Daten(x, e) = True Then '
Daten(d, e) = True '
End If '
Next e
Daten(x, 1) = "LEER"
End If
LeeresFeld:
Next x
If Daten(d, 1) <> "LEER" Then
z = 1
For z = 1 To 8
HilfsDaten(w, z) = Daten(d, z)
Next z
w = w + 1
End If
Next d
Beitrag wurde zuletzt am 15.11.14 um 10:16:32 editiert. |