aiuto con formula



  • aiuto con formula
    di fitzgerald (utente non iscritto) data: 25/02/2016 15:36:49

    salve,

    ho un problema con il mio file "PROVA" che allego.
    praticamente nel foglio clienti vengono elencati i clienti con codice e nome cliente.
    nel secondo foglio conto, ho una formula in C2 che conta quanti clienti ci sono in base al codice cliente immesso in B1. Il problema è che mi servirebbe che contasse solamente il numero di clienti fino al codice cliente e non tutti.
    mi spiego meglio con un esempio:

    cliente bianchi: la formula conta 3 volte il cliente perchè cerca in tutta la lista del foglio clienti, mentre mi servirebbe che contasse solamente le volte fino al codice che si immette in B1 (in questo caso dovrebbe contare 2 e non 3 volte).

    Esiste il modo di poterlo fare?

    Grazie.



  • di Mister_x (utente non iscritto) data: 25/02/2016 16:28:37

    ciao

    file in macro bloccato da password

    comunque da inserire in un modulo questa funzione

    utilizzo nel mio file di prova che allego

    =valutacodcli(Foglio1!A:A;B1;Foglio1!B:B;B2)

    ciao


     
    Option Explicit
    Public Function ValutaCodCli(Codice As Range, Vcod As Variant, Cliente As Range, Ncli As Variant) As Long
    Dim i As Long, o As Long, nconta As Long
    Dim V_cod As Variant
    nconta = 0
    o = 0
    For Each V_cod In Codice
     If V_cod = Vcod Then
       i = V_cod.Row
       Exit For
     End If
    Next
    For Each V_cod In Cliente
      If V_cod = Ncli Then nconta = nconta + 1
      o = o + 1
      If o = i Then Exit For
    Next
    ValutaCodCli = nconta
    End Function






  • di Luca73 data: 25/02/2016 16:29:37

    Ioproverei con lamodifica sotto riportata ovvero aggiunge che la riga deve essere minore dellaposizione dove si trova il codice prodotto

    =MATR.SOMMA.PRODOTTO((SINISTRA(Lista_Escalas[CODICE];4)="2016")*(Lista_Escalas[CLIENTE]=B2)*(RIF.RIGA(Lista_Escalas[CLIENTE])<=CONFRONTA(B1;CLIENTI!A:A;0)))

    o anche

    =MATR.SOMMA.PRODOTTO((SINISTRA(Lista_Escalas[CODICE];4)="2016")*(Lista_Escalas[CLIENTE]=B2)*(RIF.RIGA(Lista_Escalas[CLIENTE])<=1+CONFRONTA(B1;Lista_Escalas[CODICE];0)))





  • di fitzgerald (utente non iscritto) data: 25/02/2016 16:35:59

    il fatto del 2016 si puo anche evitare.
    non è possibile usare un conta se?
    adesso provo le soluzioni proposte.



  • di Luca73 data: 25/02/2016 18:34:59

    Senza usare la condizione 2016 la formula dovrebbe essere
    usando conta.se

    =CONTA.SE(SCARTO(Lista_Escalas[[#Intestazioni];[CLIENTE]];1;0;CONFRONTA(B1;Lista_Escalas[CODICE];0);1);"="&CONTO!B2)





  • di fitzgerald (utente non iscritto) data: 26/02/2016 08:39:36

    Grazie mille.
    Alla fine ho scelto di usare questa:
    =MATR.SOMMA.PRODOTTO((Lista_Escalas[CLIENTE]=B2)*(RIF.RIGA(Lista_Escalas[CLIENTE])<=CONFRONTA(B1;CLIENTI!A:A;0)))

    solamente perchè è la più breve.
    Meno lunghe e complesse sono le formule e meno si appesantisce il file, giusto?
    Diciamo allora che è meramente per una questione di ottimizzazione che ho scelto questa.

    Saluti e grazie ancora