【问题标题】:Populate rows based on calendar-like data根据类似日历的数据填充行
【发布时间】:2020-02-19 23:20:03
【问题描述】:

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

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

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

【问题讨论】:

  • 注意 - SO 并不意味着是一个代码编写服务。到目前为止你有没有尝试过?
  • 不。我真的不知道从哪里开始。
  • 我真诚地建议您重新考虑您的方法,如果可以的话。这种设置感觉不是解决您的问题的最有效解决方案。
  • 公式不会为你做这件事。这将需要 vba。
  • “我真诚地建议您重新考虑您的方法,如果可以的话。这种设置感觉并不是解决您的问题的最有效方法。”我不能,因为“之前的数据”已经是这种形状,甚至不是我的工作。我只需要将它们转换为日期范围。

标签: excel vba excel-formula


【解决方案1】:

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

我将尝试发布足够的详细信息,以便您复制我的 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 语句的理想顺序等)。这意味着更多的概念证明。如果您在我的解决方案中发现错误,请发表评论。谢谢!

【讨论】:

  • 非常感谢您的努力。我没有时间彻底测试解决方案,但据我所见,我很难让公式适用于不同的起始单元格。并且为了确保我在“第 1 步:将数据硬编码到第 8 行”中正确理解了这一点,您的意思是数据只是值,后面没有任何公式。
  • 要具体说明我解决问题的方法,我需要将结果作为名称列表(包含重复值以表示多个休息日),并在名称旁边显示开始和结束日期。凭借我的 Excel 知识,我可以从仅包含单个“+”句点但不包含多个句点的行中提取日期。如果有比行数更好的方法,就像我在原始帖子中描述的那样,请告诉我。
  • 对于您的第一条评论,是的,起始数据被假定为“硬编码”,这意味着没有任何公式的值。至于不同的起始行,这显然是必须的,我建议仔细阅读我的答案中以“如果不明显,这可以扩展到你拥有的行数......”开头的段落。实际上,在您更新两个命名范围以获取约 3000 行之后,再看一遍,任务比我描述的要容易一些,因为两个主要公式实际上无需修改即可正确复制。
  • 鉴于条件格式化步骤是完全可选的(它只是在 B/M/E/N 上提供颜色;它不会影响任何公式结果),这里有一些新说明:
  • 是的!我必须为整个项目工作。非常感谢!
猜你喜欢
  • 2021-06-13
  • 2020-09-04
  • 2020-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多