E' stato piu' lungo capire che cosa stavi chiedendo (e non sono certo di averlo capito) che abbozzare una soluzione...
Ho immaginato che tu voglia creare il Rendiconto su Foglio2, riepilogando le voci presenti sull'analitico di Foglio1.
Per questo, prendendo spunto dalla Sub CopiaBccRoma, creiamoci una Sub CopiaMod, modulare, che poi richiamiamo per ogni voce presente in colonna A del Rendiconto.
E' comunque necessario che le voci su Rendiconto siano riportate nello stesso modo che in Analitico (Foglio1)
Il codice complessivo:
- Codice: Seleziona tutto
Sub CopiaMod(ByVal CheCosa As String, iiRow As Long)
Dim CL As Range, iRow As Integer, lSum As Single
Dim cArr(), cInd As Long, I As Long
ReDim cArr(1 To 4, 1 To 1)
'
''Sheets("Foglio1").Select
Dim Area As Range
Set Area = Range(Sheets("Foglio1").Range("b1"), Sheets("Foglio1").Range("b1").End(xlDown))
Debug.Print "Cerca " & CheCosa & " in Foglio1!" & Area.Address(0, 0)
For Each CL In Area
If UCase(CL.Value) = UCase(CheCosa) And CL.Interior.Color <> RGB(100, 255, 100) Then
'Copia la riga in cArr:
cInd = UBound(cArr, 2)
CL.Interior.Color = RGB(100, 255, 100)
For I = 1 To 4
cArr(I, cInd) = CL.Offset(0, -2 + I).Value
Next I
lSum = lSum + cArr(4, cInd)
ReDim Preserve cArr(1 To 4, 1 To cInd + 1)
End If
Next CL
If cInd > 0 Then
Debug.Print "Inserisco " & cInd & " righe sul riepilogo della voce " & CheCosa & ", SubTot: "; Format(lSum, "0.00")
iRow = iiRow
While Worksheets("Foglio2").Cells(iRow, 2).Value <> ""
iRow = iRow + 1
Wend
'Inserisce le righe in Foglio2:
Worksheets("Foglio2").Rows(iRow).Resize(cInd).Insert Shift:=xlDown
'Scrive il contenuto di cArr:
Worksheets("Foglio2").Cells(iRow, 2).Resize(UBound(cArr, 2), UBound(cArr)).Value = _
Application.WorksheetFunction.Transpose(cArr)
Sheets("Foglio2").Cells(iRow + cInd - 1, "F").Value = lSum
End If
End Sub
Sub MakeRendiconto()
Dim myVoci As Range, myC As Range, I As Long
Sheets("Foglio2").Select
Set myVoci = Range(Range("A8"), Cells(Rows.Count, 1).End(xlUp))
Debug.Print vbCrLf, ">>>> Start", myVoci.Address(0, 0)
For Each myC In myVoci
If Len(myC.Value) > 1 Then
Call CopiaMod(myC.Value, myC.Row + 1)
End If
Next myC
End Sub
La sub da avviare e' MakeRendiconto
Provala su una copia del tuo file.
Su Foglio1 le voci che vengono riportate su Foglio2 verranno colorate di Verdino. Quindi a conclusione della MakeRendiconto se ispezioni Foglio1 vedrai che alcune righe sono rimaste bianche: ispeziona la terminologia usata su Foglio1 e confrontala con quella di Foglio2, e risolvi le differenze.
A questo punto puoi ripetere la MakeRiepilogo, che ignorera' le righe gia' in verde ed esaminera' solo le restanti.
Hai un problema con le formule inserite in colonna G-Totale, ad esempio il Totale di SPESE GENERALI non includera' le spese classificate come Varie. Riscrivile facendo in modo che includano dalla prima riga della categoria fino alla stessa riga che contiene il totale
Buone prove...