答案1
要使用公式来执行此操作,对于比 Office 365 Excel 更旧的版本,您将需要一个辅助列。
在逗号分隔列表旁边(我的列表从 C2 开始)输入:
=LEN(C1)-LEN(SUBSTITUTE(C1,",",""))+1+D1
这将保持单词数量的累计总数。
然后,您使用 INDEX/MATCH 引用这两列,以便在长公式被拖下时引用正确的单元格。
长公式是:
=TRIM(MID(SUBSTITUTE(INDEX(C:C,MATCH(ROW(1:1),D:D)),",",REPT(" ",99)),(ROW(1:1)-INDEX(D:D,MATCH(ROW(1:1),D:D)))*99 +1,99))
然后两个 INDEX/MATCH 返回要处理的正确单元格。
SUBSTITUTE 添加了大量空白,为 Mid 提供了一个很大的目标。
Mid 将白色空间中的长字符串分割开。
TRIM 删除了多余的空白。
使用 Office 365,如果字符串不太长,您可以跳过辅助列并使用 TEXTJOIN()。
=TRIM(MID(SUBSTITUTE(TEXTJOIN(",",TRUE,$C$2:$C$5),",",REPT(" ",99)),(ROW(1:1)-1)*99+1,99))
这将用 TEXTJOIN 替换 INDEX/MATCH,否则其作用与上述相同。
答案2
我想建议一种简单的 VBA(宏)方法,它非常易于使用并且比任何繁琐的公式都要好。
Private Sub CommandButton1_Click()
Dim xArr() As String
Dim xAddress As String
Dim Rg As Range
Dim Rg1 As Range
On Error Resume Next
xAddress = Application.ActiveWindow.RangeSelection.Address
Set Rg = Application.InputBox("please select the data range:", "Column to Row", xAddress, , , , , 8)
If Rg Is Nothing Then Exit Sub
Set Rg = Application.Intersect(Rg, Rg.Parent.UsedRange)
If Rg Is Nothing Then Exit Sub
Set Rg1 = Application.InputBox("please select output cell:", "Column to Row", , , , , , 8)
If Rg1 Is Nothing Then Exit Sub
xArr = Split(Join(Application.Transpose(Rg.Value), ","), ",")
Rg1.Resize(UBound(xArr) + 1) = Application.Transpose(xArr)
Rg1.Parent.Activate
Rg1.Resize(UBound(xArr) + 1).Select
Call TrimXcessSpaces
End Sub
怎么运行的:
- 点击开发者标签, 打设计然后插入。
- 选择命令按钮从活动窗口类别并在工作表上的任意位置绘制。
- 右键点击命令按钮并选择财产。
- 寻找标题从列表中将其更改为列至行。
- 关闭属性窗口并返回工作表。
- 双击命令按钮,您将进入 VB 编辑器窗口。
- 复制粘贴本守则私有子命令按钮1_Click() 和子目录结束并点击保存图标。
- 从VB 编辑器窗口点击文件命令并点击关闭并返回 Microsoft Excel。
- 点击设计模式转动它离开。
现在单击 Sheet 命令按钮:
第一的输入框会出现然后选择列表以逗号分隔 (B4:B6)然后单击“Ok”完成。
第二输入框将出现选择任意单细胞就像我一样E4 并单击“确定”按钮完成。
您可以在“行”中找到如屏幕截图所示的列表。
注意: 根据需要调整单元格引用。
編輯:
我已经编辑了这篇文章彼得·H建议我删除白色空间从输出中E 列。
- 形成单张纸压机ALT+F11,打开 VB 编辑器。
- 从左侧的项目资源管理器窗口中找到工作表名称。
- 选择 &右键点击工作表名称。
- 寻找插入从菜单中,点击模块命令。
复制并粘贴此代码&节省返回工作表。
Option Explicit Sub TrimXcessSpaces() Dim cl As Variant For Each cl In Selection If Len(cl) > Len(WorksheetFunction.Trim(cl)) Then cl.Value = WorksheetFunction.Trim(cl) End If Next cl End Sub
笔记, 在之前添加此代码子目录结束在前面的代码中,(检查上面的代码)。
Call TrimXcessSpaces
- 从工作表中单击命令按钮,输出将如下所示。
答案3
建议的答案实际上对我不起作用。我的数据很乱,有重复的数据,这导致它崩溃。所以我想出了一个不同的解决方案:
=TRIM(TRANSPOSE(TEXTSPLIT(TEXTJOIN(",",TRUE,C2:C5),",")))
工作原理:
- TEXTJOIN 将所有数据放在一个以逗号分隔的长列表中。
- 然后,TEXTSPLIT 将每个项目分离出来,形成一个项目数组。
- TRANSPOSE 使这些项目出现在一列中。
- TRIM 删除所有多余的空格。
如果您想要进一步过滤数据,您可以用其他过滤命令包围列表,例如UNIQUE
。
如果您不想用逗号分隔,您可以随时将TEXTJOIN
和中的分隔符更改TEXTSPLIT
为您想要的任何内容。