Summe Spalten in excel über VB
OK, ich habe eine straight-forward-2-d-block von Daten in excel: Zeile 1 und Spalte 1 sind Etiketten, der rest sind zahlen. Meine Aufgabe jetzt ist, setzen Sie die Summe jeder Spalte in die erste leere Zelle(Zeile) darunter.
Während meiner Praxis-dataset wird mit bekannten Maßen, die tatsächlichen Datensätze werde ich mit diesem Programm wird eine variable Anzahl von Zeilen und Spalten. Zu diesem Zweck, ich kann nicht einfach sagen: "=SUMME(B2:B20)" weil die Letzte gefüllte Zelle nicht immer B20 (zum Beispiel). Der einfachste Weg, um die Summe jeder Spalte, dachte ich, wäre eine FOR..NEXT-Schleife, aber ich kann einfach nicht bekommen VS zu akzeptieren, die Summe-Formel. Hier ist, was ich habe, so weit:
`With xlWsheet2 'check for last filled row and column of transposed data'
If xlApp.WorksheetFunction.CountA(.Cells) <> 0 Then
lRow2 = .Cells.Find(What:="*",
After:=.Cells(1, 1),
LookAt:=Excel.XlLookAt.xlPart,
LookIn:=Excel.XlFindLookIn.xlFormulas,
SearchOrder:=Excel.XlSearchOrder.xlByRows,
SearchDirection:=Excel.XlSearchDirection.xlPrevious,
MatchCase:=False).Row
Else : lRow2 = 1
End If
If xlApp.WorksheetFunction.CountA(.Cells) <> 0 Then
lCol2 = .Cells.Find(What:="*",
After:=.Range("A1"),
LookAt:=Excel.XlLookAt.xlPart,
LookIn:=Excel.XlFindLookIn.xlFormulas,
SearchOrder:=Excel.XlSearchOrder.xlByRows,
SearchDirection:=Excel.XlSearchDirection.xlPrevious,
MatchCase:=False).Column
Else : lCol2 = 1
End If
lastcell2 = xlWsheet2.Cells(lRow2, lCol2) 'defines last row, column of transposed data'
emptyRow1 = xlWsheet2.Rows(lRow2).Offset(1) 'defines the first empty row'
'add in cell of SUM underneath each column'
For i As Integer = 2 To lCol2
colTop = xlWsheet2.Cells(2, i)
colBot = xlWsheet2.Cells(lRow2, i)
ELtotal = xlWsheet2.Range(emptyRow1, i)
ELtotal = .Sum(.Range(colTop, colBot))
Next i
End With
`
Nun, die ELtotal-Anweisungen verwendet werden, um eine lange Zeile, aber ich habe versucht zu sehen, was Teil VS hatte ein problem mit. Es bricht bei der ersten .Range(emptyRow1, ich). Hier ist, anderen Iterationen dieser Gleichung, die ich ausprobiert habe, die waren nicht angenommen:
.Range(emptyRow1, I).Formula = "=SUM(colTop, colBot)"
.Range(emptyRow1, I).Formula = "=SUM(.cells(2,i), (lRow2,i))"
.Range(emptyRow1, I).Formula = .sum(.range(colTop, colBot)
.Range(emptyRow1, I).Value = etc...
ad inifintum
PS - ich bin ziemlich neu hier, also werde ich wahrscheinlich über diesen gesamten Prozess der falsche Weg...
- Es kann davon ausgegangen werden, dass jede Zeile, die Daten enthält (zahlen) gekennzeichnet werden (in Zeile 1) und jeder Spalte, die Daten enthält, gekennzeichnet werden? Tun alle Spalten die gleiche Anzahl von Daten, Zellen, oder einige Spalten enthalten Daten mehr Zellen als andere? Wenn die Antwort auf die letztere ist nicht, dann, wie notwendig es ist, dass die Summe in der Ersten leeren Zelle im Gegensatz zu 'Einer' leeren Zelle?
- Ja, alle Zeilen UND Spalten die gleiche Länge haben (mit der gleichen Menge an Daten). Die Zellen, nicht die Zahl null ist.
- Und auch, werden alle Spalten und Zeilen ein Etikett (gesamte Spalte A und Zeile 1). Gab ich dachte daran, diese ganzen Daten in ein 3d-array, aber da die Daten bekommt ausspucken in excel, ich dachte, ich würde versuchen, das erstmal so.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Basierend auf dem, was Sie mir über die Zeilen-und Spaltenüberschriften, ich glaube, dass dieser code das tut, was Sie wollen, nämlich einen einzelnen Spalte Summe in der ersten leeren Zelle darunter.
Viel Glück.
Dieser Formel wird der trick der Summen, die zwei Spalten, A und B in diesem Fall:
Wenn es möglich ist, für den Header interpretiert werden als numerische Werte, die dazu beitragen könnte, um die Summe dann die Formel geändert werden sollte, werden
Um zu exportieren, um excel mit der Summe aller numerischen Spalten im DataGridView-fügen Sie eine Schaltfläche zum Formular, und fügen Sie den folgenden code in seinen click-Ereignis:-