提问人:MSP 提问时间:11/16/2023 最后编辑:MSP 更新时间:11/17/2023 访问量:107
在 Excel 中将行并排放置的代码
Code to place rows next to each other in Excel
问:
我正在寻找一个简短的代码(或公式?),我可以用它来重新排列我的数据,特别是将行放在一起(见图)。
谢谢。
我发现的最接近的是一个结合了 MOD 和 OFFSET (https://www.youtube.com/watch?v=Tt4nUYVp2v0&ab_channel=MikeWong) 使用的公式,但这并不完全符合我的要求。
数据:
一个 | 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 |
答:
3赞
P.b
11/16/2023
#1
由于您标记了 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))
在 Beta 版中,您还可以使用 PIVOTBY:=PIVOTBY(1+INT((ROW(B2:C21)-ROW(B2))/MAX(A2:A21)),A2:A21,B2:C21,SUM,,0,,0)
评论
1赞
Mayukh Bhattacharya
11/16/2023
出色的解决方案PIVOTBY()
0赞
P.b
11/16/2023
就我个人而言,我最喜欢包装行,但我也想尝试一下 PIVOTBY。
0赞
MSP
11/17/2023
@P.b 谢谢你,对不起,我弄错了,它是 Office 365 而不是 Excel 2010
0赞
P.b
11/17/2023
请确保下次发布问题时,不要虚假标记;正如你所看到的Excel 2010(答案的第一部分)和Office 365(以下单行)之间的区别。如果我的答案或 Horseyrides 的答案对您有所帮助,请勾选答案左侧的绿色 V 号来标记该答案。
1赞
horseyride
11/16/2023
#2
PowerQuery 加载项由 Microsoft 在 Excel 2013 中引入,并与 Excel 2010 向后兼容。安装后,将数据引入 powerquery,注意它没有标头。在以后的excel版本中,直接使用数据..从表/范围...
将此代码粘贴到主页中...高级编辑器...
let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content], // preserve your first row from what is autogenerated in place of this row
#"Added Index" = Table.AddIndexColumn(Source, "Index", 0, 1, Int64.Type),
RowIndex = Table.TransformColumns(#"Added Index", {{"Index", each Number.IntegerDivide(_, 4), Int64.Type}}),
Part1 = Table.SelectColumns(RowIndex,{"Column1", "Column2", "Index"}),
Part2= Table.TransformColumns(Table.RenameColumns(Table.SelectColumns(RowIndex,{"Column1", "Column3", "Index"}),{{"Column3", "Column2"}}),{{"Column1",each _ + .5, type number}}),
#"Sorted" = Table.Sort(Part1&Part2,{{"Column1", Order.Ascending}}),
#"Pivoted Column" = Table.Pivot(Table.TransformColumnTypes(#"Sorted", {{"Column1", type text}}, "en-US"), List.Distinct(Table.TransformColumnTypes(#"Sorted", {{"Column1", type text}}, "en-US")[Column1]), "Column1", "Column2", List.Sum)
in #"Pivoted Column"
加载带有 file ...关闭并加载....进入 excel 并通过右键单击或通过 VBA 刷新 powerquery 进行刷新
评论
0赞
MSP
11/17/2023
感谢您的回答,但我弄错了,它是 Excel 2021 (Microsoft 365) 而不是 Excel 2010。道歉。我尝试了 @P.b 的 WRAPROWS 解决方案,它奏效了。
0赞
horseyride
11/17/2023
根据您的喜好,但此答案仍然适用于 excel 2021
评论