Sviluppare funzionalita su Microsoft Office con VBA Sumif scala riga successiva

LoginRegistrati
Stai vedendo 10 articoli - dal 1 a 10 (di 10 totali)
  • Autore
    Articoli
  • #26033 Risposta

    Buonasera a tutti!
    Sto avendo problemi con questo codice

    Foglio2.Range("D3").End(xlUp).Offset(1, 0) = Application.WorksheetFunction.SumIf(Range("C3:C1000003"), Foglio2.Range("B3").End(xlUp).Offset(1, 0), Range("E3:E1000003")) - Application.WorksheetFunction.SumIf(Foglio3.Range("B3:B1000003"), Foglio2.Range("B3").End(xlUp).Offset(1, 0), Foglio3.Range("E3:E1000003"))

    Vorrei che ripetesse l'operazione si sumif nel foglio 2, pescando i valori dal foglio 1, ma utilizzando come criterio i valori (nomi) estrapolati dalla colonna B del foglio 2. Mi funziona solo per la prima riga, nella seconda no.

    Qualcuno può aiutarmi?

    Grazie tante in anticipo!

    LorenzoExcel91

    #26035 Risposta
    Marius44
    Marius44
    Moderatore
      21 pts

      Buondì

      Penso sia meglio allegare il file (senza dati sensibili) per vedere l'intera macro ed i riferimenti.

       

      Ciao,

      Mario

      #26068 Risposta

      Buongiorno Marius,
      ecco il foglio Excel contenente la macro. Grazie tante!

      Allegati:
      You must be logged in to view attached files.
      #26216 Risposta

      Ciao a tutti
      Ciao Marius, ho allegato il file come mi hai chiesto. Qualcuno può aiutarmi?
      Sto diventando matto...
      Grazie a chi mi risponderà!!!

      #26217 Risposta
      albatros54
      albatros54
      Moderatore
        51 pts

        se ho capito, nel modulo del "foglio1", inserisic questo codice e lo esegui.

        Option Explicit
        Sub SOMMASE()
            Dim finalrow As Integer, finalrow2 As Integer
            Dim a As Integer
            finalrow = Foglio1.Cells(Rows.Count, 1).End(xlUp).Row
            finalrow2 = Foglio2.Cells(Rows.Count, 1).End(xlUp).Row
            For a = 3 To finalrow
                Foglio2.Range("A" & finalrow2 + 1) = Foglio1.Range("a" & a)
                finalrow2 = finalrow2 + 1
                Foglio2.Range("B" & a).End(xlUp).Offset(1, 0) = WorksheetFunction.SumIf(Foglio1.Range("A3:A100"), Range("A" & a), Foglio1.Range("B3:B100"))
            Next
        End Sub

         

         


        Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
        Sempre il mare, uomo libero, amerai!
        ( Charles Baudelaire )
        #26220 Risposta

        Ciao Albatros54,
        intanto grazie.
        Ipotizziamo che il foglio 1 sia vuoto: nella prima riga disponibile inserisco il nome del prodotto (prodotto A) e le quantità ed eseguendo la macro, questa calcoli il sumif nel foglio 2 (magazzino) andando a riportare il nome del prodotto una sola volta, ma sommandone le quantità. Ma vorrei che fatta questa operazione, Excel scalasse di una riga successiva sia nel foglio 2, che nel foglio 2, riga che accoglierà un nuovo e diverso prodotto (prodotto B).
        Premetto che ho già la macro che rimuove i duplicati, ho solo bisogno di un codice che faccia il sumif nella riga 1, poi scali alla 2, poi alla 3 (ecc) all'interno del foglio 2.
        Spero di esser stato chiaro, ma mi rendo conto di aver fatto confusione.
        Grazie infinite!!!

        #26314 Risposta

        Qualche anima pia che possa aiutarmi? 🙂
        Grazie infinite!!!

        #26315 Risposta
        Marius44
        Marius44
        Moderatore
          21 pts

          Ciao

          Scusa il ritardo ma mi era sfuggita completamente la discussione.

          Prova con questa macro

          Sub Somma_condizionata()
          Set sh1 = Sheets("A")
          Set sh2 = Sheets("B")
          ur1 = sh1.Cells(Rows.Count, 1).End(xlUp).Row
          ur2 = sh2.Cells(Rows.Count, 1).End(xlUp).Row
          sh2.Range(sh2.Cells(3, 1), sh2.Cells(ur2+3, 2)).ClearContents
          sh1.Range(sh1.Cells(3, 1), sh1.Cells(ur1, 1)).Copy
          sh2.Range("A3").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                  :=False, Transpose:=False
          Application.CutCopyMode = False
          sh2.Range("$A$2:$A$" & ur1).RemoveDuplicates Columns:=1, Header:=xlYes
          ur2 = sh2.Cells(Rows.Count, 1).End(xlUp).Row
          For i = 3 To ur2
            For j = 3 To ur1
              If sh1.Cells(j, 1) = sh2.Cells(i, 1) Then n = n + sh1.Cells(j, 2)
            Next j
            sh2.Cells(i, 2) = n
            n = 0
          Next i
          End Sub

          Il codice va in un Modulo standard e non nel Modulo del Foglio.

          Fai sapere. Ciao,

          Mario

          Allegati:
          You must be logged in to view attached files.
          #26317 Risposta
          Oscar
          Oscar
          Partecipante
            3 pts

            Prona così

            `Sub SOMMASE()
            Range("A3:B100") = ""
                For y = 3 To 5  'Seleziona(A,B,C)
                       Foglio2.Range("B" & y) = WorksheetFunction.SumIf(Foglio1.Range("A3:A100"), Foglio1.Range("A" & y), Foglio1.Range("B3:B100"))
                       Foglio2.Range("A" & y) = Foglio1.Range("A" & y)
                Next
            End Sub`
            Allegati:
            You must be logged in to view attached files.
            #26399 Risposta

            Ciao a tutti, scusate per la risposta ultratardiva!
            Vi ringrazio, la macro funziona!
            Grazie ancora 🙂

          LoginRegistrati
          Stai vedendo 10 articoli - dal 1 a 10 (di 10 totali)
          Rispondi a: Sumif scala riga successiva
          Gli allegati sono permessi solo ad utenti REGISTRATI
          Le tue informazioni:



          vecchio frac - 2750 risposte

          albatros54
          albatros54 - 1009 risposte

          patel
          patel - 907 risposte

          Marius44
          Marius44 - 786 risposte

          Luca73
          Luca73 - 675 risposte