基于BDS公式实现跨表循环批量生成并追加表格的技术咨询
解决BDS公式结果批量追加到表格末尾的问题
我之前处理Bloomberg数据的时候也碰到过这种动态追加BDS结果的需求,给你两个实用的方案:
方案一:手动定位插入位置(适合少量数据)
BDS函数返回的是多行结果,你可以通过COUNTA函数快速找到上一次输出的最后一行:
- 假设第一个BDS公式放在A1单元格,输出从A1开始往下延伸
- 在任意空白单元格输入
=COUNTA($A:$A)+1,这个结果就是下一个公式应该插入的行号(比如如果A1到A10有数据,结果就是11) - 直接在A列对应的行(比如A11)输入
=BDS(Bonds!J3&" ISIN","ISSUE_UNDERWRITER","Headers","Y"),就能精准追加到上一个表格末尾
如果不想每次计算行号,也可以用OFFSET辅助定位:选中目标单元格后输入=OFFSET(A1,COUNTA(A:A),0),按回车虽会显示#VALUE!,但这个单元格的位置就是正确的插入点,你再把BDS公式输进去就行。
方案二:VBA自动批量追加(适合大量ISIN数据)
如果有很多ISIN要处理,手动插公式太麻烦,写个简单的VBA宏就能自动搞定:
Sub AppendBDSResults() Dim lastRow As Long Dim i As Integer ' 假设ISIN在Bonds表的J2开始,直到J列最后一个非空单元格 Dim isinCount As Integer isinCount = Sheets("Bonds").Cells(Rows.Count, "J").End(xlUp).Row - 1 ' 减去表头行 For i = 2 To isinCount + 1 ' 找当前结果区域的最后一行 lastRow = Sheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Row ' 如果是第一个公式,直接从A1开始;否则从lastRow+1开始 If i = 2 Then lastRow = 0 End If ' 在目标单元格写入BDS公式 Sheets("Sheet1").Cells(lastRow + 1, "A").Formula = _ "=BDS(Bonds!J" & i & "& "" ISIN"",""ISSUE_UNDERWRITER"",""Headers"",""Y"")" Next i End Sub
使用步骤:
- 按下Alt+F11打开VBA编辑器
- 插入一个新模块,把上面的代码粘贴进去
- 替换代码中的
Sheet1为你要输出结果的工作表名称 - 运行宏,就能自动把所有J列的ISIN对应的BDS结果依次追加到表格末尾
小提示
如果你不需要重复的表头,可以把公式里的"Headers","Y"改成"Headers","N",这样只有第一个公式输出表头,后面的只输出数据,表格会更整洁。
内容的提问来源于stack exchange,提问作者alexgil55ka
相关产品推荐
相关产品推荐

