Sommare importi di una colonna in base al suo nome.

Anonimo
2021-07-20T08:33:00+00:00

Buon giorno a tutti.

Come sempre chiedo il vostro aiuto per risolvere una mia esigenza lavorativa.

Ho questa routine che vorrei migliorare alla parte in grassetto.

Public Sub Controlla_Valori_Maggiori_di_0() ' questa è la routine che somma la colonna IRPEF e la aggiunge alla fine per xxxxxxxxxxxxxxxxxxxx

Dim srcSH As Worksheet, destSH As Worksheet 

Dim srcRng As Range, destRng As Range 

Dim rCell As Range 

Dim Si27 As Long, No27 As Long 

With ThisWorkbook 

    Set srcSH = .Worksheets("Riepilogo") 

    Set destSH = .Worksheets("Foglio1") 

End With 

With srcSH 

    **Set srcRng = .Range("I2:I" & .Cells(.Rows.Count, "I").End(xlUp).Row)**   

    'Set srcRng = .Range("K2:K" & .Cells(.Rows.Count, "K").End(xlUp).Row) ' remmata per cambio colonna IRPEF

End With 

For Each rCell In srcRng.Cells 

    If rCell.Value > 0 Then 

        Si27 = Si27 + 1 

    Else 

        No27 = No27 + 1 

    End If 

Next rCell 

If Si27 > 0 Then 

    With destSH 

        Set destRng = .Range("C" & .Cells(.Rows.Count, "C").End(xlUp).Row + 1) 

        destRng.Value = Application.Sum(srcRng) 

       destRng.Offset(, 1) = "xxxxxxxxxxxxxxxxxxxxxxx" 

       destRng.Offset(, 2) = "xxxxxxxxxxxxxxxxxxxxxxxx" 

       destRng.Offset(, 3) = "xxxxxxxxxxxxxxxxxxxxxxxxx" 

       destRng.Offset(, 5) = "xxxxxxxxxxxx" 

       destRng.Offset(, -2) = Date 

       destRng.Offset(, -1) = "xxxxxxxxxxxxxxx" 

       destRng.Offset(, 8) = "IRPEF" 

    End With 

End If 

MsgBox "Ho finito!! Spedisci il Flusso!!", vbInformation

End Sub

Ricevo dei files in cui la colonna dell'IRPEF varia di volta in volta ed io, per questo motivo, devo agire sulla parte in grassetto e modificare la colonna in base all'esigenza.

Chiedo a voi esperti se fosse possibile individuare in automatico la colonna in base al suo nome ed effettuare la somma.

La colonna in questione si chiama sempre IRPEF.

Spero di essere stato chiaro, ringrazio in anticipo, chi mi aiuta in questo.

Ciao, Nicola.

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2021-07-20T11:04:52+00:00

Ciao Nicola,

I dati li ho sul foglio chiamato Riepilogo ed attualmente in colonna I con intestazione :Irpef.

Immagine

Immagine

Ti ho voluto fornire lo scenario reale.

Il mio codice precedente presumeva (erroneamente) che la colonna fosse denominata IRPEF anziché essere l'intestazione della colonna! Prova la seguente versione, adattando i nomi dei fogli come richiesto:

'========>>

Option Explicit

'-------->>

Public Sub Controlla_Valori_Maggiori_di_0() ' questa è la routine che somma la colonna IRPEF e la aggiunge alla fine per xxxxxxxxxxxxxxxxxxxx

Dim srcSH As Worksheet, destSH As Worksheet 

Dim srcRng As Range, destRng As Range 

Dim rCell As Range 

Dim Si27 As Long, No27 As Long 

Dim Res As Variant 

With ThisWorkbook 

    Set srcSH = .Worksheets("Riepilogo") 

    Set destSH = .Worksheets("Foglio1") 

End With 

With srcSH 

    Set srcRng = .Range("I2:I" & .Cells(.Rows.Count, "I").End(xlUp).Row) 

End With 

For Each rCell In srcRng.Cells 

    If rCell.Value > 0 Then 

        Si27 = Si27 + 1 

    Else 

        No27 = No27 + 1 

    End If 

Next rCell 

If Si27 > 0 Then 

    With destSH 

        Res = Application.Match("IRPEF", .Rows(1), 0) 

        If Not IsError(Res) Then 

            Set destRng = .Cells(.Rows.Count, Res).End(xlUp)(2) 

        Else 

            Call MsgBox(Prompt:="L'intestazione IRPEF non è stata trovata nella riga 1 del foglio di destinazione!", Buttons:=vbInformation, Title:="REPORT") 

            Exit Sub 

        End If 

    End With 

    With destRng 

        .Value = Application.Sum(srcRng) 

        .Offset(, 1) = "xxxxxxxxxxxxxxxxxxxxxxx" 

        .Offset(, 2) = "xxxxxxxxxxxxxxxxxxxxxxxx" 

        .Offset(, 3) = "xxxxxxxxxxxxxxxxxxxxxxxxx" 

        .Offset(, 5) = "xxxxxxxxxxxx" 

        .Offset(, -2) = Date 

        .Offset(, -1) = "xxxxxxxxxxxxxxx" 

        .Offset(, 8) = "IRPEF" 

    End With 

End If 

MsgBox "Ho finito!! Spedisci il Flusso!!", vbInformation 

End Sub

'<<========

===

Regards,

Norman

![Immagine](https://learn-attachment.microsoft.com/api/attachments/734a4596-f0f9-4882-aa36-ae8a7d0a1db9?platform=QnA

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

5 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2021-07-20T11:18:52+00:00

    Ciao Norman, funziona benissimo ora.

    Ho dovuto solo cambiare il riferimento al foglio poichè si tratta del Foglio chiamato Riepilogo.

    ho sostituito:

    With destSH

    con questo

    With srcSH

    Grazie mille per tutto.

    Ciao, Nicola.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2021-07-20T10:14:56+00:00

    Ciao Norman.

    I dati li ho sul foglio chiamato Riepilogo ed attualmente in colonna I con intestazione :Irpef.

    Immagine

    Immagine

    Ti ho voluto fornire lo scenario reale.

    Ciao, Nicola.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2021-07-20T10:01:59+00:00

    Ciao Norman, buongiorno.

    Grazie mille per la tua presenza.

    Ho questo messaggio di errore con le tue indicazioni, cosa non va?

    Ciao, Nicola.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2021-07-20T09:08:20+00:00

    Ciao Nicola,

    Prova qualcosa del genere:

    '========>>

    Option Explicit

    '-------->>

    Public Sub Controlla_Valori_Maggiori_di_0() ' questa è la routine che somma la colonna IRPEF e la aggiunge alla fine per xxxxxxxxxxxxxxxxxxxx

    Dim srcSH As Worksheet, destSH As Worksheet 
    
    Dim srcRng As Range, destRng As Range 
    
    Dim rCell As Range 
    
    Dim Si27 As Long, No27 As Long 
    
    With ThisWorkbook 
    
        Set srcSH = .Worksheets("Riepilogo") 
    
        Set destSH = .Worksheets("Foglio1") 
    
    End With 
    
    With srcSH 
    
        Set srcRng = .Range("I2:I" & .Cells(.Rows.Count, "I").End(xlUp).Row) 
    
    End With 
    
    For Each rCell In srcRng.Cells 
    
        If rCell.Value &gt; 0 Then 
    
            Si27 = Si27 + 1 
    
        Else 
    
            No27 = No27 + 1 
    
        End If 
    
    Next rCell 
    
    If Si27 &gt; 0 Then 
    
        With destSH.Range("IRPEF") 
    
            Set destRng = .Cells(.Cells.Count).End(xlUp)(2) 
    
        End With 
    
        With destRng 
    
            .Value = Application.Sum(srcRng) 
    
            .Offset(, 1) = "xxxxxxxxxxxxxxxxxxxxxxx" 
    
            .Offset(, 2) = "xxxxxxxxxxxxxxxxxxxxxxxx" 
    
            .Offset(, 3) = "xxxxxxxxxxxxxxxxxxxxxxxxx" 
    
            .Offset(, 5) = "xxxxxxxxxxxx" 
    
            .Offset(, -2) = Date 
    
            .Offset(, -1) = "xxxxxxxxxxxxxxx" 
    
            .Offset(, 8) = "IRPEF" 
    
        End With 
    
    End If 
    
    MsgBox "Ho finito!! Spedisci il Flusso!!", vbInformation 
    

    End Sub

    '<<========

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento