Losowanie liczb makro

2016-05-01 22:24
0

Mój problem to powtarzajace się liczby cyfry i chciałem aby się dapisywały w kolejnych wersach w kolumnie K

Sub Ósemka()
'
' Ósemka Makro
'
' Klawisz skrótu: Ctrl+Shift+O

'Makro losujące 8 liczb <del>cyfr</del> z 68
Dim i As Integer
Dim Liczba As Integer

For i = 1 To 8
    Randomize
    Liczba = Int(Rnd * (68) + 1)
    Range("K" & i) = Liczba
Next i
End Sub

fakt nie przywiazuje do tego wagi :) a w matematyce informatyce to ważne

co powinienienem dodać i gdzie aby się liczby nie powtarzały ? i dopisywały do kolejnych wierszy w kolumnie k będze wdzieczny za podpowiedz bo już cały wolny dzień spedziłem nad informatyką :)

edytowany 4x, ostatnio: bogdans, 2016-05-03 12:38
Pora odwiedzić Wikipedię i poznać różnicę między cyfrą oraz liczbą. - Patryk27 2016-05-01 22:29

Pozostało 580 znaków

2016-05-01 23:02
Wqe
0
Dim i, Liczba As Integer
Dim r As New Random

For i = 1 To 8

Liczba = r.Next(8, 68)
Console.WriteLine(Liczba)

Next i

Losowanie chyba tak ma działać, o co chodzi ci z tymi kolumnami?

Pozostało 580 znaków

2016-05-01 23:10
0

A ze każdy wynik ma się zapisać w kolumnie K tylko w innych wersach czyli wszystkie wyniki coraz niżej z góry dziekuje

a jakie jest prowadopodobieństwo występowania w ósemce takich samych wyników bo to też jest ważne :)

Pozostało 580 znaków

2016-05-01 23:13
Wqe
0

Z tymi kolumnami może tak zadziała:

Range("K" & cstr(i))
  • to może zadziałać ale nie wiem bo nie mam ide i nigdy w tym nie pisałem.
Dim i, Liczba As Integer
Dim r As New Random
Dim rgn As Range

For i = 1 To 8

Liczba = r.Next(8, 68)
rgn = Range("K" & cstr(i))
Next i

Działa coś takiego?

Pozostało 580 znaków

2016-05-01 23:19
0

coś tam krzyczy z tym Range a jak zrobić aby były niepowtarzalne liczby ?

r As New Random

teraz to mu sie cos niepodoba i krzyczy

Pozostało 580 znaków

2016-05-01 23:26
Wqe
0

Pierwsza/druga strona
https://www.google.pl/webhp?s[...]e=UTF-8#q=unique%20rand%20vba

Pozostało 580 znaków

2016-05-02 22:43
0
Sub Ósemka()
'
' Ósemka Makro
'
' Klawisz skrótu: Ctrl+Shift+O

'Makro losujące 8 cyfr z 68
Dim i As Integer
Dim Liczba As Integer

For i = 1 To 8
    Randomize begin
    Liczba = Int(Rnd * (68) + 1)
    Range("K" & i) = Liczba
Next i
End Sub

to mój pierwszy wzór

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

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

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

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

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

licz5 = licz4 
Do Until licz5 <> licz4 And licz5 <> licz3 And licz5 <> licz2 And licz5 <> licz1 
Randomize 
licz5 = Int((68 * Rnd) + 1) 
Range("K5").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((68 * Rnd) + 1) 
Range("K6").Select 
ActiveCell.FormulaR1C1 = CStr(licz6) 
Loop 

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

End Sub

ten moze i dobry bo wyszykuje liczby niepowtarzalne w jednym losowaniu ale jak zrobić aby zapisywały sie w kolumnie K wszystkie losowania i jeszcze w losowaniu sprawdzać aby poprzednie wylosowane zestawy się nie powtórzyły

Proszę o podpowieć w którym kierunku mam iść :)

edytowany 1x, ostatnio: furious programming, 2016-05-03 19:43

Pozostało 580 znaków

2016-05-03 10:14
0

Polecenie Randomize powinno być w makro tylko raz. Nie mam Excela, więc daję rozwiązanie w Calcu.

Sub Osemka
  Sheet = ThisComponent.Sheets(0)
  Dim wylosowane(8) As Single
  indeks = 0
  Randomize
  Do
    Do 
      powtorzenie = False
      a = Int(Rnd*(68))+1
      For b=0 To indeks
        If a = wylosowane(b) Then
          powtorzenie = True
          Exit For
        End If
      Next b
    Loop While powtorzenie = True
    wylosowane(indeks) = a
    indeks = indeks+1
  Loop While indeks < 8
  indeks = 0
  For w = 0 To 7
    Cell = Sheet.getCellByPosition(10,w)
    Cell.Value = wylosowane(w)
  Next w
End Sub

Różnice są na pewno w ostatniej pętli przepisującej z tablicy pomocniczej do arkusza, w Excelu będzie chyba tak:

  For w = 1 To 8
    Cells(w,11) = wylosowane(w-1)
  Next w

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell

Pozostało 580 znaków

2016-05-03 10:30
0

Coś nie może ruszyć

Run Time error '424' object required

Pozostało 580 znaków

2016-05-03 10:42
0

Zmień Excel na Calc :P.
Usuń wiersz

Sheet = ThisComponent.Sheets(0)

, w Excelu jest niepotrzebny, może on powoduje błąd. Jeśli nie pomoże, to uruchom makro w trybie debugowania - wiersz po wierszu - aż natrafisz na błędny wiersz.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell

Pozostało 580 znaków

2016-05-03 13:06
0
Cell = Sheet.getCellByPosition(10, w)

to zostało podświetlone :)

edytowany 1x, ostatnio: furious programming, 2016-05-03 19:43

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0