嘿,我正在尝试编写一个excel函数,该函数采用用户选择的范围,并根据所填充的单元格所在的列执行不同的计算。下面的屏幕截图显示了各列的设置。
我想将AA5设置为“ = myFunction($ AA1:$ AD4)”,然后单击并拖动以使用自动填充功能使用相同的“ = myFunction”填充AB5,AC5和AD5 ($ AA1:$ AD4)”,但此myFunction将根据自动填充过程中填充的单元格执行不同的操作。
我知道如何在子例程中执行此操作,在该例程中,用户将选择第一个打开的单元格AA5,并被提示输入要用于计算的范围。我会按照以下方式做些事情:
Sub CalcCells()
Dim myRange As Range
Set myRange = Application.InputBox("Select the cells you want to use...", Type:=8)
Dim numColumn As Long
For numColumn = 0 To myRange.Columns.Count - 1
Select Case numColumn
Case Is = 0
ActiveCell.Offset(0, numColumn).Formula = "=SUM(" + myRange.Columns(1) + ")"
Case Is = 1
ActiveCell.Offset(0, numColumn).Formula = "=SUMPRODUCT(" + myRange.Columns(1) + "," + myRange.Columns(2) + ")"
Case Is = 2
ActiveCell.Offset(0, numColumn).Formula = "=SUMPRODUCT(" + myRange.Columns(1) + "," + myRange.Columns(3) + ")/SUM(" + myRange.Columns(1) + ")"
Case Is = 3
ActievCell.Offset(0, numColumn).Formula = "=SUMSQ(" + myRange.Columns(4) + ")"
End Select
Next numColumn
End Sub
所以基本上我想精确地做到这一点,但是我希望它成为一个函数,当我单击并拖动并自动填充AB5:AD5时,它知道单元格排在哪一列并基于该列执行计算,并使用它几乎是一个参数。它也不总是四行,因此它必须能够容纳变化的行数,但是只要用户选择相同的数据类型,.Columns就可以使用它。
这可能吗,我该怎么办?感谢您的任何帮助。我已经做了很多搜索,但是我不知道自己是否在寻找正确的方法,但是我找不到真正有用的东西。
答案 0 :(得分:1)
这样的事情呢?基本上,您将获得使用Application.Caller.Column
输入公式的单元格的列。然后inputRange.Column
为您提供输入范围的最左列。根据两者的区别,您知道要使用哪个工作表函数。如果差异为0,则您的公式将输入到第一栏中,因此您使用Sum
。如果差异为1,则使用Sumproduct
,依此类推。
Function SummarizeCells(inputRange As Range) As Double
Dim col As Long
col = Application.Caller.Column - inputRange.Column
Select Case col
Case 0
SummarizeCells = WorksheetFunction.Sum(inputRange.Columns(1))
Case 1
SummarizeCells = WorksheetFunction.SumProduct(inputRange.Columns(1), inputRange.Columns(2))
Case 2
SummarizeCells = WorksheetFunction.SumProduct(inputRange.Columns(1), inputRange.Columns(3)) / WorksheetFunction.Sum(inputRange.Columns(1))
Case 3
SummarizeCells = WorksheetFunction.SumSq(inputRange.Columns(4))
End Select
End Function
此处为示例视图: