< návrat zpět

MS Excel


Téma: Náhodné číslo s podmienkou rss

Zaslal/a 5.8.2014 12:38

Zdravím,

vie niekto poradiť ako spraviť generátor náhodných čísel s podmienkou aby sa neopakovali ??

dík

Zaslat odpověď >

Strana:  1 2   další »
#020897
avatar
Ak budeš generovať jedenáste celé číslo z desiatich, tak sa určite bude opakovať. A navyše to asi nebude náhodné číslo.citovat
#020898
avatar
urobte makro kde budete pouzivat klasicky RND a k tomu si budete ukladat uz vygenerovane cisla .... ked uz to cislo budete mat v zozname tak len to zopakujete dovtedy kym to cislo nebude v zozname ..... samozrejme takato metoda bude cim dalej pomalsia a pomalsia :)citovat
#020899
avatar

Palooo napsal/a:

urob makro kde budes pouzivat klasicky RND a k tomu si budes ukladat uz vygenerovane cisla .... ked uz to cislo budes mat v zozname tak len to zopakujes dovtedy kym to cislo nebude v zozname ..... samozrejme takato metoda bude cim dalej pomalsia a pomalsia :)

A keď vyčerpáš všetky čísla, tak bude bežať furt. 2citovat
#020900
avatar
nie napr. bude mat rnd z 0 do 100 .... ked bude mat zoznam poloziek 100 tak mu vypise ze uz vycerpal moznosti

dajte chvilu .... robim natom :Pcitovat
#020901
avatar
Je to jednoduché.
Naplníš pole(napríklad 1000 prvkov od 1 do 1000)
A vygeneruješ prvé číslo. To potom vymažeš a znížiš počet o 1. A znovu generuješ z 999 prvkov. Teda generuješ iba index a potom priradíš hodnotu poľa.citovat
#020902
avatar
marjankaj: to vase riesenie je urcite rychlejsie .... no hold ma to nenapadlo

Pookie: prikladam to moje riesenie to pomalsie .... popripade si to naprogramujte ako to navrhoval Marjankaj
Příloha: zip20902_random.zip (18kB, staženo 23x)
citovat
#020903
avatar
pfu výborne sám by som to isto nespravil

díkcitovat
#020904
avatar
Něco takového?

Sub NahodnaCisla()
Dim Cisla(1 To 1000, 1 To 1) As Variant
Dim ix As Integer
Dim iz As Integer
Dim c As Integer

For ix = 1 To 1000
Cisla(ix, 1) = ix
Next

For ix = 1 To 999
iz = Int(((1000 - ix + 1) * Rnd) + ix)
c = Cisla(iz, 1): Cisla(iz, 1) = Cisla(ix, 1): Cisla(ix, 1) = c
Next

Range("A1:A1000").Value = Cisla
End Sub
citovat
icon #020905
avatar
@lubo: to je slušné 1citovat
icon #020906
eLCHa
Není třeba cyklus, protože není třeba VBA ;)
viz příloha

lubův kód určitě funguje, pro zajímavost přikládám své řešení, pokud by se chtělo VBASub subUniqueRnds()
Dim col As New Collection

Dim i As Integer
For i = 1 To 1000
col.Add i
Next i

Dim iRandoms(999) As Integer
Dim iRnd As Integer
For i = 0 To 999
iRnd = Int(Rnd * col.Count) + 1
iRandoms(i) = col(iRnd)
col.Remove iRnd
Next

Range("A1:A1000").Value = Application.Transpose(iRandoms)
End Sub


mimochodem - napsání kódu mi trvalo o dost déle než řešení bez kódu
Příloha: zip20906_rnd.zip (51kB, staženo 32x)
citovat

Strana:  1 2   další »

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje