Thema
|
Datum
|
Von Nutzer
|
Rating
|
Antwort
|
|
25.11.2007 11:43:52 |
Chrissi |
|
|
|
25.11.2007 14:50:41 |
Jürgen |
|
|
Aw:VBA in Excel - Zeilen vertauschen |
25.11.2007 14:56:04 |
Holger |
|
|
Von:
Holger |
Datum:
25.11.2007 14:56:04 |
Views:
2267 |
Rating:
|
Antwort:
|
Thema:
Aw:VBA in Excel - Zeilen vertauschen |
Hallo Chrissi,
warum läuft die 2. Schleife immer nur im kleiner werdenden unteren Teil? Ich würde jeweils zwei Zufallszahlen bestimmen und die zugehörigen Zeilen tauschen, dazu die erste Zeile außerhalb des Datenbereichs zwischenparken, sie mit der zweiten überschreiben und dann die geparkte Zeile zurückholen.
Die Zeilenanzahl kannst du leichter bestimmen.
Sub ....
Worksheets("Sheet").Select
Zeile = 3
Range(Cells(Zeile, 1), Cells(Zeile, 1)).End(xlDown).Activate
intAnzahl_Zeilen = ActiveCell.Row - Zeile + 1
For i = 1 To 20 'oder 100 oder ...
a = Int(intAnzahl_Zeilen * Rnd + Zeile)
z = Int(intAnzahl_Zeilen * Rnd + Zeile)
astr = Trim(Str(a)) + ":" + Trim(Str(a))
zstr = Trim(Str(z)) + ":" + Trim(Str(z))
Rows(astr).Select
Selection.Cut Destination:=Rows("60000:60000")
Rows(zstr).Select
Selection.Cut Destination:=Rows(astr)
Rows("60000:60000").Select
Selection.Cut Destination:=Rows(zstr)
Next i
Worksheets("...").Select
End Sub
Ich würde auch nicht die Zeilen tauschen, sondern mit ein Array erzeugen, das die Zahlen von 1 bis intAnzahl_Zeilen in zufälliger Reihenfolge enthält, und dann die Zeilen in dieser Reihenfolge für die Fragen aubrufen, z.B. enthält b() nach dem Durchlauf eine solche Reihenfolge.
anz = 34
ReDim a(anz - 1), b(anz - 1)
For i = 0 To anz - 1
a(i) = i + 1
Next i
For i = 0 To anz - 1
Do
c = Int(Rnd * anz)
b(i) = a(c)
Loop Until b(i) <> 0
a(c) = 0
Next i
Wenn innerhalb eines Fragendurchlaufs auch Fragen mehrfach kommen dürfen, reicht es auch, eine Zufallszahl zwischen 1 bis intAnzahl_Zeilen zu bestimmen und die entsprechende Zeile abzurufen.
Ich hoffe, die geholfen zu haben
Holger
Chrissi schrieb am 25.11.2007 11:43:52:
Hallo !
Ich habe eine Tabelle mit Quizfragen.
Da ich ein Quiz programmiert habe möchte ich das nciht immer die gleichen fragen
gestellt werden und so sollen die vorhandenen fragen einfach immer bunt durcheinader
gewürfelt werden bevor der test beginnt.
Die struktur der tabelle sieht so aus:
Frage - antwort 1 - antwort 2 - antwort 3 - antwort 4
ich habe ca 34 fragen die so untereinaander weggeschrieben sind.
Ich möchte nun ein modul haben das.
sich eine bestimmte zeile (3) nimmt,
dann eine andere zeile (24) nimmt sie an die stelle packt wo zeile (3) vorher war
und zeile (3) an die stelle von zeile (24) packt
ich habe bereits eine programmierung vorliegen die aber noch nciht ganz funktioniert,
da ich nicht weil ob ich ganze zeilen in eine Variable packen kann, da da ja schon einige
informationen drin stecken.
hier die bisherige programmierung:
Sub wirbel_Zeilen()
'Zeilen vertauschen
Dim Zeile As Integer
Dim i As Integer 'Laufvariablen
Dim y As Integer
Dim varTausch As Variant ' Bildertausch
Dim intAnzahl_Zeilen As Integer ' Wie viel Bilder?
Dim intZZahl As Integer ' Zufallszeile
'Initialisierung
Randomize ' Zufallszahlengenerator initialisieren.
Zeile = 3
Sheet = 2
'Zähle Zeilen
Do Until Worksheets(Sheet).Cells(Zeile, 1) = ""
intAnzahl_Zeilen = intAnzahl_Zeilen + 1
Zeile = Zeile + 1
Loop
'Testbox
'MsgBox intAnzahl_Zeilen & " Fragen"
For i = 3 To 20 ' Tausche 20 mal die Liste
Zeile = 3
' Tausche innerhalb der Liste
For y = i To (intAnzahl_Zeilen + 3)
'Setze Start
intZZahl = Int((intAnzahl_Zeilen * Rnd) + 1)
'Zeile 3
varTausch = Worksheets(Sheet).Rows(Zeile)
'Schnapp dir das Bild darunter
Worksheets(Sheet).Rows(Zeile) = Worksheets(Sheet).Rows(intZZahl)
'Schreibe darunter
Worksheets(Sheet).Rows(intZZahl) = varTausch
'
Next y
Next i
End Sub
das komische ist das wenn ich das anwende alle meine zeilen leer sind.
Ich hoffe jemand kann schnell helfen. vielen dank schon mal :) |
- Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
- Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
- Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
- Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
- Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei
Antworten auf Ihren Beitrag zu benachrichtigen
Bitte geben Sie ein aussagekräftiges Thema an.
Bitte geben Sie eine gültige Email Adresse ein!
- Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
- Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
- Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
- Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
- Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei
Antworten auf Ihren Beitrag zu benachrichtigen
Thema
|
Datum
|
Von Nutzer
|
Rating
|
Antwort
|
|
25.11.2007 11:43:52 |
Chrissi |
|
|
|
25.11.2007 14:50:41 |
Jürgen |
|
|
Aw:VBA in Excel - Zeilen vertauschen |
25.11.2007 14:56:04 |
Holger |
|
|