Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Code anpassen

Forumthread: Code anpassen

Code anpassen
29.08.2024 14:54:18
Fritz_W
Hallo Forumsbesucher
mit dem nachfolgenden Code sortiere ich die Zellwerte in einem vorgegebenen Zellbereich.
Gerne wrde ich aber den Zellbereich wie folgt variabel gestalten und zwar AH1 bis Zeile, die dem Zellinhalt von Zelle AI1 entspricht. Steht in AI1 z.B. die Zahl 40, sollte AH1 bis AH40 per Zufall sortiert werden.

Vielen Dank fr eure Hilfe.

mfg
Fritz

Hier der aktuelle Code:
Public Sub zufallsbereich()
Const strrange As String = "AH1:AH30"
Dim intindex As Integer, intrnd As Integer
Dim vararray As Variant
vararray = Range(strrange)
For intindex = UBound(vararray) To 1 Step -1
Randomize Timer
intrnd = Int((intindex * Rnd) + 1)
strtemp1 = vararray(intrnd, 1)
vararray(intrnd, 1) = vararray(intindex, 1)
vararray(intindex, 1) = strtemp1
Next
Range(strrange) = vararray
End Sub
Anzeige

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Code anpassen
29.08.2024 15:02:14
peter
Hallo

* Randomize sollte nur einmal aufgerufen (daher ausserhalb der Schleife)
* Dim strrange As String
strrange = "AH1:AH" & Range("AI").Value

Der Rest bleibt gelich.

Peter
AW: Code anpassen
29.08.2024 15:06:21
Yal
Hallo Fritz,

zwar gibt es diese Empfehlung, dass Variablen mit dem Variablentyp-Präfix anfangen sollten, aber bei einem so kurzen Skript halte ich den Prinzip "je kurzer die Variablenname, desto lesbarer der Code" für zielführender. Nur meine Meinung.
Randomize muss nur einmal gerufen werden, muss daher nicht Teil der For-Schleife sein.

Public Sub zufallsbereich()

Dim Rng As String
Dim Index As Integer
Dim Rndm As Integer
Dim Arr As Variant

Rng = "AH1:AH" & Range("AI1").Value
Arr = Range(Rng)
Randomize Timer
For Index = UBound(Arr) To 1 Step -1
Rndm = Int((Index * Rnd) + 1)
strtemp1 = Arr(Rndm, 1)
Arr(Rndm, 1) = Arr(Index, 1)
Arr(Index, 1) = strtemp1
Next
Range(Rng) = Arr
End Sub


VG
Yal
Anzeige
AW: Code anpassen
29.08.2024 15:07:28
Kuwer
Hallo Fritz,

Public Sub zufallsbereich()
Dim rngRange As Range
Dim intindex As Integer, intrnd As Integer
Dim vararray As Variant
Set rngRange = Range("AH1:AH" & Range("AI1").Value)
vararray = rngRange.Value
For intindex = UBound(vararray) To 1 Step -1
Randomize Timer
intrnd = Int((intindex * Rnd) + 1)
strtemp1 = vararray(intrnd, 1)
vararray(intrnd, 1) = vararray(intindex, 1)
vararray(intindex, 1) = strtemp1
Next
rngRange.Value = vararray
End Sub

Gruß, Uwe
Anzeige
AW: Code anpassen
29.08.2024 15:32:08
Fritz_W
Hallo Peter, Yal und Uwe

perfekt! Alle drei Vorschläge getestet und jeder funktioniert so gut wie der andere.
Ihr seid einfach super!
Vielen Dank

mfg
Fritz
AW: Code anpassen - Nachfrage
29.08.2024 16:58:33
Fritz_W
Hallo Forumsteilnehmer,

noch eine Frage bzw. Wunsch: das Makro betrifft das Tabellenblatt Tabelle2 ("Liste"). Wie muss der Code geändert werden, damit ich das Makro auch aus jedem anderen Tabellenblatt ausführen kann.

Im Voraus besten Dank für eure Hilfen.

mfg
Fritz
Anzeige
AW: Code anpassen - Nachfrage
29.08.2024 17:06:31
Yal
Hallo Fritz,

solang kein Blatt im Code erwähnt ist, bezieht sich das Makro stets auf das aktives Blatt. Dafür muss aber der Code in einem Modul (VBA-Menü "Einfügen", "Modul") abgelegt sein.
Dann kann man den Code aus dem aktuell aktiven Blatt "Tabelle1" mit Alt+F8 aufrufen. Es wird auf Tabelle1 wirken oder auf das Blatt Tabelle xy wechseln, dann dort Alt+F8 und das Makro starten, der Code wird auf Tabelle xy wirken.

