根据规则将一行拆成多行
某Excel表格如下。
A |
B |
C |
D |
|
1 |
CreditBankCode |
BeneficiaryName |
Narration |
Amount |
2 |
011 |
BENSON MATHIAS |
April 2024 Salary |
72558.95 |
3 |
057 |
SAIFULLAHI RABIU |
April 2024 Salary |
45000 |
4 |
076 |
ABDULKADIR AUWALU |
April 2024 Salary |
55000 |
5 |
001 |
001ABDULKADIR |
April 2024 Salary |
85000 |
6 |
002 |
002ABDULKADIR |
April 2024 Salary |
105000 |
7 |
003 |
003ABDULKADIR |
April 2024 Salary |
115000 |
要求将一行拆成多行,规则是:如果Amount小于50000则不拆分;如果Amount大于50000,则每30000拆成一条记录。
10 |
A |
B |
C |
D |
10 |
CreditBankCode |
BeneficiaryName |
Narration |
Amount |
11 |
011 |
BENSON MATHIAS |
April 2024 Salary |
30000 |
12 |
011 |
BENSON MATHIAS |
April 2024 Salary |
42558.95 |
13 |
057 |
SAIFULLAHI RABIU |
April 2024 Salary |
45000 |
14 |
076 |
ABDULKADIR AUWALU |
April 2024 Salary |
30000 |
15 |
076 |
ABDULKADIR AUWALU |
April 2024 Salary |
25000 |
16 |
001 |
001ABDULKADIR |
April 2024 Salary |
30000 |
17 |
001 |
001ABDULKADIR |
April 2024 Salary |
30000 |
18 |
001 |
001ABDULKADIR |
April 2024 Salary |
25000 |
19 |
002 |
002ABDULKADIR |
April 2024 Salary |
30000 |
20 |
002 |
002ABDULKADIR |
April 2024 Salary |
30000 |
21 |
002 |
002ABDULKADIR |
April 2024 Salary |
45000 |
22 |
003 |
003ABDULKADIR |
April 2024 Salary |
30000 |
23 |
003 |
003ABDULKADIR |
April 2024 Salary |
30000 |
24 |
003 |
003ABDULKADIR |
April 2024 Salary |
30000 |
25 |
003 |
003ABDULKADIR |
April 2024 Salary |
25000 |
使用 SPL XLL,输入公式:
=spl("=E@b(?.news((t=~4,100.iterate@a(30000,,!if(t>50000,t-=30000))|t);?.~1,?.~2,?.~3,~))",A2:D7)
函数 E@b 去掉表格的标题,news 根据规则将一行拆为多行,100.iterate 循环迭代 100 次,符合条件时停止迭代(这里假设最多拆分 100 行,可根据需要扩大)。~ 表示序列的当前成员,~1 表示当前成员的第 1 个子成员,符号 | 用于合并序列。
英文版 https://c.scudata.com/article/1725264553014
这个 iterate 好👍 跟练一下 iterate😄
发现在 iterate 里变量要写在最后一个参数的位置,比如图中的 "R=~~(~)" 不能写在 1 参的位置,不然识别不了变量。iterate 是不是首先执行第三参?