Login Registrati
Stai vedendo 22 articoli - dal 1 a 22 (di 22 totali)
  • Autore
    Articoli
  • #47390 Score: 0 | Risposta

    Ale.1989
    Partecipante

      Buongiorno a tutti, ho un problemino con un pezzo di codice, in pratica tramite questa parte dovrei sommare tutte le celle piene sotto ad AM2 a quelle trovate in una tabella contenente tutte le settimane. e non riesco a farla funzionare, qualcuno può aiutarmi?

      Grazie

      Allego il file per chi volesse vederlo.

      La macro in questione si chiama SOMMA ed è applicata ad un pulsante presente in MASCHERA RICERCA

       

      `Set r = Range("B35:BA35").Find(What:=Range("E11").Value, LookIn:=xlValues, LookAt:=xlWhole)
      If Not r Is Nothing Then
          For j = 1 To Range("AM2").End(xlDown).Row
              Cells(r.Row + j, r.Column) = Cells(r.Row + 1, r.Column) + Range("N" & j + 1)
          Next j
      End If`
      Allegati:
      You must be logged in to view attached files.
      #47393 Score: 0 | Risposta

      LucaSR
      Partecipante
        15 pts

        Ciao purtroppo non posso vedere il file, ma avrei domande riguardo al codice:

        Tu cerchi il valore contenuto in E11 dentro al Range(B35:BA35) e lo assegni ad R, in seguito ti assicuri che sia stato trovato e nel caso esegui un ciclo che va da 1 al numero di riga dell'ultima cella non vuota sotto ad AM2.

        - hai detto che vuoi sommare tutte le celle non vuote sotto AM2, però c'è un problema qui

        Range("AM2").End(xlDown).Row

        Il metodo End si ferma alla prima occorrenza di cella vuota, quindi se ci sono in seguito altri valori non li vede. Dovresti usare una strategia diversa per farti dare l'ultima cella piena 

        Range("AM" & Rows.Count).End(XlUp).Row

        Cioè spostarti all'ultima cella in basso del foglio e risalire fino alla prima cella piena.

        - altra cosa, usi più volte R.Row, ma R avrà sempre e soltanto il valore 35 per via del range di ricerca, quindi mi domando perché non usare il valore direttamente?

        Spero di essere stato chiaro   

        #47396 Score: 0 | Risposta

        alexps81
        Moderatore
          58 pts

          Io il file l'ho visto ma non è chiaro bene ciò che vuoi ottenere. Quello che forse ho capito è che non stiamo parlando del Foglio "MASCHERA RICERCA" bensì del Foglio "Ordine Rame".

          Puoi essere più chiaro con una spiegazione più dettagliata? Magari facendo un esempio pratico.

          #47398 Score: 0 | Risposta

          Ale.1989
          Partecipante

            Ci provo, allora in pratica si tratta di sommare le celle presenti in AM2;AM29 alle corrispondenti trovate confrontando E11 ( n settimana richiesta ) nella riga 35 ( dove ci sono tutti i numeri delle settimane ) partendo dalla riga 36 fino alla 63 ( si tratta di 27 righe in tutto ).

            Nell'esempio che ho mandato dovrei sommare AM2;AM29 all'intervallo Z36;Z63 intervallo individuato confrontando E11 con Z35  ( settimana 25).

            Al variare di E11 varierà anche l'intervallo in cui sommare le celle (se fosse la settimana 26 sommerebbe l'intervallo AA36;AA63)

            Spero di essere stato chiaro grazie mille per la risposta

             

            #47399 Score: 0 | Risposta

            alexps81
            Moderatore
              58 pts

              @Ale.1989 aspetta forse ho capito!

              Tu dici che questa parte di codice non esegue la somma? Ipotesi:

              Se in cella "E11" c'è scritto 25 allora rileva il numero di colonna dove nel rigo 35 sia presente 25. Poi parte un ciclo, lungo da 1 a quanto è grande il Range("AM2:AM" & ultimo rigo compilato...nel tuo esempio sarebbe sempre 29),  che esegue la somma di ciò che è presente + il valore presente lungo le celle nel Range("N2") in giù fino alla fine del ciclo....

              Se così fosse, la somma avviene solo che tu non la vedi perché la tabella delle settimane ("A35:BA63") ha come FormatNumber = Numeri a zero decimali. Dovresti formattarla a 2 posizioni decimali.

              Poi altra cosa...modifica questa linea di codice da così:

              For j = 1 To Range("AM2").End(xlDown).Row
              

              a così:

              For j = 1 To Range("AM2").End(xlDown).Row - 1
              

              altrimenti il ciclo fa un'iterazione in più.

              #47401 Score: 0 | Risposta

              alexps81
              Moderatore
                58 pts

                Ma quindi devi sommare tutto l'intervallo che comprende AM2:AM29 + l'intervallo "Z36:Z63" (nel caso "E11" = 25)?

                E questo totale dove dovrà essere visualizzato?

                #47402 Score: 0 | Risposta

                Ale.1989
                Partecipante

                  Si esatto, ( AM2+Z36 , AM3+Z37 .....AM29+Z63 ) la colonna con il risultato non deve essere visualizzato da nessuna parte. Sono sicuro che al momento non funziona perché ho registrato molti codici circa 400 e dovrebbero esserci dei valori un pò più alti.

                  p.s. so che è senza decimali tabella l'ho messa volontariamente.

                   

                  #47403 Score: 0 | Risposta

                  alexps81
                  Moderatore
                    58 pts

                    Mmmm...diciamo che sto iniziando a capire pian piano...però non ho capito una cosa: prendiamo per esempio sempre in esame la colonna "Z"...in questo momento, così com'è codificato, questa colonna, dal rigo 36 al 63, le celle verranno popolate da una somma che proviene da ciò che attualmente è contenuto al proprio interno + il valore della cella in colonna "N" & j + 1 ("N2", "N3", "N4",....."N29"

                    Ora tu dici che ti serve un'altra somma, tra "AM2"+"Z36"; "AM3"+"Z37", ecc...giusto? Ma questa somma dove dovrà comparire? Sempre in celle in colonna "Z"? Quindi in "Z36" ci sarà una somma di 3 addendi: "N2"+"M2"+"Z36"; ecc....giusto?

                    #47404 Score: 0 | Risposta

                    Ale.1989
                    Partecipante

                      Forse l'inghippo sta proprio qui, non ci deve essere una somma con 3 addendi ma solo con  2 addendi in particolare M2 + Z36 lo colonna N non c'entra niente....

                      #47406 Score: 0 | Risposta

                      gianfranco55
                      Partecipante
                        91 pts

                        ciao

                        io ho capito

                        =MATR.SOMMA.PRODOTTO((($B$35:$BA$35=$E$11)*$B$36:$BA$63))+SOMMA($AM$2:$AM$29)

                        ma non si riesce a capire se le matrici sono fisse

                        o variabili

                        #47407 Score: 0 | Risposta

                        alexps81
                        Moderatore
                          58 pts

                          Ale.1989 ha scritto:

                          Forse l'inghippo sta proprio qui, non ci deve essere una somma con 3 addendi ma solo con  2 addendi in particolare M2 + Z36 lo colonna N non c'entra niente....

                          "M2"????? Cos'è ora "M2"? Forse volevi dire "AM2"!

                          Dunque il codice attuale è questo:

                          Set r = Range("B35:AZ35").Find(What:=Range("E11").Value, LookIn:=xlValues, LookAt:=xlWhole)
                          If Not r Is Nothing Then
                              For j = 1 To Range("AM2").End(xlDown).Row
                                  Cells(r.Row + j, r.Column) = Cells(r.Row + 1, r.Column) + Range("N" & j + 1)
                              Next j
                          End If
                          

                          Al quarto rigo, verso la fine, c'è scritto + Range("N" & j + 1)

                          quindi durante il ciclo FOR sta sommando le celle in colonna "N" partendo dal rigo 2 (j + 1)

                          Forse intendi che non deve considerare la colonna "N" bensì la colonna "AM"?

                          #47408 Score: 0 | Risposta

                          gianfranco55
                          Partecipante
                            91 pts

                            ciao

                            Alex

                            mi fai un poco di didattica

                            Range("AM2").End(xlDown).Row

                            trova l'ultima cella avvalorata.

                            ma nel caso di questo file si ferma a AM29 o trova AM63

                            in pratica ci sono due righe vuote in mezzo

                            bloccano il conteggio o continuano fino alla riga 63

                            #47409 Score: 0 | Risposta

                            Ale.1989
                            Partecipante

                              Si esatto, ho scritto male la somma deve essere "AM2" + "Z36" 

                              Intendo proprio questo .. non considerare la colonna N ma la colonna AM

                              #47410 Score: 1 | Risposta

                              alexps81
                              Moderatore
                                58 pts

                                Ciao @gianfranco55, si esatto si ferma alla riga 29.

                                mentre per @Ale.1989 finalmente...be' quindi presumo che non sia difficile per te correggere la linea di codice? Ti ricordi di aggiungere - 1 alla fine del rigo di codice: For j = 1 To Range("AM2").End(xlDown).Row

                                altrimenti fai un ciclo in più. Ecco perché ti capitano quegli zero nel rigo 64...fa una iterazione in più superflua.

                                #47411 Score: 0 | Risposta

                                Ale.1989
                                Partecipante

                                  In teoria sì non sono molto pratico di modifiche 😅devo solo cambiare la N nel ciclo for con AM ?

                                  #47412 Score: 0 | Risposta

                                  alexps81
                                  Moderatore
                                    58 pts

                                    Ale.1989 ha scritto:

                                    devo solo cambiare la N nel ciclo for con AM ?

                                    Io proverei se fossi in te   

                                    #47414 Score: 0 | Risposta

                                    Ale.1989
                                    Partecipante

                                      Ok ho appurato che non funziona, o meglio funziona solo se sotto la settimana corrispondente alla ricerca i valori sono a 0, provando a lanciare 2 volte la macro capita che la prima volta aggiunge i valori correttamente, mentre al secondo lancio non viene effettuata la somma

                                      #47415 Score: 0 | Risposta

                                      gianfranco55
                                      Partecipante
                                        91 pts

                                        mentre al secondo lancio non viene effettuata la somma

                                         non è che non viene effettuata

                                        semplicemente da qualche parte quando lanci la macro viene azzerata la colonna della settimana

                                         

                                        #47416 Score: 0 | Risposta

                                        Aldo Ercolini
                                        Partecipante
                                          19 pts

                                          A me questa funziona:

                                                  With Worksheets("Ordine Rame").Rows(35)
                                                       Set r = .Find(Range("E11").Value, LookIn:=xlValues, LookAt:=xlWhole)
                                                  End With
                                                      
                                                  If r Is Nothing Then
                                                      MsgBox "Valore non valido"
                                                      Exit Sub
                                                  End If
                                                  
                                                  Uriga = Worksheets("Ordine Rame").Cells(Rows.Count, Mid(r.Address, 2, 1)).End(xlUp).Row
                                                  i = 1
                                                  
                                                  For Each rng In Range(r.Address & ":" & Mid(r.Address, 2, 1) & Uriga - 1)
                                                      
                                                      If rng.Value <> Range("E11").Value Then
                                                          Range("AM" & i).Value = Range("AM" & i).Value + rng.Value
                                                      End If
                                                        
                                                      i = i + 1
                                                      
                                                  Next
                                          #47420 Score: 0 | Risposta

                                          alexps81
                                          Moderatore
                                            58 pts

                                            Ale.1989 ha scritto:

                                            Ok ho appurato che non funziona, o meglio funziona solo se sotto la settimana corrispondente alla ricerca i valori sono a 0, provando a lanciare 2 volte la macro capita che la prima volta aggiunge i valori correttamente, mentre al secondo lancio non viene effettuata la somma

                                            Trovato l'errore   ...allora nel rigo:

                                            Cells(r.Row + j, r.Column) = Cells(r.Row + 1, r.Column) + Range("AM" & j + 1)
                                            

                                            dove c'è scritto ..... = Cells(.Row + 1, r.Column) .....

                                            l'errore è quel 1. Sostituisci 1 con j e tutto funzionerà   

                                            #47434 Score: 0 | Risposta

                                            Aldo Ercolini
                                            Partecipante
                                              19 pts

                                              Codice migliorato:

                                                      With Worksheets("Ordine Rame").Rows(35)
                                                           Set r = .Find(Range("E11").Value, LookIn:=xlValues, LookAt:=xlWhole)
                                                      End With
                                                          
                                                      If r Is Nothing Then
                                                          MsgBox "Valore non valido"
                                                          Exit Sub
                                                      End If
                                                      
                                                      Uriga = Worksheets("Ordine Rame").Cells(Rows.Count, Mid(r.Address, 2, 1)).End(xlUp).Row
                                                      j = 2
                                                      
                                                      For Each rng In Range(r.Offset(1, 0).Address & ":" & Mid(r.Address, 2, 1) & Uriga - 1)
                                                          Range("AM" & j).Value = Range("AM" & j).Value + rng.Value
                                                          j = j + 1
                                                      Next
                                              #47435 Score: 0 | Risposta

                                              Ale.1989
                                              Partecipante

                                                Grazie a tutti ... la modifica di Alex sembra funzionare, al momento non sto utilizzando il file, appena ricomincio ad usarlo vi faccio sapere...

                                                grazie ancora

                                              Login Registrati
                                              Stai vedendo 22 articoli - dal 1 a 22 (di 22 totali)
                                              Rispondi a: Somma per settimana
                                              Gli allegati sono permessi solo ad utenti REGISTRATI
                                              Le tue informazioni: