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
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
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

