Excel VBA:返回一系列数据的自定义函数

时间:2014-07-29 00:38:41

标签: java excel vba excel-vba

我想在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应用程序。

有什么建议吗?

1 个答案:

答案 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