Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Zufällige sortierung einer Vorgegebenen Liste





Frage

Hallo Ich würde gerne aus einer Spalte, die mit Namen gefüllt ist kopieren und diese dann zufällig sortieren lassen. ist das irgendwie möglich? wäre über Hilfe sehr erfreut.

Antwort 1 von cy

keiner eine ahnung?

Antwort 2 von nighty

hi cy :)

vertauscht von einem MARKIERTEN BEREICH die zellen bzw. wuerfelt sie durcheinander :)

gruss nighty

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

rem hier sind 100 zweier zellenwechsel eingestellt,beliebig zu veraendern.

For t = 1 To 100
a0% = Asc(Mid$(b$(1), 1, 1))
a2% = a0% - 65
a1% = Int(Rnd * a2%) + 66
k1% = a1%
a0% = Val(Mid$(b$(1), 2, Len(b$(1))))
a3% = Val(Mid$(b$(0), 2, Len(b$(0))))
a2% = a0% - a3%
a1% = Int(Rnd * a2%) + a3%
k2% = a1%
a0% = Asc(Mid$(b$(1), 1, 1))
a2% = a0% - 65
a1% = Int(Rnd * a2%) + 66
k3% = a1%
a0% = Val(Mid$(b$(1), 2, Len(b$(1))))
a3% = Val(Mid$(b$(0), 2, Len(b$(0))))
a2% = a0% - a3%
a1% = Int(Rnd * a2%) + a3%
k4% = a1%
a1a$ = Range(Chr$(k1%) & k2%)
a2a$ = Range(Chr$(k3%) & k4%)
Range(Chr$(k1%) & k2%) = a2a$
Range(Chr$(k3%) & k4%) = a1a$
Next t
End Sub


Antwort 3 von nighty

hi alle

ein wenig optimiert :)
gueltig sind markierungen von a-z und zeilen 1 bis ende.

gruss nighty

Sub Makro1()
ScreenUpdating = False
Randomize Timer
Dim b$(2)
g% = Len(ActiveWindow.RangeSelection.Address)
b1$ = ActiveWindow.RangeSelection.Address
For e% = 1 To g%
If Mid$(b1$, e%, 1) = ":" Then
w = w + 1
e% = e% + 1
End If
If Mid$(b1$, e%, 1) <> "$" Then
b$(w) = b$(w) + Mid$(b1$, e%, 1)
End If
Next e%
hj0% = Asc(Mid$(b$(1), 1, 1)) - Asc(Mid$(b$(0), 1, 1)) + 1
hj1% = (Val(Mid$(b$(1), 2, Len(b$(1)))) + 1 - Val(Mid$(b$(0), 2, Len(b$(0)))))
fg = hj0% * hj1% * 2
For t = 1 To hj0% * hj1% * 2
a0% = Asc(Mid$(b$(1), 1, 1))
a2% = a0% - 65
a1% = Int(Rnd * a2%) + 66
k1% = a1%
a0% = Val(Mid$(b$(1), 2, Len(b$(1))))
a3% = Val(Mid$(b$(0), 2, Len(b$(0))))
a2% = a0% - a3%
a1% = Int(Rnd * a2%) + a3%
k2% = a1%
a0% = Asc(Mid$(b$(1), 1, 1))
a2% = a0% - 65
a1% = Int(Rnd * a2%) + 66
k3% = a1%
a0% = Val(Mid$(b$(1), 2, Len(b$(1))))
a3% = Val(Mid$(b$(0), 2, Len(b$(0))))
a2% = a0% - a3%
a1% = Int(Rnd * a2%) + a3% + 1
k4% = a1%
a1a$ = Range(Chr$(k1%) & k2%)
a2a$ = Range(Chr$(k3%) & k4%)
Range(Chr$(k1%) & k2%) = a2a$
Range(Chr$(k3%) & k4%) = a1a$
Next t
ScreenUpdating = True
End Sub

Antwort 4 von cy

ohja vielen dank, aber nun hab ich das ganze mal in das Visual Basic kopiert aber nun sagt er immer beim test des Makros "Laufzeitfehler 5".

mach ich da was falsch?

PS: Ich hatte mit Makros noch nicht wirklich zutun. weis grad wie man den Editor aufruft :)

Antwort 5 von nighty

hi cy

es darf keine zelle ueber z angewaehlt werden
und es muss eine markierung bestehen.

gruss nighty

Antwort 6 von cy

hi.

vielen dank jetzt funktioniert es. wirklich vielen vielen dank. nur noch eine frage. ist es irgendwie möglich, das ich das mit einer tastenkombination oder über einen menüpunkt durchführen kann?

Antwort 7 von nighty

hi cy

extras/makro/makros/makro anwaehlen

dort optionen anwaehlen und einen buchstaben eingeben.ist dann mit strg und buchstabe aufrufbar.

gruss nighty :)

Antwort 8 von nighty

hi cy und all die anderen

hatte sich doch noch ein fehler eingeschmuggelt,diesmal ausgiebig getestet :(.

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