0

我有一个 Excel 表,其中有一个“描述”列。此列中的值通常包含 0-3 个标记,所有标记都以 # 符号开头。有没有办法将所有这些标签拉到列中?

也许只有 3 个空白列,称为主题标签 1、2、3,并将它们拉入每一列。

在将它们拉出时将它们从描述列中删除甚至都不重要。

描述示例:

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

3 回答 3

2

假设 A 列是描述列,在 A2 中您有第一个带有主题标签的单元格
在 B2 中输入:

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

在 C2 中输入:

=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 中输入:

=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)
于 2013-07-19T06:33:18.070 回答
1

我喜欢一个可以让你在 Excel 中使用 REGEX 的扩展......

没有这个:

1) 使用 FIND() 在字符串中查找分隔符 (# ?) 的位置

2) 然后使用 LEFT()、MID() 和 RIGHT() 将您的字符串分解为 3 列

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

--

对于带有 # 的第一个标签,它会是这样的:

=LEFT(A1,FIND("#",A1)-1)

--

希望这会有所帮助!

于 2013-07-18T23:44:22.583 回答
0

这始终可以使用正则表达式来完成。

在 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 中输入:

=getHashTags(B$2)

现在选择单元格 B2、C2、D2,按F2然后ctrl+ shift+ enter。这将填充从函数返回getHashTags到所选单元格的变体。

我希望这有帮助。

PS:而且,是的,要使其正常工作,您还需要参考Microsoft VBScript 正则表达式 5.5库。

于 2013-07-23T12:15:29.040 回答