Condividi:        

Trovate tutte le cobinazioni di numeri senza ripetizioni

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Trovate tutte le cobinazioni di numeri senza ripetizioni

Postdi Artenia » 29/07/12 17:02

Salve a tutti, ho provato a spulciare un po sul forum e sul web ma fino ad ora non sono riuscita a trovare nulla al mio scopo che mi aiuti con l'excel.

Il mio problema è questo: avrei bisogno di trovare tutte le variabili combinazioni di numeri, senza ripetizioni,partendo da una serie di numeri scritti in una colonna

Cerco di spiegarmi meglio... la mia colonna è precisamente questa:
A B C D ....
70
70
40
40
40
35
35
35
35
35
30
30
30
30
30
25
25
25
25
25
25
25
25
20
15
In base alla colonna A dovrei riuscire a compilare B D C E ecc con tutte le con tutte le possibili sequenze casuali di A non ripetute... Mi rendo conto che è un numero praticamente quasi infinito...e farlo a mano è improponibile.

Spero di essere stata abbastanza chiara.
Grazie per il vostro aiuto.
Arty
Artenia
Newbie
 
Post: 5
Iscritto il: 29/07/12 16:44

Sponsor
 

Re: Trovate tutte le cobinazioni di numeri senza ripetizioni

Postdi Flash30005 » 29/07/12 18:44

Ciao Artenia e benvenuta nel Forum

Cosa intendi per
Artenia ha scritto:riuscire a compilare B D C E ecc con tutte le possibili sequenze casuali di A non ripetute


Per questo è sufficiente solo la colonna B :roll:

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Trovate tutte le cobinazioni di numeri senza ripetizioni

Postdi Artenia » 29/07/12 19:16

Grazie del benvenuto =)

Allora... i numeri dovrebbero essere singoli per ogni cella incolonnati per 25 righe e quante colonne servono per tutte le variabili...
Ti faccio un esempio

A B C D E....
1 1 2 2 1
2 3 4 3 3
3 4 3 1 4
4 2 1 4 2....
.
.
.

Nella prima colonna ci sono i miei 25 numeri conosciuti ( ovveri quelli nel primo post ) nelle colonne sucessive dovrebbero esserci le varie sequenze casuali ma devono esserci tutte, e sono taaaaanti numeri lo so.... 25^25... parliamo una cifra totale di 88.817.841.970.012.523.233.890.533.447.265.625 combinazioni.. hemm sempre che il mio pc ce la faccia XD ma non dovrebbe avrete grossi problemi dai :P
La tabella così formata mi servirà poi per generarmi le successive altre due tabelle già funzionanti in base alla prima ovvero quella che stò cercando di fare.
Artenia
Newbie
 
Post: 5
Iscritto il: 29/07/12 16:44

Re: Trovate tutte le cobinazioni di numeri senza ripetizioni

Postdi Flash30005 » 29/07/12 21:09

Beh allora perdona ma
se devi cercare tutte* le combinazioni possibili dei numeri esistenti (non duplicati) nella colonna A
perché non filtri la colonna (metodo avanzato) e selezioni copia univoca eliminando così i doppioni,
poi potresti anche ordinare (non ha senso averli in disordine e duplicati quando vuoi ottenere tutte* le combinazioni)

(*) Inoltre penso che una volta ottenuti i 25 numeri effettivi non occorra un Pc più potente ma un foglio di excel che la Microsoft debba ancora inventare :D

Ciao

P.s. cerco di capire questa tua esigenza ma non trovo una giustificazione plausibile
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Trovate tutte le cobinazioni di numeri senza ripetizioni

Postdi Artenia » 29/07/12 22:44

Ciao e grazie per la tua risposta =)

Dunque... forse ho capito male ma tu facendomi filtrare la colonna A mi fai togliere i numeri doppi su quella colonna giusto? Il problema è che lì i doppioni devono rimanere ma non vorrei avere doppioni di combinazioni nelle colonne B C D E ecc...

Muahuahuahua Uso open office .. ma credo che nemmeno loro lo abbiano inventato XD Comunque ci proviamo...

Beh è un po complicato, praticamente queste combinazioni di numeri mi servono per calcolare la percentuale su un numero fisso... tipo 100+ 20%+40%+25%+20%+25%
come vedi in questo caso il 20 ed il 25 si possono ripetere 2 volte... ma anche 4 o 5 volte... a seconda del risultato che poi mi serve... per questo la tabella dovrebbe poi contenere tutti i risultati delle varie percentuali.. mi rendo conto che è complesso quello che ho spiegato e che sicuramente c'è un metodo meno incasinato per farlo ma a me servono i risultati visibili con tutte le variabili... ecco spiegato il mistero XD
Artenia
Newbie
 
