Dynamische bedingungen innerhalb von if then

hallo, ich bins wieder :smile:)
diesmal mit einer ganz anderenn frage (ja ja):
ich benötige eine if then anweisung in der die anzahl der bedingungen dynamsich sind:
also
r = ActiveCell.Range
If r = $A$1 or r = $A$2 or r = $A$3 etc then MsgBox(„Juhu“)
die anzahl wird erhöht oder veringert durch auswahl des users.
das heist ich muss wahrscheinlich ein datenfeld (array) anlegen in dem die werte gespeichert werden und dann über eine weiteren variablen innerhalb der if then anweisung abgeglichen werden, oder?
aber wie?

vielen dank für eure hilfe!!!

gruß
herpes

verbinden von string variablen
hai,
veruche das jetzt mit verbinden von werten über:

dyn_var = ActiveCell.Address & " or"
r = r & dyn_var
// tja, hier weiss ich nich weiter… wie verbindet mensch zwei strings?

if Active.Adress = r then MsgBox(„Schubiduh“)

bin ich wenigstens auf dem richtigen weg?
gruß
herpes

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

So geht’s
Hi Herpes,

also: Dein Ansatz mit den Strings funktioniert leider nicht, weil Du da Äpfel mit Birnen vergleichst: der String bleibt ein String und kann nicht mit der Adresse vergleichen werden. Excel ist auch nicht so nett und „decodiert“ den String wieder in eine If … or … etc. Kette.

Du musst anders vorgehen. Das mit dem Array ist schon gar keine schlechte Idee. Aber es geht noch eleganter und einfacher:

For Each zelle In Range(„A1“, „A10“)
If Selection.Address = zelle.Address Then MsgBox „JUHU“
Next

Das war’s schon. Mit der For…Each-Schleife kannst Du die einzelnen Zellen eines Bereichs durchgehen (hier A1-A10). Jede Zelladresse dieses Bereichs vergleichst Du jetzt mit der Adresse deiner Selection. Bei Übereinstimmung gibt’s ein „JUHU“.

Den Bereich kannst Du beliebig anpassen und hier eben auch dynamisch vorgehen, etwa

For Each Zelle in Range(„A“ & anfang, „A“ & ende)

wenn anfang zum Beispiel 5 und ende 20 ist, wird A5-A20 durchsucht.

Gruß

Sculpture

ja, fast!
hallöchen sculpture, bester!

danke für deine antwort, das zu allererst!
das problem bei dem lösungsvorschlag ist nur, das eben nicht
linear ausgewählt wird, sonedrn mal A1, F8, H7, 12G etc. also
absolut nicht in reihenfolge. und dann sollen auch wieder welche
aus der liste gelöcht werden können…
somit benötige ich ein datenfeld dessen datenliste beliebig erweiterbar ist…
geht das überhaupt?
gruß
herpes

ps: aber wie verbinde ich strings innerhalb einer variablen?

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Ok, dann halt so:
Hi Herpes,

neuer Versuch: ist zwar etwas komplizierter, kann aber beliebige Bereiche abdecken:

Dim c As New Collection

Sub test()
’ Zellen hinzufügen:
’ AddCell „“

AddCell „A1“
AddCell „B2“
AddCell „C3“

’ Test: Alle Zellen im Bereich Rot färben

For Each z In c
z.Interior.ColorIndex = 3
Next

’ Zellen löschen:
’ RemCell „“

RemCell „B2“

’ Test: Verbleibende Zellen Grün färben

For Each z In c
z.Interior.ColorIndex = 4
Next

’ Test: Aktive Zelle in Feld?

For Each z In c
If z.Address = Selection.Address Then MsgBox „JUHU“
Next

End Sub

Private Sub AddCell(r As String)
c.Add Range®, r
End Sub

Private Sub RemCell(r As String)
c.Remove r
End Sub

Probier’s mal aus. Zellen werden mit AddCell hinzugefügt und mit RemCell entfernt. Der Code oben soll Dir nur als Beispiel dienen, hoffe, Du kannst ihn Deinen Wünschen entsprechend anpassen.

Gruß

Sculpture

'hi sculpture…
prima, mal wieder…hab nur noch ein paar fragen:
': Dim c As New Collection
'okay, hier wird ein gruppe von objekten erstellt, der dann über AddCell(r As String) objekte hinzugfügt werden…(nur wann wird Addcell ausgeführt??)

Sub test()
AddCell „A1“
AddCell „B2“
AddCell „C3“

'warum werden hier die zellen aufgelistet? die sollen doch dynamisch hinzugefügt werden…

For Each z In c
z.Interior.ColorIndex = 3
Next

'wo kommt denn plötzlich z her? wo wird z gesetzt? bzw was zählt z?

Private Sub AddCell(r As String)'wodurch wird r „gefüllt“??
c.Add Range®, r ’
End Sub

das ist ganz schön schwierig, aber ich hoffe schaffe das…

gruß
herpes

Erklärung …
Hi Herpes,

sorry, wollte Dir keine Probleme mit dem Code bereiten. Der sollte nur als Beispiel dienen, wie man sowas machen kann!

': Dim c As New Collection
'okay, hier wird ein gruppe von objekten erstellt, der dann
über AddCell(r As String) objekte hinzugfügt werden…(nur
wann wird Addcell ausgeführt??)

Genau dann, wenn Du Zellen hinzufügen willst. Wenn Dein Bereich z.B. die Zellen „A1“, „B5“ und „X7“ enthält, musst Du AddCell 3x ausführen.

Sub test()
AddCell „A1“
AddCell „B2“
AddCell „C3“

'warum werden hier die zellen aufgelistet? die sollen doch
dynamisch hinzugefügt werden…

Dies ist ein Beispiel :wink:

For Each z In c
z.Interior.ColorIndex = 3
Next

'wo kommt denn plötzlich z her? wo wird z gesetzt? bzw was
zählt z?

Auch dies soll Dir nur die Vorgehensweise mit Collection-Objekten verdeutlichen und hat nichts mit Deinem Problem zu tun!!

Also herpes, ich schlage vor, Du mailst mir mal, was GENAU Du machen willst, wann Du welche Zellen warum hinzufügen willst, dann kann ich Dir wahrscheinlich viel besser helfen, v.a. was die dynamische Verwaltung dieser Collection betrifft.

Viele Grüße

Sculpture