18. august 2007 - 14:41Der er
14 kommentarer og 4 løsninger
random(blande) funktion i excel
Hej. jeg har et lille problem med en excel funktion. Derfor håber der sidder nogle derude med lidt ekspertice de vil dele ud af.
Jeg har ca 30 navne som står i en kolonne som skal kunne shuffles. Dvs blandes i en tilfældig rækkefølge hver gang.
Det skal helst være sådan at man kan markere nogle af dem og at disse bliver blandet, eller at man kan vælge et shufflet outcome på 10-14 stk ud af de 30.
Har forsøgt mig med RAND() funktionen men det funger ikke rigtigt.
Med kunstig intelligens skaber HP’s nye OmniBook X 14 en unik og skræddersyet brugeroplevelse målrettet dem, der ønsker høj ydeevne og intelligente funktioner
her er en makro til at blande de valget, NB de skal stå i en kolonne
Public Sub BlandValgte() Dim Valgte As Variant, Udvalgte() As Variant Dim I As Integer, R As Integer, Antal As Integer Randomize Valgte = Selection Antal = UBound(Valgte) ReDim Udvalgte(Antal) For I = 1 To Antal Do R = Int((Antal * Rnd) + 1) If Not IsEmpty(Valgte(R, 1)) Then Udvalgte(I - 1) = Valgte(R, 1) Valgte(R, 1) = Empty Exit Do End If Loop Next 'næste linie skriver i C kolonnen, det er 3 tallet der bestemmer kolonnen Range(Cells(1, 3), Cells(Antal + 1, 3)) = Application.WorksheetFunction.Transpose(Udvalgte) End Sub
her er den der tager det antal du ønsker ud fra alle
Public Sub BlandValgteAntal() Dim Valgte As Variant, Udvalgte() As Variant Dim I As Integer, R As Integer, Antal As Integer, Ud As Integer, OK As Integer Randomize Valgte = Range(Range("A1"), Range("A1").End(xlDown)) Antal = Range(Range("A1"), Range("A1").End(xlDown)).Rows.Count Ud = InputBox("hvor mange skal vælges") OK = 0 ReDim Udvalgte(Antal) For I = 1 To Antal Do R = Int((Antal * Rnd) + 1) If Not IsEmpty(Valgte(R, 1)) Then Udvalgte(I - 1) = Valgte(R, 1) Valgte(R, 1) = Empty OK = OK + 1 Exit Do End If Loop If OK = Ud Then Exit For Next 'næste linie skriver i C kolonnen, det er 3 tallet der bestemmer kolonnen Range(Cells(1, 3), Cells(Antal + 1, 3)) = Application.WorksheetFunction.Transpose(Udvalgte) End Sub
lyder godt, den første blander kun sammenhængende markering. den anden tager det antal du vælger ud af alle navne
jeg har modificeret den første, nu kan den klare multiselect, flere ikke sammenhængende markerede.
Public Sub Bland() Dim Valgte() As Variant, Udvalgte() As Variant Dim I As Integer, R As Integer, Antal As Integer, A As Integer, L As Integer Randomize A = Selection.Cells.Count ReDim Valgte(A) L = 0 For Each c In Selection.Cells Valgte(L) = c L = L + 1 Next Antal = UBound(Valgte) ReDim Udvalgte(Antal) For I = 0 To Antal - 1 Do R = Int((Antal * Rnd)) If Not IsEmpty(Valgte(R)) Then Udvalgte(I) = Valgte(R) Valgte(R) = Empty Exit Do End If Loop Next 'næste linie skriver i C kolonnen, det er 3 tallet der bestemmer kolonnen Range(Cells(1, 3), Cells(Antal + 1, 3)) = Application.WorksheetFunction.Transpose(Udvalgte) End Sub
findes der en måde hvorpå man kan sammenkoble kolonner, og stadig bibeholde metode to som du bekriver så flot. Eksemplet kunne være at kolonne A2 skal være låst med kolonne D2, og så og fremdeles.
på den måde kan man have noget tekst tilknyttet til feltet i A2 i D2, og det skulle helst være sådan at når man så blander følger informationen I cellen D2 med.
Har modificeret kabaks kode lidt forudsætter du selecter i kolonne A, så rettes kolonne D med
Public Sub Bland() Dim Valgte() As Variant, Udvalgte() As Variant Dim I As Integer, R As Integer, Antal As Integer, A As Integer, L As Integer Dim adr(100), Valgte2(100), Udvalgte2(100) Randomize A = Selection.Cells.Count ReDim Valgte(A) L = 0 For Each c In Selection.Cells Valgte(L) = c: adr(L) = c.Row: Valgte2(L) = c.Offset(0, 3) L = L + 1 Next Antal = UBound(Valgte) ReDim Udvalgte(Antal) For I = 0 To Antal - 1 Do R = Int((Antal * Rnd)) If Not IsEmpty(Valgte(R)) Then Udvalgte(I) = Valgte(R): Udvalgte2(I) = Valgte2(R) Valgte(R) = Empty: Valgte2(R) = Empty Exit Do End If Loop Next
For t = 0 To Antal - 1 Cells(adr(t), 1) = Udvalgte(t): Cells(adr(t), 4) = Udvalgte2(t) Next End Sub
ok, skulle lige se scroll down menuen til venstre... takker
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.