Excel Forum Per condividere esperienze su Microsoft Excel

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

  • Messaggi
  • OFFLINE
    Antonio Romano.2017
    Post: 2
    Registrato il: 06/02/2017
    Utente Junior
    2016
    00 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
  • OFFLINE
    by sal
    Post: 5.529
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 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
  • OFFLINE
    Antonio Romano.2017
    Post: 2
    Registrato il: 06/02/2017
    Utente Junior
    2016
    00 04/11/2018 17:04
    trovare addendi da una data somma e ....
    Grazie Sal, ci provo.
  • OFFLINE
    Antonio Romano.2017
    Post: 3
    Registrato il: 06/02/2017
    Utente Junior
    2016
    00 04/11/2018 17:23
    ecco il file spero sia chiaro, ho trovato questa prima parte di macro che trova gli addendi
  • OFFLINE
    dodo47
    Post: 1.975
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 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
  • OFFLINE
    Antonio Romano.2017
    Post: 4
    Registrato il: 06/02/2017
    Utente Junior
    2016
    00 04/11/2018 23:29
    Grazie Dodo, provo a inserire i tuoi consigli...
  • OFFLINE
    Antonio Romano.2017
    Post: 5
    Registrato il: 06/02/2017
    Utente Junior
    2016
    00 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
  • OFFLINE
    dodo47
    Post: 1.976
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 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
  • OFFLINE
    Antonio Romano.2017
    Post: 6
    Registrato il: 06/02/2017
    Utente Junior
    2016
    00 05/11/2018 15:11
    Ok… grazie ci provo, perché non sono molto ferrato...
  • OFFLINE
    dodo47
    Post: 1.977
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 05/11/2018 17:25
    Columns("D:XFD").ClearContents

    ad inizio macro




    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    Antonio Romano.2017
    Post: 7
    Registrato il: 06/02/2017
    Utente Junior
    2016
    00 05/11/2018 21:39
    Ancora grazie Dodo, ma la macro mi da questo errore che ti allego
  • OFFLINE
    dodo47
    Post: 1.978
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 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
  • OFFLINE
    Antonio Romano.2017
    Post: 8
    Registrato il: 06/02/2017
    Utente Junior
    2016
    00 06/11/2018 14:48
    Dodo sei un grande e ti ringrazio infinitamente, era quello che volevo, ma non ci sarei mai riuscito.