Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Excel 2013 Kombinacje bez powtórzeń

ZbiguZbigu 22 Sie 2014 23:31 15129 19
  • #1 22 Sie 2014 23:31
    ZbiguZbigu
    Poziom 9  

    Witam,

    potrzebuje pomocy, nie umiem napisać makra w Excel 2013 generującego wszystkie kombinacje 4 liczb z zadanego zbioru okreslonych 6 liczb czyli:

    Dane wejściowe:
    W wierszach (komórki A1,B1,C1,D1,E1,F1 znajduje sie zestaw liczb przypadkowych z zakresu 1-49 (wynik losowania LOTTO); Chcę wygenerować z tego zestawu wszystkie kombinacje bez powtórzeń po 4 liczby w wierszu np. A1,B1,D1,F1 etc. a wynik pojawił się w kolumnach np. H1,I1,J1,K1, H2,I2,J2,K2 do wyczerpania kombinacji.
    Po wygenerowaniu chcę aby macro zajęło sie kolejnym zestawem liczb z wiersza A2,B2,C2,D2,E2,F2 i znowu dopisało wyniki jako kontynuacja w kolumnie H,I,J,K i tak do wyczerpania wszystkich układów z kolumny A,B,C,D,E i F.

    Czy ktoś umie napisać takie macro? Jak to powinno wyglądać?

    Dzięki za pomoc.

    pozdrawiam,

    0 19
  • #2 23 Sie 2014 07:02
    adamas_nt
    Moderator Programowanie

    W załączniku rozwiązanie bez użycia VBA, z wykorzystaniem funkcji LOS i wiersza pomocniczego. Prawdopodobieństwo wystąpienia powtórzeń istnieje tylko w teorii.

    2
  • #3 23 Sie 2014 09:23
    ZbiguZbigu
    Poziom 9  

    Cześć dzięki za szybką odpowiedź ale nie o to chodziło.

    W załaczeniu Excel z przykładowymi danymi wejsciowymi i wynikowymi, potrzebuje macro które to zrobi automatycznie.

    Załączam plik w wersji Excel poprzedniej nie 2013 aby każdy mógł otworzyć ale robimy na wersję 2013.

    Dla przykładu rozpisałem recznie liczby od 1-6 i jest 15 unikalnych zestawów.

    1 2 3 4 5 6

    1 2 3 4
    1 2 3 5
    1 2 3 6
    1 2 4 5
    1 2 4 6
    1 2 5 6
    1 3 4 5
    1 3 4 6
    1 3 5 6
    1 4 5 6
    2 3 4 5
    2 3 4 6
    2 3 5 6
    2 4 5 6
    3 4 5 6


    pozdrawiam,

    1
  • #4 23 Sie 2014 23:27
    adamas_nt
    Moderator Programowanie

    Skoro już rozpisałeś, to użyj jej jako tabelki pomocniczej.
    Np:
    wpisz rozpiskę w L1:O15
    w H1 wpisz =PRZESUNIĘCIE($A$1;0;L1-1) i skopiuj 4 w prawo i 15 w dół
    w h16 =PRZESUNIĘCIE($A$2;0;L1-1) i skopiuj 4 w prawo i 15 w dół
    etc, etc

    Excel 2013 Kombinacje bez powtórzeń

    Ostatecznie możesz sobie napisać proste makro z wykorzystaniem tej rozpiski: pętla 'Do' z licznikiem wg kolumny A, wewnątrz której umieść podwójną 'For' (zewnętrzna 15 kroków, wewnętrzna 4) z przypisaniem: Cells(x + ((licznik'Do' -1)*15), y) = Cells(licznik'Do', liczba_z_tabelki)

    0
  • #5 24 Sie 2014 09:14
    ZbiguZbigu
    Poziom 9  

    adamas_nt bardzo dobry pomysł, dzięki za naprowadzenie. Mam do Ciebie prośbę czy mógłbyś napisać gotowe makro, ja nigdy nie pisałem makr i nie mam o tym pojecia a szkoda mi teraz czasu na uczenie się tego.

    Od razu może udało by ci się zrobić kolejny krok:

    z tych kombinacji czwórek które powstają po 15szt. z każdej szóstki chcę w kolejnych kolumnach wygenerować dla każdej z nich wszystkie możliwe unikalne szóstki (uzupełniamy je po dwie liczby z pozostałych nie wylosowanych i tworzymy wszsytkie możliwe szóstki dla każdej z tych czwórek). Zapisujemy wyniki jeden pod drugim jak poprzednio tylko w następnych kolumnach np. zaraz za pomocniczą tabelką L1:O15. Otrzymamy jako wynik takiego makra wszystkie układy szóstek (unikalne) zawierające w sobie wszystkie układy czwórek wygenerowanych uprzednio.

    Dzięki za pomoc!

    0
  • #6 25 Sie 2014 07:24
    adamas_nt
    Moderator Programowanie

    ZbiguZbigu napisał:
    szkoda mi teraz czasu na uczenie się tego
    Cóż, forum stworzono dla tych, którym tego czasu nie szkoda...

    Przy porannej kawie naszło mnie znaleźć rozwiązanie bez rozpiski i wyszła taka pętelka
    Kod: vb
    Zaloguj się, aby zobaczyć kod
    Może przyda się poszukującym w podobnych kwestiach.

    Z tabelką (którą nota bene przepisałem z błędem /rys/), w układzie jak opisano wyżej, sprawę załatwia takie makro (skoro zacząłem, niech skończę)
    Kod: vb
    Zaloguj się, aby zobaczyć kod
    I to byłoby wszystko, jeśli chodzi o gotowiznę. Proponuję jednak spróbować własnych sił. To nie jest bolesne...

    0
  • #7 25 Sie 2014 10:10
    ZbiguZbigu
    Poziom 9  

    Witam, niestety to makro nie działa, nie wiem dlaczego, podobno czegoś brakuje jakiegoś objektu? w załaczeniu zrzut z Excel.

    0
  • #8 26 Sie 2014 06:46
    adamas_nt
    Moderator Programowanie

    ZbiguZbigu napisał:
    niestety to makro nie działa
    Bo napisane w kodzie arkusza. Jeśli umieściłeś w module, zmień na
    Kod: vb
    Zaloguj się, aby zobaczyć kod
    lub coś podobnego.

    1
  • #9 04 Kwi 2015 22:39
    wachuwach
    Poziom 2  

    Witam,

    mam podobny problem. Rzecz wygląda następująco:
    Mam x klas od 1 do n. Trzeba każdą porównać za sobą bez powtórzeń.
    Byłbym wdzięczny gdyby ktoś mi opisał i wyjaśnił ogólny algorytm.
    Będę to implementował w C++.

    Pozdrawiam

    0
  • #10 04 Kwi 2015 23:00
    -psiak-
    Poziom 32  

    wachuwach napisał:
    ... każdą porównać za sobą ...

    No to jaki problem?
    W pętli po I od 1 do n porównujesz tb[I] z tb[I]

    0
  • #11 05 Kwi 2015 18:49
    wachuwach
    Poziom 2  

    problem jest taki, że to jest w jednej tablicy

    przykładowo mam 6 klas(elementów) {1,2,3,4,5,6} i powiedzmy chcę je wyświetlić tak:

    1,2
    1,3
    1,4
    1,5
    1,6
    2,3
    2,4
    2,5
    2,6
    3,4
    3,5
    3,6
    4,5
    4,6
    5,6

    Na pewno jest na to jakiś prosty algorytm tylko nic mi do głowy nie przychodzi.
    Oczywiście ma to być dla dowolnej ilości klas.

    Wesołych Świąt ;)

    Dodano po 29 [minuty]:

    Zrobiłem :D Prostsze niż myślałem.

    Kod: cpp-qt
    Zaloguj się, aby zobaczyć kod

    0
  • #12 05 Kwi 2015 19:51
    -psiak-
    Poziom 32  

    Po pierwsze to się nie nazywa każdy ze sobą bez powtórzeń, zaś wszystkie pary bez powtórzeń.
    Po drugie, nie stosuj i++ tam gdzie możesz zastosować ++i, to się zemści
    Po trzecie, nie używaj pojedynczych znaków 'l' do nazywania zmiennych, to się zemści
    Po czwarte, jak zastosujesz dobrodziejstwa C++ to wyjdzie:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    0
  • #13 24 Paź 2015 10:58
    oceanic24
    Poziom 2  

    adamas_nt napisał:
    W załączniku rozwiązanie bez użycia VBA, z wykorzystaniem funkcji LOS i wiersza pomocniczego. Prawdopodobieństwo wystąpienia powtórzeń istnieje tylko w teorii.



    Witam, szukam gotowego programu, który pokaże mi wszystkie możliwe kombinacje liczb.
    Czy jest ktoś łaskaw zrobić w Excelu wszystkie kombinację 3 liczb z puli 42 liczb i 49 oraz oraz to samo tylko z 2 liczb.

    Ktoś tutaj dodał załącznik tylko jest to 5 liczb z 10 i nie wiem jak to można zmodyfikować, iż się nie znam za bardzo na tym programie.

    Jestem gotowy nawet kupić przez allegro gotowy taki projekt, jeśli było by w tym dużo pracy stworzyć coś takiego.

    Chodzi mi o :
    (3) z 42 liczb wszystkich kombinacji
    (3) z 49 liczb wszystkich kombinacji
    oraz to samo, lecz tylko (2) z 42 i 49


    pozdrawiam i czekam na jakąś odpowiedź, kto się zna na tym programie i potrafiłby mi pomóc.

    W załączniku umieszczam projekt, który dodał adamas_nt.

    0
  • #14 24 Paź 2015 12:13
    -psiak-
    Poziom 32  

    Albo naucz się elementarnych podstaw narzędzia którego używasz, albo zapomnij o projekcie.

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    0
  • #15 24 Paź 2015 12:57
    JRV
    Specjalista - VBA, Excel

    -psiak- napisał:
    For i = 1 To 42
    For j = i+1 To 42

    Myslim że [code:1] For i = 1 To 42
    For j = i+1 To 41[/code:1]

    0
  • #16 24 Paź 2015 13:08
    -psiak-
    Poziom 32  

    JRV napisał:
    Myslim ze
    Code:
     For i = 1 To 42
    
        For j = i+1 To 41
    Źle myślisz, jeżeli już to:
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod
    ale i tak nie ma sensu tego robić, ponieważ dla i=42 pętla po j będzie od 43 do 42 czyli się nie wykona.

    0
  • #17 24 Paź 2015 17:55
    oceanic24
    Poziom 2  

    Niestety zbyt zielony jestem, abym chociaż wiedział gdzie te kody wkleić w Excelu. Chodziło mi o edycję tego pliku co podał autor powyżej. Wszystko pięknie tylko zamiast 42 licz jest 10 i jeszcze nie nie w kolejności tylko od 11-20.
    Chciałem co jakąś wypłatę zaszaleć i zagrać, aby były możliwe w 100%, że trafię trójkę. Jak podaję strona lotto prawdopodobieństwo wynosi od 1:128 czyli jakieś 160zł na kupony mini lotto musiałbym wydać.

    0
  • #18 24 Paź 2015 22:32
    -psiak-
    Poziom 32  

    A próbowałeś wpaść na forum malarski i powiedzieć: - Niestety zbyt zielony jestem, abym ... więc kto pomaluje mi mieszkanie?

    0
  • #19 26 Paź 2015 20:35
    oceanic24
    Poziom 2  

    Szukałem poradników w internecie jak zrobić w Excelu wszystkie kombinacje trójek w mini lotto. Tak, żeby mieć 100% pewności, że trafię trójkę. Nigdzie nie ma takich poradników, są tylko chyba na c++, ale to język dla profesjonalnych informatyków i na pewno zwykły zielony kowalski tego nie ogarnie w jeden dzień.
    Na Chomikuj są do pobrania wszystkie kombinacje dużego lotka czyli prawie 14 mln kombinacji, ale to nawet dla milionera jest nie osiągalne, ani nie opłacalne kiedy nie ma dużej kumulacji. Chyba, że podczas dużej kumulacji będzie miał ekipę, która w całej Polsce będzie oddawać blankiety do terminalów jak w ogóle nadążą z tak dużą ilością losów.

    Prawdopodobieństwo trafienia trójki w mini lotto jest od 1 do 128.

    Czyli trzeba obstawić 128 kombinacji. Czyli licząc jeden los za 1,25 trzeba na to wydać 160zł, aby mieć gwarancje na trafienie trójki.

    0
  • #20 26 Paź 2015 20:46
    -psiak-
    Poziom 32  

    Naucz się jakiegokolwiek języka programowania i zrób ten projekt samodzielnie, tym bardziej że ten projekt nie potrzebuje jakichś wygórowanych umiejętności. Lub zwyczajnie zamów wykonanie projektu.

    1