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.
InformationsquelleAutor BG- | 2014-09-05
Schreibe einen Kommentar