我想将满足特定条件的一行信息分成几行。
在所附的示例中,我想拆分“记录”列中数字为 2 或更多的行,并在每个新行上保留数字 1;但“金额”也应分布在新行中。
我在以下链接中附加了一个包含信息和预期结果的文件: https://www.dropbox.com/s/nsbah933u0p1yvi/CHALLENGEa.xlsx?dl=0并粘贴如下:
答案1
这是一个仅使用基本 Excel 函数的解决方案。假设链接中所示的源表从 A 列开始,第一行数据是第 2 行。首先,添加一个从 H2 开始的辅助列。此列计算新表中每个新名称的起始相对行。
在单元格 H2 中输入1
。H3 中的公式为:
=IF(ISBLANK(A3),"",SUM(C$2:C2)+1)
将其复制到所有源数据行以及您想要预填充的其他行的列中。不需要的部分将保留为空白。
您的输出表从第 I 列开始,第 2 行是第一个数据。由于您的示例有五行数据,因此我将以此为基础制定解决方案公式。只需根据需要更改参考范围即可。I2(您的数字列)中的公式将是:
=IF((ROW()-1)>SUM(C$2:C$6),"",MATCH(ROW()-1,H$2:H$6,1))
您可以将其复制到任意大范围内的列中,以预先填充您最终可能会使用的单元格。此条目和表格中的所有其他条目在需要之前都将保持空白。
日期列为J。J2中的公式为:
=IF(I2="","",VLOOKUP(I2,$A$2:$F$6,2,))
Name 和 ID 列类似,只是在不同的列中使用 VLOOKUP,因此 M2 和 N2 中的公式是:
=IF(I2="","",VLOOKUP(I2,$A$2:$F$6,5,)) (cell M2)
=IF(I2="","",VLOOKUP(I2,$A$2:$F$6,6,)) (cell N2)
您可以复制 J2 公式并编辑 VLOOKUP 列(最后一个参数)。
在输出表中,记录列始终为1
,因此单元格 K2 为:
=IF(I2="","",1)
剩下的一列是金额,它使用两个 VLOOKUP 来输入除法的分子和分母。单元格 L2 将是:
=IF(I2="","",VLOOKUP(I2,$A$2:$F$6,4,)/VLOOKUP(I2,$A$2:$F$6,3,))
如果日期列显示为数字,只需将单元格格式更改为所需的日期格式。现在您可以像对 I 列所做的那样复制所有这些单元格。
这将为您提供示例中显示的输出。
答案2
我会为此使用 Power Query 插件。它有一个 List.Generate 函数可以实现你想要的功能。
我已经使用您的数据构建了一个解决方案,您可以查看或下载它:“Power Query 演示 - 从单元格值生成多行.xlsx”在我的 One Drive 中:
https://onedrive.live.com/redir?resid=4FA287BBC10EC562%21398
其中大部分是使用点击式 Power Query UI 构建的。List.Generate 函数的文档如下:
http://office.microsoft.com/en-gb/excel-help/list-generate-HA104111647.aspx
网络上没有很多实际的例子,而且我无法弄清楚如何将记录值传递给它,所以我只是生成 10 行,然后在后面的步骤中进行过滤。