Post: 5
Iscritto il: 29/07/12 16:44

Re: Trovate tutte le cobinazioni di numeri senza ripetizioni

Postdi Flash30005 » 30/07/12 01:25

Le combinazioni possibili non sono 25^25 ma 25! (fattoriale)
quindi 15.511.210.043.330.985.984.000.000
Infatti le combinazioni di 4 numeri generano 24 combinazioni (4!) e non 256 (4^4)
Codice: Seleziona tutto
111111222222333333444444
224433114433114422113322
342342341341241241231231
433224433114422114322113

Il fatto che le combinazioni siano molte di meno e anche facendo la considerazione che molte colonne saranno uguali e sono da eliminare
(avendo dei numeri che si ripetono come il 70, 40, 35, 30 e 25)
come da esempio dei 4 numeri avrai
al posto di 1,2,3,4
70
70
40
35
e al posto di 2,1,3,4 avrai ancora
70
70
40
35

rimane sempre il problema dove svilupparle e questa frase
Artenia ha scritto:...Comunque ci proviamo

mi lascia perprlesso perché forse non consideri la quantità di dati da "immagazzinare"

Considera solo che un file testo composto da 6 numeri per riga con 622.000 di righe pesa 11 Gb

Quindi se mi dici dove inserire questi dati prenderò in considerazione la tua richiesta

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Trovate tutte le cobinazioni di numeri senza ripetizioni

Postdi Artenia » 31/07/12 03:45

Caspita... Immaginavo che fossero tanto tutti quei dati ma non credevo raggiungessero tali dimensioni....
In più pensavo che la cosa si potesse fare in modo semi automatico ma ammettendo a questo punto che sia fattibile se ci devi lavorare tu sopra e a lungo non me la sento di chiederti una cosa simile...

Però mi è venuta in mente una idea forse più facile e più fattibile, correggimi se sbaglio...

Avendo il numero di partenza fisso ed il numero finale che voglio raggiungere si riuscirebbe a fare un calcolo delle percentuali che mi servono per arrivarci? ( le percentuali sono sempre quella famosa sfilza di numeri che ho messo nel primo post )
Unica cosa è che non mi serve la somma delle percentuali ... esempio, se io sulla mia calcolatrice faccio questo calcolo: 100+20%+35%+20% SENZA premere alla fine il tasto = ottengo questo risultato 1944 che è quello che mi serve
Mi capita invece molto spesso, errore che ha fatto anche mio marito, che mi senta dire.. beh è il 75% perchè 20 + 35 + 20=75 ma 100+75% = 175 ovviamente
Quindi, in base alle variabili delle percentuali che io ho e conoscendo il numero di partenza ed il numero finale c'è la possibilità di far fare all' excel il calcolo delle percentuali ( che ho e che possono essere solo quelle ) che mi servono per raggiungere il numero finale anche sgarrando di qualche numero?
Oppure senza sgarrare, perchè essendo un foglio di calcolo non credo che mi possa dare un numero approssimativo semmai mi dà errore... c'è la possibilità di far aggiungere all'excel la percentuale mancante (che potrebbe essere l' 1% che nella mia tabella non c'è per esempio) per arrivare al numero finale?

Dici che così sia più fattibile?

Grazie ancora della tua pazienza =)
Artenia
Newbie
 
Post: 5
Iscritto il: 29/07/12 16:44

Re: Trovate tutte le cobinazioni di numeri senza ripetizioni

Postdi Flash30005 » 31/07/12 07:24

Se vuoi ottenere n combinazioni stabilite a priori e disuguali tra loro puoi usare questa macro da inserire in un modulo
Codice: Seleziona tutto
Sub Combinazioni()
Cells.ClearContents
Dim VN(7) As Integer
Dim VM(7) As Integer
Dim VC(7) As Integer
VN(1) = 70
VN(2) = 40
VN(3) = 35
VN(4) = 30
VN(5) = 25
VN(6) = 20
VN(7) = 15
VM(1) = 2
VM(2) = 3
VM(3) = 5
VM(4) = 5
VM(5) = 8
VM(6) = 1
VM(7) = 1
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Randomize (Timer)
For CC = 1 To 200  '<<<<<<< qui determini il numero delle combinazioni, in questo caso 200

For ResVc = 1 To 7
VC(ResVc) = 0
Next ResVc
For NC = 1 To 25

