是否有非 VBA Excel 溢出公式来创建和处理数组数组?

2024-05-13

我在 Excel 365 中有一张工作表,其中包含 A 列和 B 列,如下所示,我想使用一些公式(不是 VBA!)获取 C 列和 D 列。也就是说,我想重复每一个Title for Count次并为其添加一个流水号。

A B C D
1 Title Count Running Title Running Number
2 Anna 3 Anna 1
3 Ben 2 Anna 2
4 Anna 3
5 Ben 1
6 Ben 2

For the 运行标题,我找到了一个有点神秘的公式 https://excelmee.com/excel-formulas/excel-formula-to-make-duplicates-of-every-row-n-times看起来有点不稳定(依赖于字符串处理)。它基本上使用以下公式来创建一个数组{2,2,2,3,3} and XLOOKUP以此来获得头衔。

=XLOOKUP(
   IFERROR(
      FILTERXML(
        "<a><b>"&
        SUBSTITUTE(TRIM(TEXTJOIN(" ",TRUE,REPT(ROW($A$2:$A$100)&" ",$B$2:$B$100)))," ","</b><b>")&
        "</b></a>",
        "//b"
      ),
   ""),
   ROW($A$2:$A$100),
   A2:A100
)

这是可行的,但如果能看到一些不那么不完整的公式(即不依赖于 Excel 如何处理字符串的细节)来实现这一目的,那就太好了。

For the 流水号, I could使用类似的公式=IF($A2<>"",IF($C1=$C2,$D1+1,1),"")在单元格 D2 中,并通过向下拖动右下角将其向下延伸。这可行,但我很想看到spilling公式只需在 D2 中定义,无需在其他地方定义。

总之,有没有一种方法可以在上面的示例中创建列 C 和 D,而无需定义输出的大小(就像我通过手动扩展公式区域所做的那样),并且无需诉诸依赖于字符串内部工作的函数在 Excel 中?


您可以使用以下任一公式:


Using TEXTSPLIT() & TEXTJOIN() with REPT()

=TEXTSPLIT(TEXTJOIN("-",,REPT(A2:A3&"|",B2:B3)),"-","|",1)

Or,

使用友好名称创建自定义公式LAMBDA()

• 单元格中使用的公式C2

=REPEAT.NTIMES(A2:A3,B2:B3)

卓越LAMBDA()函数为我们提供了一种创建可以在整个工作簿中重用的自定义函数的方法,而无需使用VBA,有一个friendly name.

中使用的公式为姓名经理如下所示,带有测试语法

=LAMBDA(values,num_repeat,
XLOOKUP(SEQUENCE(SUM(num_repeat)),
VSTACK(1,SCAN(1,num_repeat,LAMBDA(a,b,a+b))),
VSTACK(values,""),,-1))(A2:A3,B2:B3)

Copy the above formula, not including the testing parameters at the end, press CTRL+F3, this opens the Name Manager, click New.

In the New Name dialog, enter the name REPEAT.NTIMES, leave the scope set to workbook, and paste the formula you copied into the "Refers to" input area, press OK.

现在既然LAMBDA()公式有一个名称,它可以像任何其他函数一样在工作簿中使用。


最后,为了获得运行号码,我们可以使用COUNTIF()功能,

• 单元格中使用的公式D2

=COUNTIF(C$2:C2,C2)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否有非 VBA Excel 溢出公式来创建和处理数组数组? 的相关文章

随机推荐