无需 VBA 即可实现动态数组的 For-each 循环功能?

问题描述 投票:0回答:1

我花了几个小时试图解决这个问题,并尝试了很多方法来让它发挥作用(例如,Let、Offset、Countif、Lambda、辅助列等),但还无法解决这个问题。

这是电子表格的示例。注意:这已大大简化。实际的电子表格有许多课程开始日期、许多不同的事件以及非常不同的课程结构。

每个团队都有多个课程,且开始日期不同。每个团队也有完全不同的班级结构(不同的事件,不同的时间线)。 Tstart=从课程开始日期起事件发生的天数。持续时间=事件持续的天数。给出了“课程开始日期”和“课程结构”部分,但需要计算整个“时间表”部分,并且它需要是如图所示的运行列表。

流程顺序为:

如果“课程开始日期”不为空,则根据该团队的班级结构计算课程表。 (这部分我有,但我确信有比我现有的更好的方法)。

然后,检查前一个“课程开始日期”下方的一个单元格,并重复上述操作,并将输出放置在前一个输出的正下方。这是我无法弄清楚的迭代部分。

动态数组表现不佳,因为每个团队的日程安排根据不同的事件数量而有不同的行数。

无法弄清楚如何使用 Offset 或其他函数在单个公式中进行迭代。

非常感谢任何帮助!!!

这是 Markdown 表格格式的给定数据。

团队 班级 开课日期 团队 活动 开始 持续时间
黄色 1 2024 年 1 月 15 日 黄色 文书工作 -10 2
蓝色 1 2024 年 1 月 20 日 黄色 登录 0 1
橙色 1 2024 年 1 月 30 日 黄色 采访 2 2
黄色 2 2024 年 2 月 15 日 蓝色 文书工作 -8 2
蓝色 登录 0 1
蓝色 采访 4 2
蓝色 再见 6 1
橙色 文书工作 -6 1
橙色 登录 0 1
橙色 会议 3 1
橙色 采访 5 1
arrays excel foreach
1个回答
0
投票

您可以使用REDUCE获取数据:

=DROP(REDUCE(
    "",ROW(A2:C5),
        LAMBDA(y,z,
            VSTACK(y,
                LET(x,FILTER(E:H,E:E=INDEX(A:A,z)),
                HSTACK(
                    CHOOSECOLS(x,1,2),
                    INDEX(B:B,z)+CHOOSECOLS(x,3)*0,
                    INDEX(C:C,z)+CHOOSECOLS(x,3),
                    INDEX(C:C,z)+CHOOSECOLS(x,3)+CHOOSECOLS(x,4)-1)
                    )))),1)

© www.soinside.com 2019 - 2024. All rights reserved.