Casuale:
    NCas = Int(Rnd() * 7) + 1
    VC(NCas) = VC(NCas) + 1
    If VC(NCas) > VM(NCas) Then GoTo Casuale
    Worksheets("Foglio1").Cells(NC, CC).Value = VN(NCas)
Next NC

If CC > 1 Then
LastA = CC - 1
LastB = CC
ReDim myArrC(1 To LastB)

myVArrA = Range(Cells(1, LastA), Cells(25, LastA)).Value
myVArrB = Range(Cells(1, 1), Cells(25, LastB)).Value
For I = LBound(myVArrA, 1) To LastA
On Error Resume Next
myItem = myVArrA(1, I) & myVArrA(2, I) & myVArrA(3, I) & myVArrA(4, I) & myVArrA(5, I) & myVArrA(6, I) & myVArrA(7, I) & myVArrA(8, I) & _
                myVArrA(9, I) & myVArrA(10, I) & myVArrA(11, I) & myVArrA(12, I) & myVArrA(13, I) & myVArrA(14, I) & myVArrA(15, I) & myVArrA(16, I) & _
                myVArrA(17, I) & myVArrA(18, I) & myVArrA(19, I) & myVArrA(20, I) & myVArrA(21, I) & myVArrA(22, I) & myVArrA(23, I) & myVArrA(24, I) & myVArrA(25, I)
    AColl.Add myItem, myItem
Next I
On Error GoTo 0
For I = CC To LastB
    Err.Clear
    On Error Resume Next
        yrItem = myVArrB(1, I) & myVArrB(2, I) & myVArrB(3, I) & myVArrB(4, I) & myVArrB(5, I) & myVArrB(6, I) & myVArrB(7, I) & myVArrB(8, I) & _
                myVArrB(9, I) & myVArrB(10, I) & myVArrB(11, I) & myVArrB(12, I) & myVArrB(13, I) & myVArrB(14, I) & myVArrB(15, I) & myVArrB(16, I) & _
                myVArrB(17, I) & myVArrB(18, I) & myVArrB(19, I) & myVArrB(20, I) & myVArrB(21, I) & myVArrB(22, I) & myVArrB(23, I) & myVArrB(24, I) & myVArrB(25, I)
        scrvar = AColl.Item(yrItem)
        errNum = CLng(Err.Number)
    On Error GoTo 0
        If errNum = 424 Then
        J = J + 1
        myArrC(J) = yrItem
    Else
        GoTo Casuale
    End If
Next I
End If

Next CC
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub


Per quanto riguarda l'ultimo quesito
...c'è la possibilità di far aggiungere all'excel la percentuale mancante ... per arrivare al numero finale?

é sufficiente sapere quale è il numero finale e chiaramente quello di partenza, nonché quali passaggi percentuali hai già inserito.

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Trovate tutte le cobinazioni di numeri senza ripetizioni

Postdi Artenia » 01/08/12 09:29

E' fattibile!!! Grazie grazie grazie! Mi hai tolto ore ed ore di prove sulla calcolatrice e te ne sono infinitamente grata! :D

Pomeriggio la provo ed al limite ti faccio sapere, Grazie mille ancora!
Artenia
Newbie
 
Post: 5
Iscritto il: 29/07/12 16:44

Re: Trovate tutte le cobinazioni di numeri senza ripetizioni

Postdi carlo.footballer » 10/07/15 10:25

ciao a tutti, ho un grosso problema (che ora vi espongo):

ho a disposizione un insieme di 9 numeri, {2, 3, 4, 5, 6, 7, 8, 9, 10}, e devo trovare tutti i modi per poterli combinare tra loro in gruppi di 4.
In termini di calcolo combinatorio se non sbaglio si parla di Combinazioni con Ripetizione, in quanto ogni numero può essere ripetuto anche 4 volte (posso avere ad esempio {2,2,2,2}), ma la sequenza {2,3,4,5} è uguale alla sequenza {5,4,3,2}... l'importante è che il numero sia nella sequenza e non in che posizione sia. Come posso ottenere questo elenco di combinazioni? (se effettivamente sono combinazioni con ripetizione dovrei trovare 495 combinazioni). Sottolineo che a me non serve il numero di combinazioni possibili ma l'elenco delle combinazioni
carlo.footballer
Newbie
 
Post: 1
Iscritto il: 10/07/15 10:16

Re: Trovate tutte le cobinazioni di numeri senza ripetizioni

Postdi Anthony47 » 14/07/15 02:50

