GRY-Online.pl --> Archiwum Forum

Program w VBA w Excelu! POMOCY!!!

11.12.2008
12:38
smile
[1]

Tomal_P [ THE TRUTH IS OUT THERE ]

Program w VBA w Excelu! POMOCY!!!

Robię projekt do szkoły, który symuluje losowanie Dużego Lotka. Zrobiłem makro w Excelu które losuje 6 liczb z przedziału [1-49] i sprawdzą błędy: czy liczba jest zerem albo jest większa od 49.

Próbuję jeszcze zrobić aby komputer sprawdzał liczby czy się nie powtarzają. Ale jakoś nie mogę tego zrobić. Byłbym wdzięczny jakby ktoś mi w tym pomógł.

Pozdro i dzięki

11.12.2008
14:15
[2]

albz74 [ Legend ]

Zrób tak - zadeklaruj 6 zmiennych typu integer (np Los1, Los2 itd). Po wylosowaniu 1. liczby nadaj zmiennej Los1 wartość równą wylosowanej pierwszej liczbie. Potem, po wylosowaniu 2. liczby sprawdź, czy jest ona równa Los1, jeżeli nie, to nadaj zmiennej Los2 wartość tej liczby. Przy trzeciej - sprawdź Los1 i Los2 i tak do sześciu. Można to zrobić w bardziej elegancki sposób - poprzez pętle, ale równie dobrze można krok po kroku opisać algorytm w taki sposób jak podałem wyżej.

11.12.2008
14:34
[3]

Browar Drinker [ Centurion ]

Zrobiłem na szybko takie makro (heh albz74 widzę podobny pomysł mieliśmy). Może da się to prościej zrobić ale nie jestem zbyt mocny w visual basic ;)

Sub lotek()

Dim licz1 As Integer
Dim licz2 As Integer
Dim licz3 As Integer
Dim licz4 As Integer
Dim licz5 As Integer
Dim licz6 As Integer

Randomize
licz1 = Int((49 * Rnd) + 1)
Range("A2").Select
ActiveCell.FormulaR1C1 = CStr(licz1)

licz2 = licz1
Do Until licz2 <> licz1
Randomize
licz2 = Int((49 * Rnd) + 1)
Range("B2").Select
ActiveCell.FormulaR1C1 = CStr(licz2)
Loop

licz3 = licz2
Do Until licz3 <> licz2 And licz3 <> licz1
Randomize
licz3 = Int((49 * Rnd) + 1)
Range("C2").Select
ActiveCell.FormulaR1C1 = CStr(licz3)
Loop

licz4 = licz3
Do Until licz4 <> licz3 And licz4 <> licz2 And licz4 <> licz1
Randomize
licz4 = Int((49 * Rnd) + 1)
Range("D2").Select
ActiveCell.FormulaR1C1 = CStr(licz4)
Loop

licz5 = licz4
Do Until licz5 <> licz4 And licz5 <> licz3 And licz5 <> licz2 And licz5 <> licz1
Randomize
licz5 = Int((49 * Rnd) + 1)
Range("E2").Select
ActiveCell.FormulaR1C1 = CStr(licz5)
Loop

licz6 = licz5
Do Until licz6 <> licz5 And licz6 <> licz4 And licz6 <> licz3 And licz6 <> licz2 And licz6 <> licz1
Randomize
licz6 = Int((49 * Rnd) + 1)
Range("F2").Select
ActiveCell.FormulaR1C1 = CStr(licz6)
Loop

End Sub


A tutaj masz to w pliku xls już:

Liczby losujesz skrótem ctrl+L

11.12.2008
15:38
smile
[4]

Tomal_P [ THE TRUTH IS OUT THERE ]

Wielkie dzięki za pomoc. Teraz powinienem sobie jakoś poradzić.

11.12.2008
21:52
[5]

Tomal_P [ THE TRUTH IS OUT THERE ]

Mam jeszcze pytanie - co robi linijka "ActiveCell.FormulaR1C1 = CStr(licz6)"

O co chodzi w "FormulaR1C1" <-- co ten kod robi??? i o CStr??

11.12.2008
22:01
[6]

albz74 [ Legend ]

Wkleja do aktywnej komórki formułę CStr(licz6)

Cstr zamienia na tekst (string) zawartość zmiennej (licz6 w tym przypadku)

11.12.2008
22:17
[7]

Tomal_P [ THE TRUTH IS OUT THERE ]

Jak to?? Przecie zmienna licz6 to jakaś liczba. Jak to ją zamienia na tekst - nie rozumiem.

A co robi "FormulaR1C1"??

11.12.2008
22:52
[8]

albz74 [ Legend ]

FormulaR1C1 to polecenie, które pozwala na umieszczenie w komórce formuły przy wykorzystaniu adresowania R1C1 - czyli o x wierszy i y kolumn od komórki. Przydatne, gdy nie wiesz, w jakiej komórce wklejasz formułę, np dodajesz w kolejnych wierszach kolumny C formułę, która ma się odwołać do wartości komorki w kolumnie np B w tym samym wierszu.
A tekst możesz przecież zrobić z dowolnej wartości, oczywiście w tym przypadku masz liczby, ale co stoi na przeszkodzie, żeby je wkleić do komórki w postaci tekstu ?

© 2000-2025 GRY-OnLine S.A.