首页 > 解决方案 > 根据类似日历的数据填充行

问题描述

在 Excel 中,我有一个员工/日期表,其中员工位于垂直轴,日期位于水平轴。该表包含有关员工休假和休假的数据,显示为“+”。

我需要一些东西,它会根据“+”序列开始的次数将相同的名称填充到多行,并将在每一行返回一起的休息日,如图所示:

在此处输入图像描述

着色仅用于理解目的。所有单元格都带有“无填充”。这需要对一个包含 3000 人的庞大数据库进行。

标签: excelvbaexcel-formula

解决方案


让我先说这个答案,我也不认为这是解决这个问题的有效方法,更不用说有效的方法了,而且它当然也不是直截了当的。不过,我应该说得比这更强烈,以免造成混淆:这不是解决这个问题的好方法!有了这个,我无法抗拒这个挑战。

我将尝试发布足够的详细信息供您复制我的 Excel 文件。

如果不明显,这可以扩展到原始员工表中带有“+”的行数。您将从放入原始表格开始。然后,更新下面显示的两个范围名称以获取所有员工和所有数据。跳过一行,粘贴到 '1' 到 '31' 的行,然后粘贴两个主要公式(即从单元格A9B9开始的公式)) 在下面的行中,确保将任何对第 8 行和第 9 行的引用替换为新适用的起始行,然后向下拖动到所需的行数,以通过最后一行原始数据获取优势!如果您想看到 B/M/E/N(开始、中间、结束、下一个)的配色方案自动出现(可选步骤),请在整个范围内添加条件格式。然后,在 B/M/E/N 部分下方创建一个相同大小的部分,以放入您的“如果 'M' 然后 '+' 否则为空白”公式。

这是我创建的示例文件中的网格屏幕截图:

在此处输入图像描述

您需要创建以下命名范围:

在此处输入图像描述

或者,如果您想看到图片中的颜色自动出现,您可以创建以下条件格式:

在此处输入图像描述

(您可能会发现在放入公式后放入条件格式更容易,但如果您想预先放入,请确保仅在该部分粘贴特殊公式)

现在,有了命名范围,下面是要放入工作表网格的内容:

第 1 步:将数据硬编码到第 8 行。

步骤2:在单元格A9中输入以下公式并向下拖动到单元格A22

=IF(B8=1,INDEX(rngEmps,1),IF(COUNTIF(OFFSET(rngData,MATCH(A8,rngEmps,0)-1,,1,),"+")=COUNTIF(OFFSET($B$8:$AF8,MATCH(A8,$A$8:$A8,0)-1,,COUNTA($A$8:$A8)+COUNTBLANK($A$8:$A8)-(MATCH(A8,$A$8:$A8,0)-1),),"M"),INDEX(rngEmps,MATCH(A8,rngEmps,0)+1),A8))

步骤3:在B9单元格中输入以下公式,然后向右和向下拖动到单元格AF22

=IF($A9=$A8,IF(OR(B8="B",B8="M"),"B",IF(B8="E",IF(A9="B","B","E"),IF(OR(A9="B",A9="M"),"M","N"))),IF(B$2=1,IF(INDEX(rngData,MATCH($A9,rngEmps,0),1)="+","M","B"),IF(INDEX(OFFSET(rngData,MATCH($A9,rngEmps,0)-1,,1),1,B$8)="+",IF(OR(A9="E",A9="N"),"N","M"),IF(A9="B","B","E"))))

拉格纳,如果你在任何地方遇到这个问题,请告诉我。另外,我猜你可以用“+”重新创建底部。

更新/编辑:我昨晚(2019 年 10 月 23 日)发布的主(单元格 A9)公式中有一个小错误,因为它没有正确处理第一列是“+”;现在应该修复。另外,总的来说,我没有花时间彻底优化这些公式(例如,尽可能减少重复工作,确保安排 IF 语句的理想顺序等)。这意味着更多的概念证明。如果您在我的解决方案中发现错误,请发表评论。谢谢!


推荐阅读