Xlambda
Well-known Member
- Joined
- Mar 8, 2021
- Messages
- 860
- Office Version
- 365
- Platform
- Windows
ASUBARRAYS extracts subarrays of an array. calls ATEXTJOIN , ASTACK , AUNSTACK
Original idea credits to tboulden , different approach. The core of the formula is a simple concept based on a simple formula that extracts every subarray in rows format:
=LAMBDA(a,r,c,LET(w,ROWS(a),l,COLUMNS(a),x,l-c+1,y,w-r+1,m,SEQUENCE(,r*c),s,SEQUENCE(x*y),INDEX(IF(a<>"",a,""),QUOTIENT(m-1,c)+1+QUOTIENT(s-1,x),MOD(m-1,c)+1+MOD(s-1,x))))
Added to this other 2 formats that could be useful, and an explicit extraction of anyone of them, based on its index. Other functions on minisheet ASELECT , AAGGREGATE
Original idea credits to tboulden , different approach. The core of the formula is a simple concept based on a simple formula that extracts every subarray in rows format:
=LAMBDA(a,r,c,LET(w,ROWS(a),l,COLUMNS(a),x,l-c+1,y,w-r+1,m,SEQUENCE(,r*c),s,SEQUENCE(x*y),INDEX(IF(a<>"",a,""),QUOTIENT(m-1,c)+1+QUOTIENT(s-1,x),MOD(m-1,c)+1+MOD(s-1,x))))
Added to this other 2 formats that could be useful, and an explicit extraction of anyone of them, based on its index. Other functions on minisheet ASELECT , AAGGREGATE
Excel Formula:
=LAMBDA(a,r,c,f,i,
LET(w,ROWS(a),l,COLUMNS(a),o,MEDIAN(1,r,w),u,MEDIAN(1,c,l),x,l-u+1,y,w-o+1,m,SEQUENCE(,o*u),s,SEQUENCE(x*y),
z,INDEX(IF(a<>"",a,IF(f,""," ")),QUOTIENT(m-1,u)+1+QUOTIENT(s-1,x),MOD(m-1,u)+1+MOD(s-1,x)),
t,ATEXTJOIN(z,"arr "&s&" =",,","),k,ASTACK(AUNSTACK(ASTACK(AUNSTACK(z,1),u),o),x*u),
n,ASTACK(XLOOKUP(MEDIAN(i,1,x*y),s,z),u),q,SWITCH(f,0,t,1,z,2,k,"check format"),
IF(i,n,q)
)
)
subarrays.xlsx | ||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | AA | AB | |||
1 | sub 3x4 | compact format | ||||||||||||||||||||||||||||
2 | tot subs (5-3+1)*(6-4+1)=3*3=9 | arguments r=3,c=4,f=0,i=0 | arguments r=3,c=4,f=1,i=0 row format | sum every sub | ||||||||||||||||||||||||||
3 | =ASUBARRAYS(A5:F9,3,4,,) | =ASUBARRAYS(A5:F9,3,4,1,) | =AAGGREGATE(J4#,5,) | |||||||||||||||||||||||||||
4 | sample 5x6 | arr 1 =a,b,2,-3,5,d, ,3,-4,g,0,v | a | b | 2 | -3 | 5 | d | 3 | -4 | g | 0 | v | 3 | max every sub | |||||||||||||||
5 | a | b | 2 | -3 | 0 | c | arr 2 =b,2,-3,0,d, ,3,e,g,0,v,10 | b | 2 | -3 | 0 | d | 3 | e | g | 0 | v | 10 | 12 | =AAGGREGATE(J4#,1,) | ||||||||||
6 | 5 | d | 3 | e | f | arr 3 =2,-3,0,c, ,3,e,f,0,v,10,x | 2 | -3 | 0 | c | 3 | e | f | 0 | v | 10 | x | 12 | 5 | |||||||||||
7 | -4 | g | 0 | v | 10 | x | arr 4 =5,d, ,3,-4,g,0,v,g,9,-4, | 5 | d | 3 | -4 | g | 0 | v | g | 9 | -4 | 9 | 10 | |||||||||||
8 | g | 9 | -4 | r | n | arr 5 =d, ,3,e,g,0,v,10,9,-4, ,r | d | 3 | e | g | 0 | v | 10 | 9 | -4 | r | 18 | 10 | ||||||||||||
9 | 0 | s | z | y | 8 | -2 | arr 6 = ,3,e,f,0,v,10,x,-4, ,r,n | 3 | e | f | 0 | v | 10 | x | -4 | r | n | 9 | 9 | |||||||||||
10 | arr 7 =-4,g,0,v,g,9,-4, ,0,s,z,y | -4 | g | 0 | v | g | 9 | -4 | 0 | s | z | y | 1 | 10 | ||||||||||||||||
11 | arr 8 =g,0,v,10,9,-4, ,r,s,z,y,8 | g | 0 | v | 10 | 9 | -4 | r | s | z | y | 8 | 23 | 10 | ||||||||||||||||
12 | arr 9 =0,v,10,x,-4, ,r,n,z,y,8,-2 | 0 | v | 10 | x | -4 | r | n | z | y | 8 | -2 | 12 | 9 | ||||||||||||||||
13 | 10 | |||||||||||||||||||||||||||||
14 | also we can acomplish this | arguments r=3,c=4,f=2,i=0 stack format | 10 | |||||||||||||||||||||||||||
15 | with ASELECT | =ASUBARRAYS(A5:F9,3,4,2,) | ||||||||||||||||||||||||||||
16 | =ASELECT(A5:F9,2,4,,4,) | a | b | 2 | -3 | b | 2 | -3 | 0 | 2 | -3 | 0 | c | |||||||||||||||||
17 | 5 | d | 0 | 3 | -ASUBARRAYS, like ASELECT | 5 | d | 3 | d | 3 | e | 3 | e | f | ||||||||||||||||
18 | -4 | g | 0 | v | can be dynamic, but in a | -4 | g | 0 | v | g | 0 | v | 10 | 0 | v | 10 | x | |||||||||||||
19 | g | 9 | -4 | 0 | different manner | 5 | d | 3 | d | 3 | e | 3 | e | f | ||||||||||||||||
20 | -4 | g | 0 | v | g | 0 | v | 10 | 0 | v | 10 | x | ||||||||||||||||||
21 | =ASELECT(A5:F9,3,,3,,) | g | 9 | -4 | 9 | -4 | r | -4 | r | n | ||||||||||||||||||||
22 | 0 | v | 10 | x | -4 | g | 0 | v | g | 0 | v | 10 | 0 | v | 10 | x | ||||||||||||||
23 | -4 | 0 | r | n | g | 9 | -4 | 9 | -4 | r | -4 | r | n | |||||||||||||||||
24 | z | y | 8 | -2 | 0 | s | z | y | s | z | y | 8 | z | y | 8 | -2 | ||||||||||||||
25 | extracts 9th sub array | extracts 4th sub array | ||||||||||||||||||||||||||||
26 | other functions | arguments r=3,c=4,f=1,i=9 | arguments r=3,c=4,f=2,i=4 | |||||||||||||||||||||||||||
27 | ASELECT | =ASUBARRAYS(A5:F9,3,4,1,9) | =ASUBARRAYS(A5:F9,3,4,2,4) | |||||||||||||||||||||||||||
28 | AAGGREGATE | -when i argument >0, | 0 | v | 10 | x | 5 | d | 3 | |||||||||||||||||||||
29 | f argument is ignored | -4 | r | n | -4 | g | 0 | v | ||||||||||||||||||||||
30 | whatever value it has | z | y | 8 | -2 | g | 9 | -4 | ||||||||||||||||||||||
31 | ||||||||||||||||||||||||||||||
32 | - if we always want last array | =ASUBARRAYS(A5:F9,3,4,,999) | ||||||||||||||||||||||||||||
33 | we can use a large i value | 0 | v | 10 | x | |||||||||||||||||||||||||
34 | -4 | r | n | |||||||||||||||||||||||||||
35 | z | y | 8 | -2 | ||||||||||||||||||||||||||
36 | ||||||||||||||||||||||||||||||
37 | -other sub dim example 5x5 | |||||||||||||||||||||||||||||
38 | =ASUBARRAYS(A5:F9,7,8,2,) | =ASUBARRAYS(A5:F9,5,5,2,) | ||||||||||||||||||||||||||||
39 | a | b | 2 | -3 | 0 | c | -if sub dim values exceed | a | b | 2 | -3 | 0 | b | 2 | -3 | 0 | c | |||||||||||||
40 | 5 | d | 3 | e | f | main array dimensions,(7x8) | 5 | d | 3 | e | d | 3 | e | f | ||||||||||||||||
41 | -4 | g | 0 | v | 10 | x | will be downsized to main | -4 | g | 0 | v | 10 | g | 0 | v | 10 | x | |||||||||||||
42 | g | 9 | -4 | r | n | array dimensions | g | 9 | -4 | r | 9 | -4 | r | n | ||||||||||||||||
43 | 0 | s | z | y | 8 | -2 | ← | 0 | s | z | y | 8 | s | z | y | 8 | -2 | |||||||||||||
44 | ||||||||||||||||||||||||||||||
45 | =ASUBARRAYS(A5:F9,5,5,,10) | |||||||||||||||||||||||||||||
46 | b | 2 | -3 | 0 | c | |||||||||||||||||||||||||
47 | d | 3 | e | f | ||||||||||||||||||||||||||
48 | g | 0 | v | 10 | x | |||||||||||||||||||||||||
49 | 9 | -4 | r | n | ||||||||||||||||||||||||||
50 | s | z | y | 8 | -2 | |||||||||||||||||||||||||
51 | =ASUBARRAYS(A5:F9,5,5,1,) | |||||||||||||||||||||||||||||
52 | a | b | 2 | -3 | 0 | 5 | d | 3 | e | -4 | g | 0 | v | 10 | g | 9 | -4 | r | 0 | s | z | y | 8 | |||||||
53 | b | 2 | -3 | 0 | c | d | 3 | e | f | g | 0 | v | 10 | x | 9 | -4 | r | n | s | z | y | 8 | -2 | |||||||
54 | ||||||||||||||||||||||||||||||
Sheet2 |
Cell Formulas | ||
---|---|---|
Range | Formula | |
J3,A51,J45,J38,A38,J32,Q27,J27,A21,A16,J15,Y5,H3,W3 | J3 | =FORMULATEXT(J4) |
H4:H12 | H4 | =ASUBARRAYS(A5:F9,3,4,,) |
J4:U12 | J4 | =ASUBARRAYS(A5:F9,3,4,1,) |
W4:W12 | W4 | =AAGGREGATE(J4#,5,) |
Y6:Y14 | Y6 | =AAGGREGATE(J4#,1,) |
J16:U24 | J16 | =ASUBARRAYS(A5:F9,3,4,2,) |
A17:D19 | A17 | =ASELECT(A5:F9,2,4,,4,) |
A22:D24 | A22 | =ASELECT(A5:F9,3,,3,,) |
J28:M30 | J28 | =ASUBARRAYS(A5:F9,3,4,1,9) |
Q28:T30 | Q28 | =ASUBARRAYS(A5:F9,3,4,2,4) |
J33:M35 | J33 | =ASUBARRAYS(A5:F9,3,4,,999) |
A39:F43 | A39 | =ASUBARRAYS(A5:F9,7,8,2,) |
J39:S43 | J39 | =ASUBARRAYS(A5:F9,5,5,2,) |
J46:N50 | J46 | =ASUBARRAYS(A5:F9,5,5,,10) |
A52:Y53 | A52 | =ASUBARRAYS(A5:F9,5,5,1,) |
Dynamic array formulas. |
Upvote
0