VG
Yal
Anzeige
AW: Code anpassen - Nachfrage
29.08.2024 17:20:29
Fritz_W
Hallo Yal,

vielen Dank für die Info.
Wünschenswert wäre, wenn man eines der drei Makro so umgestalten könnte, dass es (auch) aus einem anderen Tabellenblatt als dem Tabellenblatt "Liste" ausgeführt werden kann.

mfg
Fritz
AW: Code anpassen - Nachfrage
29.08.2024 17:29:50
Kuwer
Hallo Fritz,

Public Sub zufallsbereich()

Dim rngRange As Range
Dim intindex As Integer, intrnd As Integer
Dim vararray As Variant
With Worksheets("Tabelle2")
Set rngRange = .Range("AH1:AH" & .Range("AI1").Value)
End With
vararray = rngRange.Value
For intindex = UBound(vararray) To 1 Step -1
Randomize Timer
intrnd = Int((intindex * Rnd) + 1)
strtemp1 = vararray(intrnd, 1)
vararray(intrnd, 1) = vararray(intindex, 1)
vararray(intindex, 1) = strtemp1
Next
rngRange.Value = vararray
End Sub


Gruß, Uwe
Anzeige
AW: Code anpassen - Nachfrage
29.08.2024 17:49:06
Fritz_W
Hallo Uwe,
super, das funktioniert wie gewünscht.
Vielen Dank!
mfg
Fritz
AW: Code anpassen - Nachfrage
29.08.2024 18:13:00
daniel
HI
kleiner Tipp noch.
wenn eine ganzzahlige Zufallszahl zwischen zwei Wertgrenzen benötigst, dann nimm die Excelfunktion =Zufallsbereich(untergrenze;obergrenze)
in VBA mit Worksheetfunction.RandBetween(untergrenze, obergrenze)
da musst du dann nichts mehr rechnen und das braucht auch kein Randomize.
Verfügbar ab Excel 2013.

Gruß Daniel
Anzeige
AW: Code anpassen - Nachfrage
29.08.2024 19:14:45
Yal
Genau gesehen ist das Ziel, eine Liste von Werte willkürlich zu sortieren, also vermischen.

Man könnte auch diese Werte temporär ein paar Spalte nach rechts kopieren, daneben Zufallswert reinbringen, nach diese Zufallswert sortieren und die Daten zurück kopieren.

Es sieht dann ungefähr so aus:
Sub Vermischen()

Dim Z As Range
Dim R1 As Range
Const cOff = 200 'Anzahl von Spalte nach rechts, wo die Verarbeitung stattfindet

Randomize
'Definieren
Set R1 = Range("AH1:AH" & Range("A1").Value)
'Vorbereiten
For Each Z In R1
Z.Offset(, cOff) = Z.Value 'orignale Wert kopieren
Z.Offset(, cOff + 1).Value = Rnd() 'Zufallswert daneben ablegen
Next
'nach Zufallswert sortieren
With ActiveSheet.Sort
.SortFields.Clear
.SetRange R1.Offset(, cOff).Resize(, 2)
.SortFields.Add2 Key:=R1.Offset(, cOff + 1)
.Apply
End With
'Zurückschreiben
R1.Value = R1.Offset(, cOff).Value
'Baustelle beseitigen
R1.Offset(, cOff).Resize(, 2).ClearContents
R1.Cells(1).Select
End Sub


VG
Yal
Anzeige
AW: Code anpassen - Nachfrage
29.08.2024 17:44:42
Yal
Hallo Fritz,

es ist keine Info, sondern eine Anweisung. Wenn Du sie nochmal aufmerksam liest, wirst Du merken, dass alle von Dir gestellte Fragen damit beantwortet sind.

VG
Yal
AW: Code anpassen - Nachfrage
29.08.2024 19:11:19
Fritz_W
Hallo Yal,

echt schlimm, dass ich das nicht sehe. Ich hoffe, du siehst mir das nach.
Du hast mir in letzter Zeit ja schon öfters helfen können und ich bin froh, wenn ich in Zukunft hie und da wieder auf Deine Unterstützung bauen darf.
Vielen Dank.

mfg
Fritz
Anzeige
;-) mir war nur wichtig, dass es nicht übersehen wird owT
29.08.2024 19:15:58
Yal
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige