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
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
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 :)
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
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?
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 :)
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
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

