#58 - Split Each Row into Multiple Rows According to The Specified Rule

#58 - Split Each Row into Multiple Rows According to The Specified Rule

Problem description & analysis:

Here is an Excel table:

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

We need to split each row into multiple rows. The rule is like this: if Amount value is less than 50000, do not split the row; if Amount value is greater than 50000, split the row by creating a new row every 30000. Below is the expected result:

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

Solution:

Enter the following formula in SPL XLL:

=spl("=E@b(?.news((t=~4,100.iterate@a(30000,,!if(t>50000,t-=30000))|t);?.~1,?.~2,?.~3,~))",A2:D7)

As shown in the picture below:

Picture1png

Explanation:

E@b function removes table titles. news()function split each row into multiple rows according to the specified rule; 100.iterate performs the iteration 100 times repeatedly and stops the iteration as long as the specified condition is met (suppose one row is split into 100 rows at most, and increase the number as needed); ~ is the current member of the sequence, ~1 is the 1st child member of the current member; and symbol | concatenates sequences.


The example was originally on Reddit. Feel free to compare the conventional solutions with the SPL approach.

If you are ready to simplify? Give it a try with the links below: 👇

SPL download address: esProc Desktop FREE Download

Plugin Installation Method: SPL XLL Installation and Configuration

References to other rich Excel operation cases: Desktop and Excel Data Processing Cases

YouTube FREE courses: SPL Programming