sommare un range su tutti ifogli

18 views
Skip to first unread message

Danilo R

unread,
Mar 22, 2011, 4:12:03 PM3/22/11
to Excel VBA
Ho la necessità di scrivere un foglio di riepilogo sommando un range
(tipo b7:o70) di tutti i fogli contenuti nel file

E' possibile fare qualcosa di diverso da questo?

For r= 6 To 70
For c= 4 To 17
For Each Worksheet In ActiveWorkbook.Worksheets
If Worksheet.Name = "Riepilogo" Then
Sheets("Riepilogo").Cells(r, c).ClearContents
Else
Sheets("Riepilogo").Cells(r, c) =
Sheets("Riepilogo").Cells(r, c) + Worksheet.Cells(r, c)
End If
Next
Next c
Next r

E' vero che non programmo in excel vba da tempo ma una cosa
meno...prolissa e poletaria?
Grazie

Danilo R

unread,
Mar 22, 2011, 4:58:57 PM3/22/11
to Excel VBA


On 22 Mar, 21:12, Danilo R <jjf...@gmail.com> wrote:
> Ho la necessità di scrivere un foglio di riepilogo sommando un range
> (tipo b7:o70) di tutti i fogli contenuti nel file
>
> E' possibile fare qualcosa di diverso da questo?

Accidenti ho trovato la formula somma(PrimoFoglio:UltimoFoglio!
Cella)!!
Per cui non sapendo il nome del primo e dell'ultimo foglio a priori ho
modificato il codice cosi'

ReDim tSht(0)
For Each sht In ActiveWorkbook.Worksheets
If sht.Name <> "Riepilogo" Then
tSht(UBound(tSht)) = sht.Name
ReDim Preserve tSht(UBound(tSht) + 1)
End If
Next

Sheets(Riepilogo).Select
For riga = 6 To 70
For colonna = 4 To 17
Sheets("Riepilogo").Cells(riga,
colonna).FormulaR1C1 = "=SUM('" & tSht(0) & ":" & tSht(UBound(tSht) -
1) & "'!RC)"
Next colonna
Next riga

Se avete suggerimenti ...ben graditi! Notte

roberto mensa

unread,
Mar 22, 2011, 6:06:44 PM3/22/11
to excel_v...@googlegroups.com
ciao danilo,
la tua ultima non va ... comunque se nel foglio riepilogo vuoi la formula che si riferisce a tutti i fogli puoi correggere così (magari c'è qualcosa di meglio ... ci penserò):
 
Sub test()
Dim sht As Worksheet, riga As Long, colonna As Long
Dim s() As String, i As Long
ReDim s(ActiveWorkbook.Worksheets.Count - 2)
For riga = 6 To 17
    For colonna = 3 To 7
        i = 0

        For Each sht In ActiveWorkbook.Worksheets
            If sht.Name <> "Riepilogo" Then
                s(i) = sht.Cells(riga, colonna).Address(, , , True)
                i = i + 1
            End If
        Next
        Sheets("Riepilogo").Cells(riga, colonna).Formula = _
            "=SUM(" & Join(s, ",") & ")"
    Next colonna
Next riga
End Sub
se viceversa tu volessi il valore della somma si potrebbe fare qualcosa di più semplice ...
fai sapere
ciao
r
 

Danilo R

unread,
Mar 24, 2011, 8:03:36 AM3/24/11
to Excel VBA
si mi basta solo il valore della somma
Ma la mia seconda funziona...

roberto mensa

unread,
Mar 26, 2011, 5:21:27 PM3/26/11
to excel_v...@googlegroups.com
non saprei l'avevo provata la tua forse mi sono sbagliato ...
se ti interessa il solo valore puoi accorciare un po' così:

Sub test()
Dim sht As Worksheet, riga As Long, colonna As Long
Dim t As Double

For riga = 6 To 17
    For colonna = 3 To 7
        For Each sht In ActiveWorkbook.Worksheets
            If sht.Name <> "Riepilogo" Then
                t = t + sht.Cells(riga, colonna)
            End If
        Next
        Sheets("Riepilogo").Cells(riga, colonna).Value = t
        t = 0

    Next colonna
Next riga
End Sub

saluti
r


Il giorno 24 marzo 2011 13:03, Danilo R <jjf...@gmail.com> ha scritto:
si mi basta solo il valore della somma
Ma la mia seconda funziona...

--
Hai ricevuto questo messaggio in quanto sei iscritto al gruppo "Excel VBA" di Google Gruppi.
Per mandare un messaggio a questo gruppo, invia una email a
excel_v...@googlegroups.com
Per modificare la tua iscrizione
http://groups.google.it/group/excel_vba_free/subscribe?hl=it
Per maggiori opzioni, visita questo gruppo all'indirizzo
http://groups.google.it/group/excel_vba_free?hl=it?hl=it

Danilo R

unread,
Mar 29, 2011, 8:37:55 AM3/29/11
to Excel VBA
Vero, molto piu' semplice!
> >http://groups.google.it/group/excel_vba_free?hl=it?hl=it- Nascondi testo citato
>
> - Mostra testo citato -

Scossa

unread,
May 6, 2011, 3:00:12 PM5/6/11
to Excel VBA
On 29 Mar, 14:37, Danilo R <jjf...@gmail.com> wrote:
> Vero, molto piu' semplice!
>

Questa mi sembra ancora più semplice:
'----------------------
Public Sub SommaFogli()
Dim wb As Workbook
Dim shs As Sheets
Dim ws As Worksheet
Dim rng As Range
Dim cella As Range
Dim nSum As Double
Dim nshs As Long
Dim nPos As Long

Set wb = ThisWorkbook
Set shs = wb.Worksheets
Set ws = wb.Worksheets("Riepilogo")
Set rng = ws.Range("B7:O70")

nshs = shs.Count - 1
nPos = ws.Index
ws.Move after:=shs(nshs + 1)
rng.ClearContents
For Each cella In rng
cella.Value = Evaluate("=sum(" & shs(1).Name & ":" &
shs(nshs).Name & "!" & cella.Address & ")")
Next
ws.Move before:=shs(nPos)
Set wb = Nothing
Set ws = Nothing
Set rng = Nothing
Set shs = Nothing

End Sub
'------------------------

Bye!
scossa
Reply all
Reply to author
Forward
0 new messages