Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Zellinhalte untereinander mischen????





Frage

Hi, ich hab mal eine Frage (was auch sonst): Kann man per Makro (oder sonst) die Inhalte einer Gruppe von Zellen mischen? Soll heißen ich hab 5 Zellen, A - B - C - D - E. Ist es möglich, das diese Inhalte untereinander getauscht werden bzw. sich der Zellinhalt per Zufallsprinzip verändert, jedoch keine doppelten Inhalte vorkommen??? --> B - D - A - E - C Ich will nämlich sowas wie eine Bingotabelle basteln, 5x5 Zellen groß. Damit nicht jeder das selbe Spielbrett hat, sollen die Inhalte gemischt werden. Am besten wäre, wenn der Zelleninhalt auf einem separaten Tabellenblatt steht, in der Haupttabelle sind dementsprechende Verweise drin, die dann gemischt werden, so das die Tabelle nachher bunt durcheinander ist! Gibts da einen Makrobefehl zu (shuffle, random oder so??)??? Ich weiß, ist 'ne komische Frage, aber vielleicht hat ja einer 'ne Lösung. MfG

Antwort 1 von nighty

hi DiogenesXL :)

wuerfelt eine bestehende markierung durcheinander :)

erlaubt ist spalte a-z und zeile bis ende :)

gruss nighty

Sub Makro1()
ScreenUpdating = False
Randomize Timer
Dim b$(2)
adress$ = ActiveWindow.RangeSelection.Address
For zeichenzaehler% = 1 To Len(ActiveWindow.RangeSelection.Address)
If Mid$(adress$, zeichenzaehler%, 1) = ":" Then
w = w + 1
zeichenzaehler% = zeichenzaehler% + 1
End If
If Mid$(adress$, zeichenzaehler%, 1) <> "$" Then
b$(w) = b$(w) + Mid$(adress$, zeichenzaehler%, 1)
End If
Next zeichenzaehler%

rem hier wo die hundert steht ist nach belieben die anzahl des zellentausches vorzugegeben

For zellentausch% = 1 To 100

erstezeile% = Int(Rnd * (Val(Mid$(b$(1), 2, Len(b$(1)))) + 1 - Val(Mid$(b$(0), 2, Len(b$(0)))))) + Val(Mid$(b$(0), 2, Len(b$(0))))
erstespalte$ = Chr$(Int(Rnd * (Asc(Mid$(b$(1), 1, 1)) + 1 - Asc(Mid$(b$(0), 1, 1)))) + Asc(Mid$(b$(0), 1, 1)))
zweitezeile% = Int(Rnd * (Val(Mid$(b$(1), 2, Len(b$(1)))) + 1 - Val(Mid$(b$(0), 2, Len(b$(0)))))) + Val(Mid$(b$(0), 2, Len(b$(0))))
zweitespalte$ = Chr$(Int(Rnd * (Asc(Mid$(b$(1), 1, 1)) + 1 - Asc(Mid$(b$(0), 1, 1)))) + Asc(Mid$(b$(0), 1, 1)))
lager1$ = Range(erstespalte$ & erstezeile%)
lager2$ = Range(zweitespalte$ & zweitezeile%)
Range(erstespalte$ & erstezeile%) = lager2$
Range(zweitespalte$ & zweitezeile%) = lager1$
Next zellentausch%
ScreenUpdating = True
End Sub


Antwort 2 von nighty

hi DiogenesXL :)

oder so,vielleicht fuer dich besser einzubauen mit festen werten,zur zeit B3-B7.

gruss nighty

Sub Makro1()
ScreenUpdating = False
Randomize Timer
Dim b$(2)

rem HIER DEINEN BEREICH FESTLEGEN :)

b$(0) = "B3"
b$(1) = "B7"

For zellentausch% = 1 To 100
erstezeile% = Int(Rnd * (Val(Mid$(b$(1), 2, Len(b$(1)))) + 1 - Val(Mid$(b$(0), 2, Len(b$(0)))))) + Val(Mid$(b$(0), 2, Len(b$(0))))
erstespalte$ = Chr$(Int(Rnd * (Asc(Mid$(b$(1), 1, 1)) + 1 - Asc(Mid$(b$(0), 1, 1)))) + Asc(Mid$(b$(0), 1, 1)))
zweitezeile% = Int(Rnd * (Val(Mid$(b$(1), 2, Len(b$(1)))) + 1 - Val(Mid$(b$(0), 2, Len(b$(0)))))) + Val(Mid$(b$(0), 2, Len(b$(0))))
zweitespalte$ = Chr$(Int(Rnd * (Asc(Mid$(b$(1), 1, 1)) + 1 - Asc(Mid$(b$(0), 1, 1)))) + Asc(Mid$(b$(0), 1, 1)))
lager1$ = Range(erstespalte$ & erstezeile%)
lager2$ = Range(zweitespalte$ & zweitezeile%)
Range(erstespalte$ & erstezeile%) = lager2$
Range(zweitespalte$ & zweitezeile%) = lager1$
Next zellentausch%
ScreenUpdating = True
End Sub