Użyłem funkcji Los i wszystko jest ok, ale za każdą zmianą czegokolwiek ponownie następuje losowanie, czy da się to jakoś ograniczyć ? że wartości będą się ponownie losować po jakimś działaniu ?
A inaczej jak to się da zrobić ? Próbowałem ustawić “analizę danych” przy pomocy wtyczki Analysis Toolpak i tam wybrałem opcje Generowanie liczby pseudolosowych, ale nie mam pojęcia co dalej, który rodzaj losowania wybrać itd. chciałbym tak to ustawić aby losował mi liczbę z przedziału 0 do 1, lub wyraz “tak” lub “nie” bo tego w sumie potrzebuje. Ja zrobilem to tak, że liczba wylosowana poniżej 0,5 to było “tak” a powyżej to “nie”. Cały problem w tym, że gdy cokolwiek zmienię w arkuszu od razu losuję mi nowe liczby.
Sub Losowanie()
Range("I11").Select ' wybranie konkretnej komórki, w której ma znaleźć się wylosowana liczba
ActiveCell.FormulaR1C1 = Rnd() ' formuła losowania zwracająca do komórki czystą liczbę
End Sub
przy okazji, wersja bardziej ogólna zwracająca liczby całkowite:
Sub LosowanieCalk()
a = -5 ' dolna granica przedziału losowania (wlącznie)
b = 10 ' górna granica
Range("I11").Select
ActiveCell.FormulaR1C1 = Round(Rnd() * (b - a) + a, 0) ' Round zaokrągla tu do 0 liczb po przecinku (można to zmienić)
End Sub
Sub LosowanieTN()
Range("C11").Select ' wybranie konkretnej komórki, w której ma znaleźć się wylosowana liczba
i = Rnd()
If i < 0.5 Then ' Jeśli wylosowana liczba poniżej 0,5, to dostajesz w wynikowej komórce NIE
ActiveCell.FormulaR1C1 = "NIE"
Else
ActiveCell.FormulaR1C1 = "TAK" ' Jeśli większa lub równa 0,5, to dostajesz TAK
End If
End Sub
Makro można łatwo przypisać do wykonywania przy kliknięciu na jakiś obiekt w arkuszu.
Zależy, czy mają to być konkretne komórki ustawione na sztywno, czy jakiś większy zakres.
Możesz po prostu usunąć z tamtego:
Range("A2").Select
i będzie Ci losowało do aktualnie zaznaczonej komórki. Dla kilku konkretnych komórek możesz zaś powtórzyć losowania:
Sub LosowanieTN()
Range("A2").Select ' wybranie konkretnej komórki, w której ma znaleźć się wylosowane TAK/NIE
Randomize 'resetowanie generatora liczb pseudolosowych
i = Rnd()
If i < 0.5 Then ' Jeśli wylosowana liczba poniżej 0,5, to dostajesz w wynikowej komórce NIE
ActiveCell.FormulaR1C1 = "NIE"
Else
ActiveCell.FormulaR1C1 = "TAK" ' Jeśli większa lub równa 0,5, to dostajesz TAK
End If
Range("B5").Select ' wybranie konkretnej komórki, w której ma znaleźć się wylosowana liczba
Randomize 'resetowanie generatora liczb pseudolosowych
i = Rnd()
If i < 0.5 Then ' Jeśli wylosowana liczba poniżej 0,5, to dostajesz w wynikowej komórce NIE
ActiveCell.FormulaR1C1 = "NIE"
Else
ActiveCell.FormulaR1C1 = "TAK" ' Jeśli większa lub równa 0,5, to dostajesz TAK
End If
........ (i tak dalej) .........
End Sub
Jeśli ma być jakiś zakres, to można np. tak:
Sub LosowanieTN2()
Range("A2:B5").Select ' wybranie konkretnego zakresu do zapełnienia
' Można też usunąć powyższe i ręcznie zaznaczać zakres przed odpaleniem makra
For Each kom In Selection
kom.Value = losuj()
Next kom
End Sub
Function losuj()
Randomize 'resetowanie generatora liczb pseudolosowych
i = Rnd()
If i < 0.5 Then ' Jeśli wylosowana liczba poniżej 0,5, to dostajesz w wynikowej komórce NIE
losuj = "NIE"
Else
losuj = "TAK" ' Jeśli większa lub równa 0,5, to dostajesz TAK
End If
End Function
Są jeszcze też opcje automatycznego zaznaczania np. co drugiej komórki itp., ale na razie się powstrzymam