公式

时间:2017-08-23 18:01:24

标签: excel vba

我在下面发布了我的代码片段。我的实际工作簿有很多公式,但它们的结构都像下面的公式。我正在使用的数据量可能会逐月变化,所以我永远不知道要运行公式需要多少行。我对此的一点欺骗是为所有公式“XX2:XX500”制作目的地范围,因为永远不会有超过500行。

'November Remaining Spending Plan
 Range("BF2").Select
 ActiveCell.FormulaR1C1 = "=IF(RC[-1]="""","""",RC[-43]+RC[-40]+RC[-37]+RC[-34]+RC[-31]+RC[-28]+RC[-25]+RC[-22])"
 Selection.AutoFill Destination:=Range("BF2:BF500")

'December Remaining Spending Plan
 Range("BG2").Select
 ActiveCell.FormulaR1C1 = "=IF(RC[-1]="""","""",RC[-41]+RC[-38]+RC[-35]+RC[-32]+RC[-29]+RC[-26]+RC[-23])"
 Selection.AutoFill Destination:=Range("BG2:BG500")

我想让范围动态,所以我可以删除

"IF(RC[-1]="""","""","

公式的一部分,并且在工作簿中有额外的公式对于数据透视表和其他用户来说并不理想。

我尝试使用LastRow,FillDown,CurrentRegion的组合来玩范围,但我没有运气。

每个公式应具有与所有其他公式相同的行数,并且公式的数量应始终等于A列中的行数减1(标题的减1)。

有没有办法清理它?

谢谢!

2 个答案:

答案 0 :(得分:0)

听起来您每月刷新数据,并且需要在数据右侧的列中包含公式。问题是如何确定将公式放入哪些行。简短的答案是将代码放入ThisWorkBook!Workbook_Open()子中以删除从行BF2到BG500的范围(因为那是最大范围),然后复制从第2行到您拥有数据的行数的公式。您提到了LastRow,所以我假设您知道如何执行此操作。您是否需要示例代码或者这足以让您入门?

答案 1 :(得分:0)

Dim lastRow As Long
Dim ws As Worksheet
'Always set the parent of all Range Objects
Set ws = ActiveSheet 'This should be called by name: Worksheets("Sheet1")

' this assumes column "A" is the column which sets the lastrow.
'If a different column sets the end of the dataset change "A" to that column
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

'do not use .Select or .Activate it slows the code
'You do not need autofill just put it in all the cells at once


'November Remaining Spending Plan
 ws.Range("BF2:BF" & lastRow).FormulaR1C1 = "=RC[-43]+RC[-40]+RC[-37]+RC[-34]+RC[-31]+RC[-28]+RC[-25]+RC[-22]"

'December Remaining Spending Plan
 ws.Range("BG2:BG" & lastRow).FormulaR1C1 = "RC[-41]+RC[-38]+RC[-35]+RC[-32]+RC[-29]+RC[-26]+RC[-23]"