Ciao carlo.footballer, benvenuto nel forum.
Hai fatto male ad accodarti a una discussione cosi' vecchia e comunque diversa dal tuo quesito; infatti il tuo messaggio e' passato "quasi" inosservato.
Non sono un fin statistico, ma si sembra strano che combinando 9 elementi a gruppi di 4 con ripetizioni si debbano ottenere 495 combinazioni; a me sembra che siano 9*9*9*9, cioe' 6561...

Comunque nella mia interpretazione il tutto si puo' sviluppare con questo codice:
Codice: Seleziona tutto
Dim WKArr(), VArr, wIndx() As Long, myCnt As Long, myGrp As Long

Sub reComb()
Dim myList As Range, listCnt As Long, myDest As Range, hMany As Long

Set myList = Sheets("Foglio2").Range("B2:M2")  '<<< L'area ORIZZONTALE con i valori da combinare
Set myDest = Sheets("Foglio3").Range("a1")      '<<<2 L'area in cui sara' creata la nuova lista (Vedi Testo)
myGrp = 0                                       '<<< La classe delle combinazioni; 0 = "massima"
'
mystart = Timer: [O1] = mystart
hMany = Application.WorksheetFunction.CountA(myList)
If myGrp = 0 Then myGrp = hMany                 'adatta myGRP
If myGrp > hMany Then myGrp = hMany
'
myDest.Resize(Rows.Count - myDest.Row - 5, myGrp + 1).ClearContents

listCnt = hMany 'myList.Count
expline = listCnt ^ myGrp
If expline > 1000000 Then
    rispo = MsgBox("Saranno calcolate solo 1Mill di linee, invece di " & Format(expline / 1000000, "0.00") & "Mill" & vbCrLf _
        & "Premere Ok per Continuare, Annulla per Abortire", vbOKCancel)
    If rispo <> vbOK Then Exit Sub
    expline = 1000000
End If
ReDim WKArr(1 To (expline) + 1, 1 To listCnt)
ReDim wIndx(1 To myGrp)
VArr = myList.Cells(1, 1).Resize(1, listCnt).Value
myCnt = 1
Call Recur(1, listCnt, 1)
myDest.Resize(myCnt + 10000, myGrp + 1).ClearContents
myDest.Resize(myCnt, myGrp) = WKArr
[O2] = Timer
MsgBox ("Completato, (h:m:s): " & Format((Timer - mystart) / 24 / 3600, "hh:mm:ss"))
End Sub


Sub Recur(ByVal Iniz As Integer, ByVal Final As Integer, ByVal myLevel As Integer)
Dim myI As Integer, myK As Integer
'
If myCnt >= 1000000 - 5 Then GoTo fEnd
For myK = 1 To Final
DoEvents
    wIndx(myLevel) = wIndx(myLevel) + 1
    If wIndx(myLevel) > Final Then wIndx(myLevel) = 1
    If myLevel = myGrp - 0 Then              '4
        For myI = Iniz To Final
            Call PopWk
            wIndx(myLevel) = wIndx(myLevel) + 1
        Next myI
        wIndx(myLevel) = 0
        flexit = True
    Else
        Call Recur(1, Final, myLevel + 1)
    End If
    If flexit = True Then Exit For
Next myK
fEnd:
End Sub

Sub PopWk()
'
For I = 1 To UBound(wIndx, 1)
    WKArr(myCnt, I) = VArr(1, wIndx(I))
Next I
myCnt = myCnt + 1
End Sub
Va inserito tutto in un nuovo "modulo" del vba; per questo, partendo da Excel:
Da excel: Alt-F11 per aprire l' editor delle macro; Menu /Inserisci /Modulo; copia il codice e incollalo nel frame di dx.
Personalizza le righe marcate <<< come da tua situazione; ricorda che nell'area myList solo le celle compilate saranno prese in considerazione, e se myGrp (la classe di combinazioni) viene tenuta a "0" allora la classe sara' impostata pari al numero di elementi.
Quando sei pronto manda in esecuzione la Sub reComb; da Excel: Alt-F8 per avere l' elenco delle macro disponibili, seleziona reComb e premi Esegui.
Il mio file e' reperibile qui: https://www.dropbox.com/s/ha66hjhd1ghu9 ... .xlsm?dl=0

Nota che l' area in cui verranno scritte le combinazioni e' di dimensioni non prevedibile; quindi ti suggerisco di non inserire tue informazioni nelle stesse colonne.

Ciao, fai sapere se il tutto e' di qualche utilita'.
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Trovate tutte le cobinazioni di numeri senza ripetizioni":

Connettere pc senza wifi
Autore: nippon
Forum: Software Windows
Risposte: 8

Chi c’è in linea

Visitano il forum: Nessuno e 13 ospiti