< návrat zpět
MS Excel
Téma: generovani nahodnych cisel ![rss](./plugins/templates/wall_2C/images/icons/rss.png)
Zaslal/a Scraper 7.11.2023 17:01
Ahoj , jsem v koncích.
Potřeboval bych do buněk ve sloupci B ( má různý počet řádků ) zapsat vzorec ,který generuje náhodné číslo nebo přímo vygenerované číslo , ze zadaného rozsahu , který zadám na začátku jako maximum a minimum. Zkouším to už celý den a stále na to nemůžu přijít .Přitom , když mám ve vzorci pevná čísla , tak to do bunky vepíše. Pokud je to ze zadané z proměnné , tak hodí chybu. Amatérský pokus o makro jsem přiložil. Děkuji a hezký večer. Staňa V. ![4](./plugins/templates/wall_2C/images/smileys/4.gif)
elninoslov(7.11.2023 17:17)#055625 ![elninoslov](./pictures/avatars/5a6387658a0f4.jpg)
Minimum = Replace(InputBox("Zadej minimální hodnotu např: 5,7 "), ",", ".")
Maximum = Replace(InputBox("Zadej maximální hodnotu např: 7,2 "), ",", ".")
Range("B2", Cells(Rows.Count, "A").End(xlUp).Offset(0, 1)).Formula = "=ROUND(" & Minimum & "+RAND()*(" & Maximum & "-" & Minimum & "),1)"
EDIT:
A hotové čísla:
Sub zapisvzorec3()
Dim Radku As Long
Dim Minimum As Double, Maximum As Double
Dim R() As Double
Minimum = Val(Replace(InputBox("Zadej minimální hodnotu např: 5,7 "), ",", "."))
Maximum = Val(Replace(InputBox("Zadej maximální hodnotu např: 7,2 "), ",", "."))
With Worksheets("vysledky")
Radku = .Cells(Rows.Count, "A").End(xlUp).Row - 1
ReDim R(1 To Radku, 1 To 1)
For i = 1 To Radku
R(i, 1) = Round(Minimum + Rnd() * (Maximum - Minimum), 1)
Next i
.Range("B2").Resize(Radku).Value = R
End With
End Subcitovat
Stana-V(7.11.2023 17:58)#055626 ![avatar](./pictures/avatars/no-avatar.jpg)
Moc Vám děkuji , jak je to pro někoho , kdo umí jednoduché.
Ještě jednou díky.
SV
citovat
elninoslov(7.11.2023 18:03)#055627 ![elninoslov](./pictures/avatars/5a6387658a0f4.jpg)
Možno ešte jednoduchšie:
Sub zapisvzorec5()
Dim Radku As Long
Dim Minimum As String, Maximum As String
Minimum = Replace(InputBox("Zadej minimální hodnotu např: 5,7 "), ",", ".")
Maximum = Replace(InputBox("Zadej maximální hodnotu např: 7,2 "), ",", ".")
With Worksheets("vysledky")
Radku = .Cells(Rows.Count, "A").End(xlUp).Row - 1
.Range("B2").Resize(Radku).Value = Evaluate("=ROUND(RANDARRAY(" & Radku & ",1," & Minimum & "," & Maximum & ",FALSE),1)")
End With
End Sub
RandArray() by sa dalo použiť aj v tom cykle:
Sub zapisvzorec4()
Dim Radku As Long
Dim Minimum As Double, Maximum As Double
Dim R()
Minimum = Val(Replace(InputBox("Zadej minimální hodnotu např: 5,7 "), ",", "."))
Maximum = Val(Replace(InputBox("Zadej maximální hodnotu např: 7,2 "), ",", "."))
With Worksheets("vysledky")
Radku = .Cells(Rows.Count, "A").End(xlUp).Row - 1
R = WorksheetFunction.RandArray(Radku, 1, Minimum, Maximum, False)
For i = 1 To Radku
R(i, 1) = Round(R(i, 1), 1)
Next i
.Range("B2").Resize(Radku).Value = R
End With
End Subcitovat
Scraper(7.11.2023 18:12)#055628 ![avatar](./pictures/avatars/no-avatar.jpg)
To je tolik možností , zírám. Funkci randarray() , jsem se dočetl , že lze použít jen v Excelu verze 2021 , tak proto jsem tam používal rand() , aby to šlo kolegyni i na verzi Excelu 2019 . Moc děkuju.
S.
citovat
elninoslov(7.11.2023 19:53)#055629 ![elninoslov](./pictures/avatars/5a6387658a0f4.jpg)
Ale nezabudnite ešte na "balast" - teda kontrolu. Či bolo zadané číslo, či nebol InputBox zrušený, pozor ak máte filtrované dáta - vtedy zisťovanie posledného riadku metódou "xlUp" nefunguje a treba použiť Find, no a nechce sa mi moc premýšľať, ale neviem či netreba pripočítať +0,1 niekde v "(Maximum - Minimum + 0,1)" aby bola dosiahnuteľná aj horná hranica, ...
citovat
marjankaj(7.11.2023 20:54)#055630 ![avatar](./pictures/avatars/no-avatar.jpg)
takto? =RANDBETWEEN(57;72)/10
citovat
elninoslov(7.11.2023 21:03)#055631 ![elninoslov](./pictures/avatars/5a6387658a0f4.jpg)
To je parádny nápad, ako obabrať obmedzenie celých čísel v RANDBETWEEN zároveň s ROUND a zároveň so zahrnutím limitných hodnôt
citovat
Stanna-V(8.11.2023 7:45)#055632 ![avatar](./pictures/avatars/no-avatar.jpg)
Ještě jednou děkuji , moc jste mi pomohli.
S.
citovat