【发布时间】:2014-09-05 23:55:07
【问题描述】:
好的,我在 excel 中有一个直截了当的二维数据块:第 1 行和第 1 列是标签,其余的是数字。我现在的任务是将每列的总和放在下面的第一个空单元格(行)中。
虽然我的练习数据集具有已知的维度,但我将使用此程序的实际数据集将具有可变数量的行和列。为此,我不能只说“=SUM(B2:B20)”,因为最后填充的单元格并不总是 B20(例如)。我想,对每一列求和的最简单方法是 FOR..NEXT 循环,但我就是无法让 VS 接受求和公式。到目前为止,这是我所得到的:
`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
` 现在,ELtotal 语句曾经是一长串,但我试图查看 VS 的哪一部分有问题。它在第一个 .Range(emptyRow1, i) 处中断。这是我尝试过的该等式的其他迭代,但未被接受:
.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...
无限可能
PS- 我对此很陌生,所以我可能以错误的方式处理整个过程......
【问题讨论】:
-
是否可以假设任何包含数据(数字)的行都将被标记(在第 1 行),并且任何包含数据的列都将被标记?所有列是否包含相同数量的数据单元格,或者某些列是否包含比其他列更多的数据单元格?如果后者的答案是否定的,那么总和在“第一个”空单元格而不是“一个”空单元格中的必要性有多大?
-
@Clif,是的,所有行和列的长度都相同(数据量相同)。那些没有数字的单元格将有零。
-
此外,所有列和行都将有一个标签(整个 A 列和第 1 行)。我曾考虑将整个数据集放入一个 3d 数组中,但由于数据被吐出到 excel 中,我想我会先尝试这种方式。