Losowanie liczb makro

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ą :)

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?

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 :)

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?

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

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ść :)

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
0

Coś nie może ruszyć

Run Time error '424' object required

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.

0
Cell = Sheet.getCellByPosition(10, w)

to zostało podświetlone :)

0

Wspomnianego wiersza nie powinno być w kodzie, przecież napisałem

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

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

'Makro losujące 8 cyfr z 68

  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 = 1 To 8
    Cells(w, 11) = wylosowane(w - 1)
  Next w

End Sub

To zadziałało tylkot jeszcze 1 pkt został mi nad którym pracuje aby zapisywały się wyniki kolejne w kolumnie K i znowu parametr był taki aby te same wyniki nie powtórzyły się co w poprzednich losowań :) długa noc przedemną ...

0

A w której kolumnie wyniki się zapisują?

znowu parametr był taki aby te same wyniki nie powtórzyły się co w poprzednich losowań :) długa noc przedemną

W zadaniu, które podałeś w innym wątku, takiego wymagania nie ma. Źle zrozumiałeś polecenie.

0

W kolumnie K sie zapisują wynik tylko potrzebuje jeszcze aby zapisywały się każde wyniki w tej kolumnie i poniższych wersach i była unikalność losowań czyli sprawdzanie poprzednich wyników

0

Moim zdaniem źle zrozumiałeś polecenie. Zadanie jest już zrobione.

0

Chyba masz rację :) dziękuje wszystkim za pomoc

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