< návrat zpět

MS Excel


Téma: Náhodné hodnoty rss

Zaslal/a 2.12.2023 18:45

Zdravím, měl bych dotaz, lze udělat generátor náhodných hodnot - písmena?
příklad 5 radku počet dni a 3 sloupce jména a k tomu přidělovat náhodné písmeno z databáze (sektor) ale aby nebyla dvě stejná písmenka třeba v pondělí u dvou jmen Děkuji

Zaslat odpověď >

#055733
elninoslov
Vytvorte manuálne takú vzorovú tbl, ako by to malo vyzerať. Makrom to nebude problém.

PS: Pre priloženie prílohy sa musíte registrovať - Freecitovat
#055734
avatar
Posílám moji tabulku, když tam dostanu náhodné písmena někdy jsou stejné u dvou dělníků v jednom dni to bych nechtěl
Příloha: jpg55734_fb_img_1701543871800.jpg (11kB, staženo 18x)
55734_fb_img_1701543871800.jpg
citovat
#055738
elninoslov
Obrázok??? To vážne? S manuálne nevytvorenou tabuľkou, znázorňujúcou príklad, ako by mal výsledok vyzerať?

Ide totiž ešte aj o nejaké podmienky, všakže? Aby napr. jeden človek nevyfasoval celý týždeň rovnaký sektor, alebo aby všetci nemali rovnaký sektor 2 po sebe, a mnohé ďalšie nad ktorými sa mi nechce zamýšľať. Že niektoré môžu ľahko vzniknúť je isté.

Takže priložte prílohu vo forme súboru xlsx, v ktorom tú tabuľku manuálne vyplníte, ako by mala vyzerať. Týmto Vás snáď prinútim pritom aj pouvažovať nad možnými neželanými stavmi/kombináciami 1
Ktoré nám samozrejme promptne zdelíte.

EDIT:
Jednoduché makro
Sub Generuj()
Dim Sek() As String, tS() As String, V() As String, i As Integer, y As Long, Nahoda As Long

Const POCET_RADKU As Long = 5
Const POCET_DELNIKU As Integer = 3

Randomize

With ThisWorkbook.Worksheets("Hárok1")
Sek = Split(Join(Application.Transpose(.Range("A4:A11").Value), ","), ",")
ReDim V(1 To POCET_RADKU, 1 To POCET_DELNIKU)

For y = 1 To POCET_RADKU
tS = Sek
For i = 1 To POCET_DELNIKU
Nahoda = Int(Rnd() * (UBound(tS) + 1))
V(y, i) = tS(Nahoda)
tS = Filter(tS, tS(Nahoda), False)
Next i
Next y

.Range("E4").Resize(POCET_RADKU, POCET_DELNIKU).Value = V
End With
End Sub
citovat
#055745
avatar
Dobrý večer, už jste mi předběhl omlouvám se. za podmínky bych byl rád aby se neopakoval sejný sektor u dvou dělníků v jednom dni a aby daný dělník neměl stejný sektor dva dny po sobě. Další podmínky nevím jaké jsou možnosti co vše se dá udělat. Omlouvám se jsem na uživatelský úrovni proto jsem se obrátil na odborníky 1
Příloha: xlsx55745_sesit.xlsx (11kB, staženo 5x)
citovat
#055752
elninoslov
Tak teda príklad:
Sub Generuj_Sektory()
Dim Sektory() As String, MozneSektory() As String, Vysledek() As String
Dim Den As Integer, Delnik As Integer, Pozice As Integer, Sektor As String, bOK As Boolean

Const POCET_DNI As Long = 5
Const POCET_DELNIKU As Integer = 3

Randomize

With ThisWorkbook.Worksheets("Hárok1")
Sektory = Split(Join(Application.Transpose(.Range("A4:A11").Value), ","), ",")
If UBound(Sektory) + 1 < POCET_DELNIKU Then MsgBox "Málo sektorů.", vbCritical: Exit Sub
ReDim Vysledek(1 To POCET_DNI, 1 To POCET_DELNIKU)

For Den = 1 To POCET_DNI
MozneSektory = Sektory

For Delnik = 1 To POCET_DELNIKU
bOK = False

While Not bOK
Pozice = Int(Rnd() * (UBound(MozneSektory) + 1))
Sektor = MozneSektory(Pozice)
bOK = Den = 1
If Not bOK Then
bOK = Sektor <> Vysledek(Den - 1, Delnik)
If Not bOK Then If UBound(MozneSektory) = 0 Then Den = Den - 1: Exit For
End If
Wend

MozneSektory(Pozice) = "•"
MozneSektory = Filter(MozneSektory, "•", False)
Vysledek(Den, Delnik) = Sektor
Next Delnik
Next Den

.Range("E4").Resize(POCET_DNI, POCET_DELNIKU).Value = Vysledek
End With
End Sub

Rýchlejšie by to bolo asi cez kolekcie alebo nahrádzanie v stringu, ale myslím, že pre Vaše potreby je toto cez Filter aj tak ako delo na komára 5
Příloha: zip55752_generuj-nahodne-sektory2.zip (18kB, staženo 4x)
citovat
#055754
avatar
mockrát děkuji. 1citovat

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