Zufällige Zelle in bestimmtem Bereich auswählen

Hi zusammen,

ich habe einen sich immer mal wieder ändernden Bereich an Zellen in Excel der gemeinsam hat, das alle Zellen in diesem Bereich den colorindex 35 haben. (Dieser Bereich ist kein Rechteck.)
Innerhalb dieses Bereiches soll nun eine zufällige Zelle ausgewählt werde.

Wär ne prima Sache wenn mir jemand helfen könnte, da meine Sub aus dem Grund dass das kein Rechteck ist immer wieder vorn Baum fährt.

ich habe einen sich immer mal wieder ändernden Bereich an
Zellen in Excel der gemeinsam hat, das alle Zellen in diesem
Bereich den colorindex 35 haben. (Dieser Bereich ist kein
Rechteck.)
Innerhalb dieses Bereiches soll nun eine zufällige Zelle
ausgewählt werde.

Hallo Dr,

Option Explicit
'
Sub tt()
'ggfs. Ber() anpassen
Dim Zelle As Range, B As Integer, Ber(1000) As Range, Zuf As Range
For Each Zelle In ActiveSheet.UsedRange
 If Zelle.Interior.ColorIndex = 35 Then
 B = B + 1
 Set Ber(B) = Zelle
 End If
Next Zelle
Set Zuf = Ber(Int(Rnd() \* B + 1))
MsgBox Zuf.Address
MsgBox Zuf.Value
End Sub

Gruß
Reinhard

Jo Reinhard

versteh zwar nicht warum da ne 1000 in Klammern ist, aber egal -> funzt wie geschmiert hier alles, danke

Kann man irgendwie die Funktion beschleunigen?

Ich bastel grade Snake und diese Funktion brauch ich immer wenn die Schlange was mampft, damit irgendwo was neues zu mampfen hinkommt. Allerdings bleibt die jetzt immer kurz stehen wenn die was mampft was schon ein bischen uncool ist.

Jo Reinhard

versteh zwar nicht warum da ne 1000 in Klammern ist, aber egal
-> funzt wie geschmiert hier alles, danke

Hallo Dr.,

dann wird’s aber höchste Zeit daß du dich schlau machst was das bedeutet.

Ber1, Ber2, Ber3, usw sind normale Variablen, also eine variable= 1 Wert.

Jetzt hast du aber u.U. eine große Anzahl von Daten die du in eine Variable schreiben willst.
Dann definiert man ein eindimensionales Datenfeld.
Mit Ber(1000)
D.h., damit habe ich 1001 Variablen angelegt.
(1001 weil von Index 0 bis Index 1000 gezählt wird)

Mit „anpassen“ meinte ich, wenn du abschätzen kannst, daß es mehr als 1000 werden, schreibste halt Ber(4711), Ber(100000)

„Ansprechen“, also auslesen, Befüllen kann man das dann über den Index.
Msgbox Ber(512)

Lese das halt in F1 oder in einem VBa-buch nach.

Gruß
Reinhard

Hallo Dr.,

man kann grundsätzlich schauen ob
Sub tt()
'ggfs. Ber() anpassen
Dim Zelle As Range, B As Integer, Ber(1000) As Range, Zuf As Range
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False

’ Code

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub

etwas bringt, was ich hier aber bezweifle. WAs den Code so langsam macht ist, er muß alle Zellen einzeln „abklappern“, das hält auf.

Man müßte die Codelogik/Ablauf verändern.

Ich weiß ja nicht wie der Code aussieht der Schlange und das Spielfeld.
Man könnte Ber(1000) und B als globale Variablen deklarieren.
Dann kann man sie z.B. bei Öffnung der Mappe befüllen.

Kommen dann im Spiel durch was auch immer noch bunte Zellen dazu, muß man in dem Moment
b=b+1
set ber(b)=zelle
schreiben, das geht fix.

Braucht man dann die Zufallszelle
Set Zuf = Ber(Int(Rnd() * B + 1))
geht auch fix.

Denkbar wäre auch der Einsatz von „specialcells“. Schau dazu in F1 nach.
D.h. in dem Moment wo du die Zelle färben läßt weist du ihr irgendwas zu was specialcells rausfiltern kann. Dann entfällt auch die „langsame“ For-Schleife.

Es gibt noch andere mögliche Vorgehensweisen, aber dazu müßte man den Komplettcode kennen und das kann dann auch schnell zuiel werden für den Sinn von w-w-w.

Gruß
Reinhard

ich hab sone Starttaste, über die lass ich jetzt einfach dieses nach colorindex 35 absuchen laufen. ansonsten lass ich das so, kommt zwar ab und an vor das neues Essen direkt auf der Schlange selber landet (colorindex 4), finde das allerdings nicht weiter tragisch.
Hast mir mal wieder sehr geholfen, dankeschön.

Hallo Rolf,

die arme Schlange, erst gönnste ihr nicht mal bisschen Zeit um das Essen in Ruhe zu genießen, jetzt muß sie es ruckzuck runterschligen, kriegt dann auch noch gelegentlich das Essen über den Kopp gekippt.
Tsts, ist ja schon was für den Tierschutz, werde da sofort Meldung machen.
*kicher*

Wenn du magst, kannste ja die mappe mal hochladen mit file-upload, s. FAQ:2606
Dann schau ich mal was man da verbessern könnte.
Aber ohne Gewähr. Wenn mir das als zuviel Arbeit erscheint mich da in den Ablauf, Code einzuarbeiten, dann mache ich nix.

Und, dieses Schlange-Spiel ist ja uralt. Ich glaub jedes handy hat das schon mitbei.
Und egal wie clever du in Vba programmiert hast in ezug auf Schnelligkeit, Vba ist ein Interpreter, kein Kompiler.
Und Kompiler sind naturgegeben halt schneller als Interpreter. D.h. Kompilerprogramme laufen dann bei hohem Spieltempo viel aufs Bild bezogen, ruckfreier ab.

Gruß
Reinhard

jo mitlerweilse kriegt die snake das essen nicht mehr über die Rübe.

ich programier das erstmal auf eigene Faust soweit wie ich komme dann kann ichs mal da hochladen und du kannst mal nen Blick drüber werfen was man da besser machen könnte etc.
mach das ja zum lernen und da wärs sinnlos wenn ich sage hier mach du mal alles ^^