我正在 Excel 中编写一个宏函数来组织一组月度销售数据。原始格式每个条目使用 6 行,而组织后的表格仅使用 1 行。销售数量每个月都在变化,所以我需要想办法确定有多少销售条目,这样我才知道要将公式扩展至何种程度。
原始数据的末尾总是会出现第二列的单词“SIGNED:”,因此我使用间接和匹配函数来确定公式的填充程度。我使用的代码如下所示:
Application.Goto Reference:= _
"INDIRECT(""T"" & (MATCH(""SIGNED:"",RawData!C2:C2,0)-3)/6+1)"
Range("T2", Selection).Select
Selection.FillDown
一开始效果很好,但有时原始数据显然不会使用 6 行,因为有时带有上述输入的匹配函数不会返回整数。因此,我尝试在匹配函数周围使用上限函数来确保我得到一个整数,并且认为即使它偏离一两个也没关系,因为这很容易手动处理。我写的内容如下:
Application.Goto Reference:= _
"INDIRECT(""T"" & Ceiling((MATCH(""SIGNED:"",RawData!C[-20],0)-3)/6+1),1))"
Range("A2", Selection).Select
Selection.FillDown
现在我收到错误,但我不知道为什么。这是否与 ceiling 函数返回的数字格式有关?如果您能提供解决方案,或者提供查找销售条目数量的不同方法,我将不胜感激。
谢谢!
答案1
我会以不同的方式处理这个问题。下面的代码片段使用范围的 .Find 属性来确定工作表中的最后一个数据单元格。.Find 返回一个单元格引用,我们可以使用 .Row 属性获取其行。
还要注意,没有必要选择范围来对其采取行动。
Dim lastcell As Range
Set lastcell = Cells.Find(What:="*", After:=[A1], _
SearchDirection:=xlPrevious)
Range("A2:A" & lastcell.Row).FillDown