gpt4 book ai didi

excel - 聚合、整理行并将行转置为列

转载 作者:行者123 更新时间:2023-12-04 21:08:43 26 4
gpt4 key购买 nike

我有下表

 Id     Letter
1001 A
1001 H
1001 H
1001 H

1001 B
1001 H
1001 H
1001 H

1001 H
1001 H
1001 H

1001 A
1001 H
1001 H
1001 H
1001 B

1001 A
1001 H
1001 H
1001 H
1001 B

1001 B
1001 H
1001 H
1001 H
1001 B

1001 H

1001 A
1001 G
1001 H
1001 H
1001 A
1001 B

1002 B
1002 H
1002 H
1002 B

1002 G
1002 H

1002 B
1002 G
1002 G
1002 H

1002 B
1002 G
1002 H
1002 H

1002 G
1002 H
1002 H

1002 H
1002 H
1002 H
1002 M
1002 N

1002 G
1002 H
1002 H
1002 M
1002 M

1002 A
1002 H
1002 H
1002 H
1002 A
1002 B

1002 B
1002 H
1002 H
1002 H

1002 B
1002 H
1002 H
1002 H
1002 A
1002 A

1002 A
1002 H
1002 H
1002 H
1002 H
1002 B

1002 H

1003 G
1003 H
1003 H
1003 N
1003 M

我正在尝试转置它,使第一列中的每个不同 id 和第二列中的所有字母在原始表中的每个空白行都有一个空格:

1001 AHHH BHHH HHH AHHHB AHHHB BHHHB H AGHHAB
1002 BHHB GH BGGH BGHH GHH HHHMN GHHMM AHHHAB BHHH BHHHAA AHHHHB H
1003 GHHNM

我有大约 100 个不同的 ID。我尝试使用 TRANSPOSETRIM 处理公式。我还尝试了一个宏,VLOOKUP 似乎是最简单的方法,但无法找到方法。

最佳答案

如果事先不知道范围,则无法使用 native 工作表函数连接一系列单元格(又名 字母)。由于您将字符串集合分成组具有随机数量的元素,因此 VBA 循环方法似乎是解决该问题的最佳(如果不是唯一)方法。循环可以确定工作表函数根本无法执行。

点击 Alt+F11,当 Visual Basic 编辑器(又名 VBE)打开时,立即使用下拉菜单插入 ► 模块(Alt+I,M)。将以下一项或两项粘贴到标题类似于 Book1 - Module1 (Code) 的新 Pane 中。

连接由空格分隔的字符串组:

Sub concatenate_and_transpose_to_delim_string()
Dim rw As Long, lr As Long, pid As Long, str As String
Dim bPutInColumns As Boolean

With ActiveSheet
lr = .Cells(Rows.Count, 1).End(xlUp).row
.Cells(1, 4).Resize(1, 2) = Array("Id", "Letters")
pid = .Cells(2, 1).Value
For rw = 2 To lr
If IsEmpty(.Cells(rw, 1)) Then
str = str & Chr(32)
If pid <> .Cells(rw + 1, 1).Value Then
.Cells(Rows.Count, 4).End(xlUp).Offset(1, 0) = pid
.Cells(Rows.Count, 4).End(xlUp).Offset(0, 1) = str
End If
ElseIf pid <> .Cells(rw, 1).Value Then
pid = .Cells(rw, 1).Value
str = .Cells(rw, 2).Value
Else
str = str & .Cells(rw, 2).Value
End If
Next rw
.Cells(Rows.Count, 4).End(xlUp).Offset(1, 0) = pid
.Cells(Rows.Count, 4).End(xlUp).Offset(0, 1) = str
End With
End Sub

将字符串组拆分为列:

Sub concatenate_and_transpose_into_columns()
Dim rw As Long, lr As Long, nr As Long, pid As Long, str As String

With ActiveSheet
lr = .Cells(Rows.Count, 1).End(xlUp).row
.Cells(1, 4).Resize(1, 2) = Array("Id", "Letters")
For rw = 2 To lr
If IsEmpty(.Cells(rw, 1)) Then
.Cells(nr, Columns.Count).End(xlToLeft).Offset(0, 1) = str
str = vbNullString
ElseIf pid <> .Cells(rw, 1).Value Then
pid = .Cells(rw, 1).Value
nr = .Cells(Rows.Count, 4).End(xlUp).Offset(1, 0).row
.Cells(nr, 4) = pid
str = .Cells(rw, 2).Value
Else
str = str & .Cells(rw, 2).Value
End If
Next rw
.Cells(nr, Columns.Count).End(xlToLeft).Offset(0, 1) = str
End With
End Sub

点击 Alt+Q 返回您的工作表。使用 A1 中以 Id 开头的事件工作表上的示例数据,点击 Alt+F8 打开对话框并运行宏。

concatenate_and_transpose_to_delim_string 的结果:

Concatenate and Transpose to delim strang

concatenate_and_transpose_into_columns 的结果:

Concatenate and Transpose

结果将写入从 D2 开始的单元格中。如果事先没有什么重要的东西会被覆盖,那可能是最好的。

附录:

我最初误解了您的请求并将字符串组拆分为单独的列。我已经通过补充例程纠正了这一点,该例程更符合您对要求的描述,但保留了两种变体以供其他人引用。

关于excel - 聚合、整理行并将行转置为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29440349/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com