2016-07-31 10 views
0

ExampleVBA Summe jeder Spalte in einer anderen Arbeitsmappe

Hallo,

ich jede Spalte in einer anderen Arbeitsmappe summieren möchten (siehe Beispiel),

ich den Code unten tat

Function sumrange(rng As Range) 
    Summ = 1 
    For Each cell In rng 
    Do While cell <> "" 
    Summ = Summ + cell.Value 
    Loop 
    Next 
    sumrange = Summ 
End Function 

sub test() 
x = sumrange(Workbooks("Clients").Worksheets("Numbers").Range("A:A")) 
thisworkbook.worksheets("Result").cells(1,1)=x 
MsgBox x 
end sub 

aber ich wusste nicht, wie man durch jede Spalte (Es gibt mehr als 2 Spalten) und es blockiert, weil die erste Zelle eine Zeichenfolge enthalten: Fehler, wie kann ich definieren, dass es Shou ld begann von der zweiten Zelle bis zum Ende?

Antwort

1

können Sie verwenden, um die IsNumeric Funktion, um zu entscheiden, ob die Zelle den Wert der Summe hinzuzufügen:

Function SumRange(rng As Range) 
    Dim dblSum As Double 
    Dim rngCell As Range 

    For Each rngCell In rng 
     If VBA.IsNumeric(rngCell.Value) Then 
      dblSum = dblSum + CDbl(rngCell.Value) 
     End If 
    Next rngCell 

    SumRange = dblSum 

End Function 

, die ziemlich langsam sein könnte, wenn Sie Spalte in allen Zellen iterieren A und es gibt nur ein Handvoll Einträge. Die folgende Erweiterung überprüft auch, ob die Zelle IsEmpty und die Schleife beendet, wenn das der Fall ist - ansonsten leeren Zellen auf Null bewerten kann:

Function SumRange(rng As Range) 
    Dim dblSum As Double 
    Dim rngCell As Range 

    For Each rngCell In rng 
     If VBA.IsEmpty(rngCell.Value) Then 
      Exit For 
     ElseIf VBA.IsNumeric(rngCell.Value) Then 
      dblSum = dblSum + CDbl(rngCell.Value) 
     End If 
    Next rngCell 

    SumRange = dblSum 

End Function 
+0

in diesem Fall, wie kann ich anrufen es in der Unterabteilung? Da ich Range ("A: A") setze, wird es nicht funktionieren, da es von A2 beginnt – JeanLo

+0

Sie können es mit 'Range (" A: A ")' verwenden, weil es die Kopfzeile (und alle anderen nicht-numerischen Zellwert) aufgrund des "IsNumeric" -Tests. –

+0

Es muss in die nächste Zeile gehen nicht die Schleife zu beenden, sonst wird es mir nur 0 geben. Wie kann ich es bitte definieren? – JeanLo

1

Start bei der zweiten Zelle und die Spalte in der Funktion angeben und wie folgt aufrufen .

Function sumrange(rng As Range, c as integer) 
dim summ as integer 
dim I as integer 
dim cell as integer 
Summ = 1 
'Wouldn't you want to start at 0 for your sum? 
for i = 2 to 50,000 
cell = rng.cells(i,c) 

Summ = Summ + cell 

Next 
sumrange = Summ 
End Function 

sub test() 
x = sumrange(Workbooks("Clients").Worksheets("Numbers").Range("A:A"),'column#') 
thisworkbook.worksheets("Result").cells(1,1)=x 
MsgBox x 
end sub 
0

Sie können Bereich summieren ohne Looping, mit der eingebauten in Summenfunktion

Beispiel:

Sub test() 
    Dim LastRow As Long 
'open the other workbook , clients 
Set book = Workbooks.Open("clients.xlsx") 
'get last raw starting from B2 down to the last filled cell 
LastRow = book.Worksheets("Numbers").Range("B2").End(xlDown).Row 

Debug.Print LastRow 
Set range2 = book.Worksheets("sheet1").Range("B1:B" & LastRow) 
sum1 = Application.WorksheetFunction.Sum(range2) 
Debug.Print sum1 
'write result to active sheet 
ThisWorkbook.Worksheets("result").Cells(1, 1) = sum1 
End Sub 
2

Verwenden SpecialCells Methode von Range Objekt Zahlen zu summieren nur

Sollten Zahlen sind nur "Konstanten" (zB: nicht aus Formeln), dann verwenden Sie:

Function sumrange(rng As Range) As Double 
    sumrange = WorksheetFunction.Sum(rng.SpecialCells(xlCellTypeConstants, xlNumbers)) 
End Function 

Sollen Zahlen stammen aus Formeln nur dann verwenden:

Function sumrange(rng As Range) As Double 
    sumrange = WorksheetFunction.Sum(rng.SpecialCells(xlCellTypeFormulas, xlNumbers)) 
End Function 

Schließlich könnten Zahlen beiden Konstanten sein oder von Formeln kommen dann verwenden:

Function sumrange(rng As Range) As Double 
    On Error Resume Next 
    sumrange = WorksheetFunction.Sum(rng.SpecialCells(xlCellTypeFormulas, xlNumbers)) 
    sumrange = sumrange + WorksheetFunction.Sum(rng.SpecialCells(xlCellTypeConstants, xlNumbers)) 
End Function 
+0

@JeanLo hast du das versucht? – user3598756

+0

@JeanLo: Es wäre nett von Ihnen, Feedbakcs an Leute zu geben, die versuchen und Ihnen helfen – user3598756

Verwandte Themen