问题是:我想将文本中的所有名称和角色分成单独的列:即(Janu Dowe(Lead AM);Ron Peno(备用 AT);Alex Nano(备用 AT))。
我希望将“Janu Dowe”分隔一列,角色:“Lead AM”等。一个单元格中有 3 个有时 4 个名称和角色,我希望将其全部分隔在单独的列中。我尝试了几种方法。谢谢
问题是:我想将文本中的所有名称和角色分成单独的列:即(Janu Dowe(Lead AM);Ron Peno(备用 AT);Alex Nano(备用 AT))。
我希望将“Janu Dowe”分隔一列,角色:“Lead AM”等。一个单元格中有 3 个有时 4 个名称和角色,我希望将其全部分隔在单独的列中。我尝试了几种方法。谢谢
如果您的数据确实是您表示它的方式
姓名(角色);姓名(角色);姓名(角色)
其中 Name 可以是一个或多个单词;角色总是用括号括起来,名称(角色)组用分号分隔,那么下面的宏应该可以完成这项工作。
该宏假定您的数据在 A 列中,从 A1 开始,并且相邻列中没有任何价值。如果不是这种情况,您将需要更改代码。
要输入此宏 (Sub),alt-F11 将打开 Visual Basic 编辑器。确保您的项目在 Project Explorer 窗口中突出显示。然后,从顶部菜单中,选择插入/模块并将下面的代码粘贴到打开的窗口中。
要使用此宏 (Sub),alt-F8 打开宏对话框。按名称选择宏,然后运行。
Option Explicit
Sub SplitData()
Dim r As Range, c As Range
Set r = Range("P36", Cells(Rows.Count, "P").End(xlUp))
For Each c In r
c.TextToColumns DataType:=xlDelimited, semicolon:=True, other:=True, _
otherchar:="("
Next c
Set r = r.CurrentRegion
r.Replace what:=")", replacement:="", lookat:=xlPart
r.EntireColumn.AutoFit
End Sub
这可以手动完成,但宏可能更简单。该宏首先执行 TextToColumns 方法,使用分号和“(”作为分隔符;然后它使用 Replace 方法删除剩余的“)”
如果第 1 列是
Alex isa Nano(备用 AT);罗恩·佩诺(替补 AT);Janu Dowe Smyth (Lead AM)
然后解析如下 =LEFT(A1,FIND("(",A1)-2) =MID(A1,FIND("(",A1)+1,(FIND(")",A1)-FIND(" (",A1))-1) =MID(A1,FIND(";",A1)+2,FIND("(",A1,FIND(";",A1))-FIND(";",A1 )-2) =MID(A1,FIND("(",A1,FIND(";",A1))+1,FIND(")",A1,FIND(";",A1))-FIND(" (",A1,FIND(";",A1))-1) =MID(A1,FIND(")",A1,FIND(";",A1))+3,FIND("(",A1, FIND(";",A1,FIND(";",A1)+1))-FIND(";",A1,FIND(";",A1)+1)-2) =MID(A1,FIND( "(",A1,FIND(";",A1,FIND(";",A1)+1))+1,LEN(A1)-FIND("(",A1,FIND(";",A1,查找(";",A1)+1))-1)
在数据显示它是如何在单元格 P36:P37 的工作表中输入之前
宏之后,在 P36:U37 中显示结果;分裂成细胞
如果这不是您想要的,您将需要更具描述性