Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

trovare addendi da una data somma e .....

Ultimo Aggiornamento: 06/11/2018 14:48
Post: 2
Registrato il: 06/02/2017
Utente Junior
2016
OFFLINE
02/11/2018 16:58

Buongiorno a tutti, sono nuovo del forum , voglio approfittare del vostro buon cuore e chiedervi di aiutarmi.
Il mio problema è quello di riuscire a trovare in una colonna formata da un minimo di 10 numeri ad un max di 30 numeri, tutti interi, la somma che va da un minimo X ad un massimo Y. Si ottengono XX combinazioni e gli addendi che devono essere 6 sono XXX, poi vengono estratti solo quelli formati da 2 dispari e 4 pari, 3 dispari e 3 pari, 4 dispari e 2 pari. Io purtroppo sono molto limitato in informatica.
Vi ringrazio tutti...
Esempio: prendo i primi 10 numeri ma possono essere diversi
colonna A somma 36 combinazioni date 4
1 2 4 5 6 7 8
2 2 3 5 6 7 9
4 2 3 4 6 8 9
5 2 3 4 6 7 10
3
7
10
9
8
6
Post: 5.529
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
02/11/2018 17:35

Somme
Ciao non so chi l'ha detto, ma un file d'esempio vale più di mille parole.

crea un file e metti il risultato voluto indicando quanto più possibile le varianti che potrebbero esserci.

Ciao By Sal [SM=x423051]

se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 2
Registrato il: 06/02/2017
Utente Junior
2016
OFFLINE
04/11/2018 17:04

trovare addendi da una data somma e ....
Grazie Sal, ci provo.
Post: 3
Registrato il: 06/02/2017
Utente Junior
2016
OFFLINE
04/11/2018 17:23

ecco il file spero sia chiaro, ho trovato questa prima parte di macro che trova gli addendi
Post: 1.975
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
04/11/2018 18:28

Ciao
Conosco discretamente quella routine della TM.

Il ciclo che devi analizzare è il seguente:
    For J = 0 To UBound(Rslt)
        arr0 = Split(Rslt(J), ",")
        For I = 0 To UBound(arr0)
          Cells(drow, dcol) = Cells(arr0(I) + 2, 2)
          drow = drow + 1
        Next
        dcol = dcol + 1
        drow = 1
    Next


NOTA: nella variabile array Rslt vanno a finire tutte le combinazioni che generano la somma richiesta in B2.
Da tenere presente che tali combinazioni NON rappresentano i numeri che compongono la somma, BENSI' le celle della colonna B (a partire dalla riga 3 - quindi 3=1) che contengono i numeri.
Per esempio, se Rslt(0) è pari a 3,5,7
le celle che compongono la somma si trovano in:
B5,B7 e B9.

Ciò premesso, per sapere da quanti "numeri" è composta la somma del risultato, e visto che nell' Rlst gli elementi sono separati da virgola (,), potresti contare tali virgole per ogni item dell'array e, se corrispondono a quanto cercato, stampare solo quelle.

Esempio: cerchi solo le combinazioni con 5 addendi:
    For J = 0 To UBound(Rslt)
      quanti = Len(Rslt(J)) - Len(Replace(Rslt(J), ",", "")) + 1 '<<<<<<<
      If quanti = 5 Then '<<<<<<
        arr0 = Split(Rslt(J), ",")
        For I = 0 To UBound(arr0)
          Cells(drow, dcol) = Cells(arr0(I) + 2, 2)
          drow = drow + 1
        Next
        dcol = dcol + 1
        drow = 1
      End If '<<<<<<
    Next


Saluti


[Modificato da dodo47 04/11/2018 18:55]
Domenico
Win 10 - Excel 2016
Post: 4
Registrato il: 06/02/2017
Utente Junior
2016
OFFLINE
04/11/2018 23:29

Grazie Dodo, provo a inserire i tuoi consigli...
Post: 5
Registrato il: 06/02/2017
Utente Junior
2016
OFFLINE
04/11/2018 23:54

Dodo, ho apportato le variazioni, ma a me servirebbe che estraesse le colonne già formate dal numero di addendi da me richiesti ( 4,5,6,) e non il riferimento alla colonna B e le relative celle, perché non mi da tutte le combinazioni ma evidenzia solo il riferimento. Non so se sono stato chiaro
Post: 1.976
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
05/11/2018 09:57

Quelli che vengono stampati sul foglio sono comunque gli addendi.

Io ti ho solo suggerito (cercando di spiegare il meccanismo dei riferimenti) come farti stampare le colonne con solo n addendi. Come vedi la somma delle singolo colonne è 33, come richiesto in B2.

Ti suggerisco di inserire la cancellazione delle colonne da D in poi ad inizio macro, in modo da eliminare i risultati dell ricerca precedente.

saluti
[Modificato da dodo47 05/11/2018 10:21]
Domenico
Win 10 - Excel 2016
Post: 6
Registrato il: 06/02/2017
Utente Junior
2016
OFFLINE
05/11/2018 15:11

Ok… grazie ci provo, perché non sono molto ferrato...
Post: 1.977
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
05/11/2018 17:25

Columns("D:XFD").ClearContents

ad inizio macro




Domenico
Win 10 - Excel 2016
Post: 7
Registrato il: 06/02/2017
Utente Junior
2016
OFFLINE
05/11/2018 21:39

Ancora grazie Dodo, ma la macro mi da questo errore che ti allego
Post: 1.978
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
06/11/2018 10:01

Abbi pazienza, quel codice non è una macro a se stante, ma è la parte di codice che devi sostituire nell'originale (Sub startSearch()

Comunque allego file: In C1 (cella gialla) metti quanti addendi vuoi e premi il pulsante.


saluti




[Modificato da dodo47 06/11/2018 10:37]
Domenico
Win 10 - Excel 2016
Post: 8
Registrato il: 06/02/2017
Utente Junior
2016
OFFLINE
06/11/2018 14:48

Dodo sei un grande e ti ringrazio infinitamente, era quello che volevo, ma non ci sarei mai riuscito.
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 17:44. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com