Condividi:        

[EXCEL2010] - URGENTE - MACRO: combinazione di somme possibi

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

[EXCEL2010] - URGENTE - MACRO: combinazione di somme possibi

Postdi 3olo » 25/02/15 10:54

Salve, sono nuovo di questo forum ,ho cercato tra i topic ma non sono riuscito a trovare ciò che cercherei.
Magari per voi è una cavolata, ma per lavoro sto impazzendo su una cosa che devo fare.
Praticamente mi trovo ad avere X colonne (5 o 6 al massimo) con una decina di numeri in ognuna.
Dovrei fare tutte le combinazioni di somme tra i vari valori di ogni colonna.
mi spiego con un esempio:
mettiamo che ho compilato la colonna A1 -A10 , la colonna B1:B6 e la colonna C1:C12
Dovrei trovare il modo di fare in automatico a1+b1+c1 ; a1+b1+c2; a1+b1+c3 ; a1+b2+c1 ....e via così.
Non voglio però sommare i valori della stessa colonna tra loro, ad esempio: a1+a2+a3...solo tutte le combinazioni tra i valori della colonna.

Lo step successivo sarebbe una volta trovato tutte queste combinazioni eliminare i numeri doppi dal risultato....
Aiutatemi vi prego perchè devo farlo ma non so come.
Vi ringrazio in anticipo
win 7, office 2007
3olo
Utente Junior
 
Post: 55
Iscritto il: 25/02/15 10:39

Sponsor
 

Re: [EXCEL2010] - URGENTE - MACRO: combinazione di somme pos

Postdi Flash30005 » 25/02/15 13:15

Beh dire che il numero di colonne è variabile complichi un po' il tutto
comunque ho considerato 6 colonne (da A alla colonna F) del Foglio1 e nel Foglio2 avrai l'output
copia l'intera macro e inseriscila in un modulo poi attivala(***)
Codice: Seleziona tutto
Sub SommaCombinaz()
Application.ScreenUpdating = False
Application.Calculation = xlManual
Dim Ws1 As Worksheet
Set Ws1 = Worksheets("Foglio1")
Dim Ws2 As Worksheet
Set Ws2 = Worksheets("Foglio2")
Ws2.Cells.Clear
UR1 = Ws1.Cells(Rows.Count, 1).End(xlUp).Row
UR2 = Ws1.Cells(Rows.Count, 2).End(xlUp).Row
UR3 = Ws1.Cells(Rows.Count, 3).End(xlUp).Row
UR4 = Ws1.Cells(Rows.Count, 4).End(xlUp).Row
UR5 = Ws1.Cells(Rows.Count, 5).End(xlUp).Row
UR6 = Ws1.Cells(Rows.Count, 6).End(xlUp).Row
For RR1 = 2 To UR1
    For RR2 = 2 To UR2
        For RR3 = 2 To UR3
            For RR4 = 2 To UR4
                For RR5 = 2 To UR5
                    For RR6 = 2 To UR6
                        UR2 = Ws2.Range("A" & Rows.Count).End(xlUp).Row + 1
                        SommaA = Ws1.Range("A" & RR1) + Ws1.Range("B" & RR2) + Ws1.Range("C" & RR3) + Ws1.Range("D" & RR4) + Ws1.Range("E" & RR5) + Ws1.Range("F" & RR6)
                        Ws2.Range("A" & UR2).Value = SommaA
                    Next RR6
                Next RR5
            Next RR4
        Next RR3
    Next RR2
Next RR1
Ws2.Activate
UR2 = Ws2.Range("A" & Rows.Count).End(xlUp).Row
    Ws2.Range("A1").Value = "Somma"
    Range("A1").Select
    Range("A1:A" & UR2).Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
    Range("A1:A" & UR2).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("B1"), Unique:=True
    Columns("A:A").Delete Shift:=xlToLeft
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub


(***) Attenzione il numero di combinazioni cresce in maniera esponenziale al variare del numero di righe che hai in ogni colonna
pertanto se il numero di righe è esiguo puoi attivare la macro altrimenti rinunciaci perché i tempi possono essere di diversi giorni
Considera che, se hai 5 sole righe sulle 6 colonne hai 5^6 = 15625 somme (ovvero righe nel foglio2)

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: [EXCEL2010] - URGENTE - MACRO: combinazione di somme pos

Postdi 3olo » 25/02/15 13:52

Ciao,
grazie mille,sei gentilissimo!!!
Ti rompo ancora un po' le scatole però, se mi permetti, ho visto che il numero di righe con i valori compilati di ogni colonna dev'essere per tutte lo stesso,altrimenti la macro va in crash. Siccome io avrei un numero di righe diverso per ogni colonna è possibile farlo considerare nella macro? Così invece di dover mettere zero nella cella ( e comunque la macro la fa "macinare" comunque aumentando le combinazioni esponenzialmente) verrebbe considerato solo fin dove ci sono numeri per ogni colonna.
Non so se mi sono spiegato bene, in questo modo riuscirei a snellire molto tutto, perchè di solito ho un paio di righe nella prima colonna, nella seconda una decina, nelle altre variabili tra tre e cinque. Ti ringrazio ancora tantissimo
win 7, office 2007
3olo
Utente Junior
 
Post: 55
Iscritto il: 25/02/15 10:39

Re: [EXCEL2010] - URGENTE - MACRO: combinazione di somme pos

Postdi 3olo » 25/02/15 14:24

posto un esempio ,così sono più chiaro

2058 1250 900 600
1500 1000
1600 1200
1700 1300
1400
1500

La macro dovrebbe riuscire a fare
2058+1250+900+600
poi 2058+1250+1000+600
poi 2058+1250+1200+600
poi 2058+1250+1300+600
poi 2058+1250+1400+600
poi 2058+1250+1500+600
poi 2058+1500+900+600
poi 2058+1500+1000+600
poi 2058+1500+1200+600
poi 2058+1500+1300+600
poi 2058+1500+1400+600
poi 2058+1500+1500+600

e avanti così , tutte le combinazioni, sommare un valore di una colonna per tutte le colonne ,tutte le combinazioni ...ce la si fa?
Dovrei sommare sempre un numero di valori uguale alle colonne comunque ,non so se è sotto inteso questo, ad esempio non voglio che faccia solo 2058+1250+900 senza considerare il 600, ad esempio.Questo dovrebbe levare tante combinazioni.
Comunque le colonne potrebbero essere al massimo 6 e le righe una decina, non di più, ma la disposizione e il numero è variabile ogni volta
win 7, office 2007
3olo
Utente Junior
 
Post: 55
Iscritto il: 25/02/15 10:39

Re: [EXCEL2010] - URGENTE - MACRO: combinazione di somme pos

Postdi Flash30005 » 25/02/15 14:56

A parte che adesso ti contraddici perché sommi 1500 più volte (insieme a 2058)
poi 2058+1500+1500+600

quando questo valore si trova sulla stessa colonna (A), mentre avevi detto che la somma doveva essere fatta con tutte le altre
Dovrei trovare il modo di fare in automatico a1+b1+c1 ; a1+b1+c2; a1+b1+c3 ; a1+b2+c1 ....e via così.
Non voglio però sommare i valori della stessa colonna tra loro, ad esempio: a1+a2+a3...

colonne

Ma tu l'hai provata la macro?
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: [EXCEL2010] - URGENTE - MACRO: combinazione di somme pos

Postdi 3olo » 25/02/15 15:12

sì, ma se non metto gli zeri mi va in errore, mi da una scritta "404"
win 7, office 2007
3olo
Utente Junior
 
Post: 55
Iscritto il: 25/02/15 10:39

Re: [EXCEL2010] - URGENTE - MACRO: combinazione di somme pos

Postdi 3olo » 25/02/15 15:20

cavolo, scusa flash, mi ha impaginato l'esempio in un altro modo rispetto a cui l'ho scritta!. Alle go una schermata della pagina se riesco

2058_1250 900 600
_____1500 1000
_____1600 1200
_____1700 1300
__________1400
__________1500

Ecco, scusa ancora
win 7, office 2007
3olo
Utente Junior
 
Post: 55
Iscritto il: 25/02/15 10:39

Re: [EXCEL2010] - URGENTE - MACRO: combinazione di somme pos

Postdi Flash30005 » 25/02/15 15:28

E' normale perché hai detto che avevi 5 o 6 colonne con dati e la macro come scritto è stata impostata per 6 colonne se ne hai meno va in errore e quindi va adattata
Più volte abbiamo detto di non fare esempi di come vorreste la soluzione ma di dire le cose come stanno sin dall'inizio specialmente se sapete che non siete in grado di intervenire nella correzione. :aaah

