我正在寻找一个简短的代码(或公式?),我可以用它来重新排列我的数据,特别是将行彼此相邻放置(见图)。
谢谢你。
我发现的最接近的是结合使用 MOD 和 OFFSET 的公式(https://www.youtube.com/watch?v=Tt4nUYVp2v0&ab_channel=MikeWong),但这并不能完全达到我想要的效果。
数据:
A | B | C | |
---|---|---|---|
1 | |||
2 | 1 | 3112.5 | 947 |
3 | 2 | 3087.5 | 937.5 |
4 | 3 | 1271 | 1162 |
5 | 4 | 1086 | 1239 |
6 | 1 | 3112.5 | 947 |
7 | 2 | 3087.5 | 937.5 |
8 | 3 | 1271 | 1162 |
9 | 4 | 1086 | 1239 |
10 | 1 | 3112.5 | 947 |
11 | 2 | 3087.5 | 937.5 |
12 | 3 | 1271 | 1162 |
13 | 4 | 1086 | 1239 |
14 | 1 | 3112.5 | 947 |
15 | 2 | 3087.5 | 937.5 |
16 | 3 | 1271 | 1162 |
17 | 4 | 1086 | 1239 |
18 | 1 | 3112.5 | 947 |
19 | 2 | 3087.5 | 937.5 |
20 | 3 | 1271 | 1162 |
21 | 4 | 1086 | 1239 |
自从您标记了 Excel 2010 以来,获得如图所示的结果有点困难:
=IFERROR(
IF(COLUMN(A1)-1 / ((COLUMN(A1)-1)/2<=MAX($A$2:$A$21)) / (ROW(A1)<=(ROWS($A$2:$A$21)/MAX($A$2:$A$21))),
INDEX($B$2:$C$21,
1+(ROW(A1)-1)*MAX($A$2:$A$21)+(COLUMN(A1)-2)/2,
1+ISODD(COLUMN(A1))),
ROW(A1)),
"")
使用 Office 365,这一切都会变得更加容易:
=LET(w,WRAPROWS(TOCOL(B2:C21),8),HSTACK(SEQUENCE(ROWS(w)),w))
或动态:
=LET(range,A2:C21,
pattern,TAKE(range,,1),
values,DROP(range,,1),
n,MAX(pattern),
wrap,WRAPROWS(TOCOL(values),n*COLUMNS(values)),
HSTACK(SEQUENCE(ROWS(wrap)),wrap))