我想在Excel VBA中编写一个可用作Excel公式的用户定义函数,但不是将值返回到调用它的单元格,而是向一系列其他单元格返回一系列值。这在许多数据库加载项中很常见,例如Bloomberg,CapIQ,Morningstar。我尝试了不同的方法,但无法找到实现它的方法。
例如,如果我将此代码放在单元格A1中,它将返回25到单元格A1。
Function AreaOfSquare(length)
AreaOfSquare = length * length
End Function
我想要的是这样的事情:
A B C D E
1 * Eqt1 Eqt1 Eqt2 Eqt2
2 Price vol Price vol
在单元格A1中,我放了=DBLOOKUP(B1:F1,B2:E2, "One Year")
,它会产生如下结果:
A B C D E
1 * Eqt1 Eqt1 Eqt2 Eqt2
2 Price vol Price vol
3 07/14 13 100 12 200
4 06/14 14 120 13 210
5 05/14 15 140 14 220
以下列出了我尝试过的方法:
以公式的形式从数据库Excel加载项获取原始数据。例如,我可以键入=Rawdata(B1:E1, B2:E2)
并获取原始数据。问题是我不知道如何在VBA中调用此函数,以便我可以为输出操作这些数据,因为此函数不是内置的,而是带有数据库插件。或者,我可以先使用公式获取原始数据,然后再操作它们;问题是这需要两步操作,因为我需要输入两次公式。
从Java获取数据并以某种方式导入数据。这很麻烦,因为我需要在老板的计算机环境中配置java应用程序。
有什么建议吗?
答案 0 :(得分:1)
这是我解决它的方法:首先,找到此函数正在调用的单元格。然后你可以移动它。
在下面的示例中,它是将单元格列表的值相加,直到达到所需的bucksize
。
Function bars(bucksize, columnsgap)
Application.Volatile
'this function is to count backward number of bars need to fill up the bucket
'bucksize is the volume of the bucket
'columnsgap= how many rows the volume column away from where this function use
BB = 0
j = 0
'Find the location where this function call
xx = Application.Caller.Column
yy = Application.Caller.Row
x1 = xx - columnsgap
'Add up the volume of bars until it excess or equal to the bucksize
Do
rowshift = j
y1 = yy - rowshift
BB = BB + Cells(y1, x1).Value
j = j + 1
Loop While BB < bucksize
bars = j
End Function