Comunque commenta le righe contrassegnate con '<<<<
Codice: Seleziona tutto
For RR1 = 2 To UR1
    For RR2 = 2 To UR2
        For RR3 = 2 To UR3
            For RR4 = 2 To UR4
                'For RR5 = 2 To UR5  '<<<<<< commenta o elimina
                  '  For RR6 = 2 To UR6  '<<<<<< commenta o elimina
                        UR2 = Ws2.Range("A" & Rows.Count).End(xlUp).Row + 1
                        SommaA = Ws1.Range("A" & RR1) + Ws1.Range("B" & RR2) + Ws1.Range("C" & RR3) + Ws1.Range("D" & RR4) '<<<< modifica la somma fino a RR4 e togli le altre due variabili
                        Ws2.Range("A" & UR2).Value = SommaA
                   ' Next RR6  '<<<<<< commenta o elimina
               ' Next RR5  '<<<<<< commenta o elimina
            Next RR4
        Next RR3
    Next RR2
Next RR1
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: [EXCEL2010] - URGENTE - MACRO: combinazione di somme pos

Postdi Flash30005 » 25/02/15 15:30

Noto ora l'esempio che hai riportato ma non cambia nulla ai fini del risultato con la macro modificata come ti ho detto su

In pratica la modifica consiste nell'adattamento a sole 4 colonne e non 6

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: [EXCEL2010] - URGENTE - MACRO: combinazione di somme pos

Postdi 3olo » 25/02/15 15:42

scusa, sono un mero progettista meccanico, in VBA un osso da brodo incredibile!!! :-)
Ho provato a compilare 6 colonne ma cavolo ,quando eseguo si blocca subito e mi da un messaggio con scritto solo: 400 , poi nel foglio due in a1 compare la scritta "somma" , nient'altro
win 7, office 2007
3olo
Utente Junior
 
Post: 55
Iscritto il: 25/02/15 10:39

Re: [EXCEL2010] - URGENTE - MACRO: combinazione di somme pos

Postdi 3olo » 25/02/15 16:08

se puoi darmi ancora una spintarella con questo problemino prometto che poi mi taglio le mani così non rompo più con ste cavolate :-)
win 7, office 2007
3olo
Utente Junior
 
Post: 55
Iscritto il: 25/02/15 10:39

Re: [EXCEL2010] - URGENTE - MACRO: combinazione di somme pos

Postdi 3olo » 25/02/15 16:23

adesso che ho provato a rifarla girare mi da "errore di runtime '9' :indice non incluso nell'intervallo "
Facendo Debug si pianta alla 7° riga: "Set Ws2 = Worksheets("Foglio2") " , ma non sono capace di correggere questo errore
win 7, office 2007
3olo
Utente Junior
 
Post: 55
Iscritto il: 25/02/15 10:39

Re: [EXCEL2010] - URGENTE - MACRO: combinazione di somme pos

Postdi ricky53 » 25/02/15 16:27

Ciao,
hai controllato bene il nome?
Verifica bene se nel tuo file esiste un foglio di nome "Foglio2" !
Magari c'è uno spazio tra "foglio" e "2"
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [EXCEL2010] - URGENTE - MACRO: combinazione di somme pos

Postdi 3olo » 25/02/15 16:38

Ciao, sì, ho controllato, e purtroppo c'è, boh!
Tu hai provato a farla girare?
win 7, office 2007
3olo
Utente Junior
 
Post: 55
Iscritto il: 25/02/15 10:39

Re: [EXCEL2010] - URGENTE - MACRO: combinazione di somme pos

Postdi ricky53 » 25/02/15 16:50

Ciao,
sicuramente Flash, che ti ha fornito la macro, l'avrà provata su un file che si è costruito ed avrà avuto esiti positivi.

Io per provarla dovrei costruirmi un file ... non ho letto tutta la discussione e potrei commettere errori nel costruirlo, puoi inviare un file di esempio, senza dati riservati, inoltre, come potrei verificare l'errore che ottieni.

Ho eseguito le prime righe del codice, prima del ciclo, e NON ho avuto errori ... ovviamente perchè ho inserito un foglio con il nome uguale a quello presente nel codice di Flash ...
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [EXCEL2010] - URGENTE - MACRO: combinazione di somme pos

Postdi 3olo » 25/02/15 23:13

ho capito qual è il problema:
la macro scritta così non considera i valori presenti nella prima riga, infatti il mio caso ,che da errore , è questo:

Immagine

il problema è che lui in riga uno non vede il 2058 e mi da errore perchè in colonna 1 non c'è niente.

me ne sono accorto facendo una cosa di questo genere

Immagine

il risultato nel foglio2 è un unico valore: 12 , che è la somma dei numeri della seconda riga!

Chiedo per favore se si può fare qualcosa per risolvere questo problema,scusate tanto, vi ringrazio in anticipo
win 7, office 2007
3olo
Utente Junior
 
