我如何预测下一个单元格的位置? (写总计)
How do I predict the location of the next cell? (Writing the Grand Total)
您知道当您将 excel 中的单元格从一个单元格复制到另一个单元格时,公式会自动将 =Sum(A1+$B1)
替换为 =Sum(C1+$B1)
?
我想知道如何实现类似的东西,除了以编程方式完成。
这就是我想要实现的目标,我有一个 table 说,一个地方的行收入和列的项目,这是 pre-pivoted 数据,如果你是想知道,我想用一个总计来完成它,这个总计最初是缺失的。
Place | Beans | Buns | Breads | etc
Bobby's | 550 | 20 | 30 | 10
Sen's | 550 | 20 | 30 | 10
Solaire's | 550 | 20 | 30 | 10
现在,我要在最后一行下面多写一行,在最后一列旁边多写一列,标题为 [Grand Total]。
所以,我猜我将需要一个 for 循环来 运行 通过我要生成的最后一行。像这样:
For (int i = 2; i < numberofColumns; i++) {
string query = "=Sum(? : ?)"
xlsWorksheet.Cells[ numberofRows + 1 , i].Formula = query;
}
如您所见,我不确定如何处理隐式单元格位置。棘手的部分是我希望这个算法循环到最后,而不必隐式定义特定的单元格。这是因为我可以有任意数量的额外列,或任意数量的额外行。重要的是我需要创建总计行和列。
期望的结果是:
Place | Beans | Buns | Breads | etc | GrandTotal
Bobby's | 550 | 20 | 30 | 10 | 610
Sen's | 550 | 20 | 30 | 10 | 610
Solaire's | 550 | 20 | 30 | 10 | 610
| 1650 | 60 | 90 | 30 | 1830
目前,这是在 C# 中完成的,目标是具有 Excel Interop 的 Excel 文档。我知道这也可以在 VBA 或 Excel 公式中完成,所以我将把它们都标记到这个 post。公式本身不仅仅是对行求和,但我就是不知道如何预测下一个单元格的位置。
这是一个选项,但我敢肯定它不是最有效的:
lCol = Sheets("SheetName").Cells(1, Sheets("SheetName").Columns.Count).End(xlToLeft).Column
lRow = Sheets("SheetName").Range("A" & Rows.Count).End(xlUp).Row
Sheets("SheetName").Cells(1, lCol + 1).Value = "Grand Total"
For i = 2 To lRow
Sheets("SheetName").Cells(i, lCol + 1).Formula = "=SUM(RC[-" & lCol - 1 & "]:RC[-1])"
Next i
lCol = Sheets("SheetName").Cells(1, Sheets("SheetName").Columns.Count).End(xlToLeft).Column
For i = 2 To lCol
Sheets("SheetName").Cells(lRow + 1, i).Formula = "=SUM(R[-" & lRow - 1 & "]C:R[-1]C)"
Next i
您知道当您将 excel 中的单元格从一个单元格复制到另一个单元格时,公式会自动将 =Sum(A1+$B1)
替换为 =Sum(C1+$B1)
?
我想知道如何实现类似的东西,除了以编程方式完成。
这就是我想要实现的目标,我有一个 table 说,一个地方的行收入和列的项目,这是 pre-pivoted 数据,如果你是想知道,我想用一个总计来完成它,这个总计最初是缺失的。
Place | Beans | Buns | Breads | etc
Bobby's | 550 | 20 | 30 | 10
Sen's | 550 | 20 | 30 | 10
Solaire's | 550 | 20 | 30 | 10
现在,我要在最后一行下面多写一行,在最后一列旁边多写一列,标题为 [Grand Total]。
所以,我猜我将需要一个 for 循环来 运行 通过我要生成的最后一行。像这样:
For (int i = 2; i < numberofColumns; i++) {
string query = "=Sum(? : ?)"
xlsWorksheet.Cells[ numberofRows + 1 , i].Formula = query;
}
如您所见,我不确定如何处理隐式单元格位置。棘手的部分是我希望这个算法循环到最后,而不必隐式定义特定的单元格。这是因为我可以有任意数量的额外列,或任意数量的额外行。重要的是我需要创建总计行和列。
期望的结果是:
Place | Beans | Buns | Breads | etc | GrandTotal
Bobby's | 550 | 20 | 30 | 10 | 610
Sen's | 550 | 20 | 30 | 10 | 610
Solaire's | 550 | 20 | 30 | 10 | 610
| 1650 | 60 | 90 | 30 | 1830
目前,这是在 C# 中完成的,目标是具有 Excel Interop 的 Excel 文档。我知道这也可以在 VBA 或 Excel 公式中完成,所以我将把它们都标记到这个 post。公式本身不仅仅是对行求和,但我就是不知道如何预测下一个单元格的位置。
这是一个选项,但我敢肯定它不是最有效的:
lCol = Sheets("SheetName").Cells(1, Sheets("SheetName").Columns.Count).End(xlToLeft).Column
lRow = Sheets("SheetName").Range("A" & Rows.Count).End(xlUp).Row
Sheets("SheetName").Cells(1, lCol + 1).Value = "Grand Total"
For i = 2 To lRow
Sheets("SheetName").Cells(i, lCol + 1).Formula = "=SUM(RC[-" & lCol - 1 & "]:RC[-1])"
Next i
lCol = Sheets("SheetName").Cells(1, Sheets("SheetName").Columns.Count).End(xlToLeft).Column
For i = 2 To lCol
Sheets("SheetName").Cells(lRow + 1, i).Formula = "=SUM(R[-" & lRow - 1 & "]C:R[-1]C)"
Next i