如何使用Microsoft Visual Basic(VBA)根据每列中的条目数有条件地对Excel表格的元素重新排序?

如何使用Microsoft Visual Basic(VBA)根据每列中的条目数有条件地对Excel表格的元素重新排序?,vba,date,excel,bloomberg,Vba,Date,Excel,Bloomberg,我从彭博社下载了一年来大量资产的收益数据。生成的表测量4行,约3000列。由于报告要求不同,有些列包含四个值,有些列包含两个值,有些列仅包含1个值: 一些公司每年公布收益(31/12:1) 一些公司每半年公布一次收益(6月31日和12月31日:2个值) 一些公司按季度公布其收益(31/3、31/6、31/9、31/12:4个值) 表格值(B17:DKZ20)前面有一列公告日期(A17:A20),对应于我列表中第一家公司的季度公告,因为这是可能的最高频率,涵盖了所有可能的盈利公告日期(31/0

我从彭博社下载了一年来大量资产的收益数据。生成的表测量4行,约3000列。由于报告要求不同,有些列包含四个值,有些列包含两个值,有些列仅包含1个值:

  • 一些公司每年公布收益(31/12:1)
  • 一些公司每半年公布一次收益(6月31日和12月31日:2个值)
  • 一些公司按季度公布其收益(31/3、31/6、31/9、31/12:4个值)
表格值(B17:DKZ20)前面有一列公告日期(A17:A20),对应于我列表中第一家公司的季度公告,因为这是可能的最高频率,涵盖了所有可能的盈利公告日期(31/03;31/06;31/09;31/12)

因为我用过:

Range(B17:DKZ17).Formula = "=BDH([Ticker], ""IS_EPS"", [Beginning Date], [End Date], ""Dates, Period"", ""H,M"")"
使用可选参数隐藏日期,以便直接相邻显示值,可以更清楚地写为:

""Dates = Hidden""
该表现在只包含按发布顺序发布的收益公告,即季度收益公告的日期显示正确,但年度公告显示为已在03年31月31日发布(2012年31月31日正确)半年度公告显示为已于2003年3月31日和6月31日发布(2006年6月31日和12月31日是正确的)

为了纠正这一点,我需要做的是:

  • 将条目从只有一个条目(年度)的列向下移动三个单元格(从单元格1移动到单元格4)
  • 将具有两个条目(半年一次)的列中的条目从单元格1和单元格2移动到单元格2和单元格4
    如何使用Visual Basic(VBA)操作表格,使步骤1。二,。表演什么?是否有移动值的命令,或者它必须是有条件的剪切和粘贴?

    我会将数据读取到2D vba数组中;按照您的规范重新排列数据字段,然后将数组写回工作表。读写可以一步完成;而且在数组中移动东西比在工作表上移动要快得多。

    并非所有公司都有年终31/12,因此您的一些假设不一定是正确的。您是否尝试过“日期=H,期间=M,天数=A,填充=n.A.”?