< návrat zpět
MS Excel
Téma: generovani nahodnych cisel
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.
elninoslov(7.11.2023 17:17)#055625 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 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 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 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 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 takto? =RANDBETWEEN(57;72)/10
citovat
elninoslov(7.11.2023 21:03)#055631 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 Ještě jednou děkuji , moc jste mi pomohli.
S.
citovat