我怎样才能从文本列中拉出哈希标签?

我有一个Excel表,其中有一个“描述”列。 此列中的值通常包含从0到3个标签的任何位置,全部以#符号开头。 有没有办法将所有这些标签拉出到列?

也许只是有3个空白列被称为哈希标签1,2,3,并将其拉入每列。

将它们从描述栏中移出并不重要。

描述示例:

 “#0034 #lost客户端丢失文件” - 拔出0034并丢失  
 “工人质量差#SusanB#质量” - 拔出SusanB和质量  
 “#0840客户投诉” - 拔出0840  
 “很多ipsum” - 什么也不拉出来 

可以说列A是描述列,而在A2中,你有第一个带有标签的单元格
在B2中input:

=MID(A2;(FIND("#";A2))+1;(FIND(" ";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2)))-(FIND("#";A2))-1) 

在C2中input:

 =MID(A2;(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2)))+1;(FIND(" ";MID(A2;(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2)))+1;LEN(A2)-(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2)))))+(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2))))-(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2)))-1) 

在D2中input:

 =MID(A2;(FIND("#";MID(A2;(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2)))+1;LEN(A2)-(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2)))))+(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2))))+1;(FIND(" ";MID(A2;(FIND("#";MID(A2;(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2)))+1;LEN(A2)-(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2)))))+(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2))))+1;LEN(A2)-(FIND("#";MID(A2;(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2)))+1;LEN(A2)-(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2)))))+(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2))))))+(FIND("#";MID(A2;(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2)))+1;LEN(A2)-(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2)))))+(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2)))))-(FIND("#";MID(A2;(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2)))+1;LEN(A2)-(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2)))))+(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2))))-1) 

我喜欢可以让你在Excel中使用REGEX的扩展名…

没有这个:

1)用FIND()查找string中分隔符(#?)的位置

2)然后使用LEFT(),MID()和RIGHT()将string分解为3列

3)可以使用MID()而不是LEFT()和RIGHT()来删除#

这将是这样的第一个标签与#

= LEFT(A1,FIND( “#”,A1)-1)

希望这会有所帮助!

非常难看,但确实有效(分别在B2,C2和D2中,并复制下来):

MID(A2,2,FIND(“,A2)-2),MID(A2,FIND(”#“,A2)+ 1,FIND(IF) “”,A2)-1)),“”)

= IFERROR(MID(A2,FIND( “#”,A2,FIND( “#” &B2,A2)+1)+ 1,FIND( “#”,A2,FIND( “#” &B2,A2)+1) + LEN(B2)-FIND(“”,A2,FIND(“#”&B2,A2))),“”)

= IFERROR(MID(A2,FIND( “#”,A2,FIND( “#” &C2,A2)+1)+ 1,FIND( “#”,A2,FIND( “#” &C2,A2)+1) + LEN(C2)-2-FIND(“”,A2,FIND(“#”&C2,A2))),“”)

这总是可以使用正则expression式来完成。

在VBE中,在模块中编写如下函数:

 Function getHashTags(rng As Range) As Variant Dim regEx As RegExp Set regEx = New RegExp regEx.Pattern = "#\w*\b" regEx.IgnoreCase = True regEx.Global = True Set myMatches = regEx.Execute(rng.Value) Dim arr(1 To 1, 1 To 3) As Variant For i = 1 To 3 If i > myMatches.Count Then arr(1, i) = "" Else arr(1, i) = Replace(myMatches(i - 1), "#", "") End If Next i getHashTags = arr End Function 

现在让我们假设列A是描述列,在单元格A2中,第一个单元格带有散列标签。

在B2单元格中input:

 =getHashTags(B$2) 

现在select单元格B2,C2,D2,按F2然后按Ctrl + Shift + Enter 。 这将填充从函数getHashTags到选定单元格的variables返回值。

我希望这有帮助。

PS:而且,对于这个工作你也需要参考Microsoft VBScript Regular Expressions 5.5库。