我正在使用 SharePoint 通过其调查功能收集数据。但是,我想使输出数据更易于管理。因此,我想将多列合并为几列。
目前它看起来像这样:
Name 1 Address 1 Age 1 Name 2 Address 2 Age 2 Name 3 Address 3 Age 3 Date
John My Home 50 Mary Your Home 40 James Our Home 70 01/31/1991
我希望它看起来像这样:
**Name Address Age Date**
John My Home 50 01/31/1991
Mary Your Home 40 01/31/1991
James Our Home 70 01/31/1991
调查不断更新,因此,理想情况下,从一张表中提取数据并以这种方式生成的宏/vba 会更好。
另外,需要注意的是,有时任一列中的单元格可能为空。因此,我要确保公式不会因为看到空白单元格而停止,而是从上到下从一列复制到另一列。
最后但同样重要的一点是,单元格中还有其他数据,我可能会将其他步骤添加到宏中,但这是我无法弄清楚的大部分步骤。
在此先感谢您的帮助 !
类似查询(看起来):Excel 2010 将数据从多列/行移动到单行
答案1
有一种简单的方法可以做到这一点,无需 VBA,只需使用单元格引用即可。看起来您的“源”示例使用了 A:J 列,我假设有列标题,因此数据从第 2 行开始。我假设您的输出表也有列标题,结果从第 2 行开始,并使用 A:D 列。下面的公式基于此布局,因此您可能需要调整为不同的布局或将数据放在这些位置。所以这是源数据:
结果如下:
整个过程使用“1 1 / 2 ”公式。由于三行的日期引用自同一个位置,因此它是主公式的略微修改版本。主公式是:
=INDIRECT("sheet1!r"&CEILING((ROW()-1)/3,1, )+1&"c"&COLUMN()+MOD((ROW()+1)/3,1)*9,0)
您可以将其输入到 A2 中,然后将其复制到 B 列和 C 列,并向下复制以预填充所需的行数。当您需要更多行时,只需预填充任意数量的额外行即可。
它使用 INDIRECT 函数从计算值创建单元格引用。我使用 R1C1 样式地址,因为它们适合这类计算。行计算为三个输出行生成对同一源行的引用。列计算为每个连续结果行移动三个源列。
日期列只是将列引用固定到源的第 10 列:
=INDIRECT("sheet1!r"&CEILING((ROW()-1)/3,1, )+1&"c10",0)
这将为空源单元格生成输出0
。隐藏该单元格的最简单方法是将页面视图设置为不显示零值。我在这里就是这么做的。该公式已预先填充在 Bert 以外的行中。它还将隐藏单个空单元格。