Post: 55
Iscritto il: 25/02/15 10:39

Re: [EXCEL2010] - URGENTE - MACRO: combinazione di somme pos

Postdi Anthony47 » 25/02/15 23:19

Sospendi tutto per qualche minuto e prova questa macro, da inserire in un "modulo" del vba nuovo:
Codice: Seleziona tutto
Dim WArr, myR As Long, myC As Long, cSum As Double, wInd() As Long
Sub goodl2()
Dim myCnt As Long, myRes As Range, myData As String
'
Set myRes = Sheets("Foglio1").Range("L1")   '<<< Foglio/Cella da cui si creera' l' elenco risultati
myData = "A1"                           '<<< La cella dove comincia la tabella dati
'
myC = Range(Range(myData), Range(myData).End(xlToRight)).Count
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
mytim = Timer
ReDim wInd(1 To 10)
WArr = Range(myData).Resize(20, 12).Value
myRes.Resize(Rows.Count - 10, 1).ClearContents
'
Do
    cSum = RecurSum2(1)
    DoEvents
        If Application.WorksheetFunction.CountIf(myRes.Resize(myCnt + 1, 1), cSum) = 0 Then
            myRes.Offset(myCnt + 1, 0) = cSum
            myCnt = myCnt + 1
        End If
    If wInd(myC + 1) > 0 Then Exit Do 'FlExit Then Exit Do
Loop
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
MsgBox ("Completato in (sec): " & Format(Timer - mytim, "0.00"))
End Sub

Function RecurSum2(ByVal Dummy As Long) As Double
Dim locSum As Double, I As Long
'
For I = 1 To myC
    If WArr(wInd(I) + 1, I) = 0 Then
        wInd(I + 1) = wInd(I + 1) + 1
        wInd(I) = 0
    End If
    locSum = locSum + WArr(wInd(I) + 1, I)
    If I = 1 Then wInd(I) = wInd(I) + 1
Next I
RecurSum2 = locSum
End Function

Da excel: Alt-F11 per aprire l' editor delle macro; Menu /Inserisci /Modulo; copia il codice e incollalo nel frame di dx
Le righe marcate <<< sono da personalizzare con le tue informazioni.

Poi torni in Excel ed esegui la macro goodl2: alt-F8, scegli goodl2 dall' elenco di macro che ti propone, premi Esegui.
Ogni colonna di dati termina nella prima cella vuota, mentre sul lato destro la tabella deve avere una colonna vuota, che sara' usata per indicare la fine della tabella.
Prova con un set di dati minimi, e poi aumenta righe e colonne per vedere il tempo che viene richiesto.
Ulteriori velocizzazioni potrebbero essere possibili se si conoscesse meglio la il tipo di dati (interi, decimali, positivi, negativi) e i limiti dei loro possibili valori.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL2010] - URGENTE - MACRO: combinazione di somme pos

Postdi Flash30005 » 25/02/15 23:22

In tutti i for RR... metti 1 invece di 2 (normalmente la prima riga è riservata alla testata
[code][/For RR1 = 1 To UR1
For RR2 = 1 To UR2
For RR3 = 1 To UR3
For RR4 = 1 To UR4code]

La prossima volta, come avrai capito, dovrai essere più preciso, dare coordinate, o immagine della struttura dati o, meglio, il file

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: [EXCEL2010] - URGENTE - MACRO: combinazione di somme pos

Postdi 3olo » 25/02/15 23:40

...che dirvi...vi ringrazio!! Adesso faccio qualche prova e poi vi faccio sapere!

Gentilissimi ancora
win 7, office 2007
3olo
Utente Junior
 
Post: 55
Iscritto il: 25/02/15 10:39

Re: [EXCEL2010] - URGENTE - MACRO: combinazione di somme pos

Postdi 3olo » 19/05/15 22:31

Salve a tutti!
Ho usato con soddisfazione la tua macro Flash, ti ringrazio molto.
Però ho notato una cosa, guarda l'esempio di file che ho postato

http://www.filedropper.com/fileesempio

il risultato in foglio 2 mi include anche alcuni valori che non dovrebbero esserci, copia valori delle celle della prima colonna da sommare (nell'esempio1600 . 1700 , ecc) Si può fare qualcosa perchè si eviti ciò?
Grazie mille
win 7, office 2007
3olo
Utente Junior
 
Post: 55
Iscritto il: 25/02/15 10:39

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "[EXCEL2010] - URGENTE - MACRO: combinazione di somme possibi":


Chi c’è in linea

Visitano il forum: Nessuno e 28 ospiti