希望从 Excel 文档中的推文列表中提取单个用户 (@) 提及

希望从 Excel 文档中的推文列表中提取单个用户 (@) 提及

我有一份来自我正在监控的用户的约 1000 条推文列表。我希望能够跟踪有多少独特的用户提及(即出现@anyUserName)在字符串内。

每条推文都存储在一个单元格中。我希望能够从单元格中提取 @variable-length 字符串。

已经有几天了,如果能提供任何帮助我将非常感激。

在此处输入图片描述

谢谢

答案1

现在,查看您的数据,如果您想从每条推文中提取多个@,那么每个实例都必须有一列:

=IFERROR(MID($A2,FIND("|",SUBSTITUTE($A2,"@","|",B$1)),IFERROR(FIND(" ",$A2,FIND("|",SUBSTITUTE($A2,"@","|",B$1))),LEN($A2)+1)-FIND("|",SUBSTITUTE($A2,"@","|",B$1))),"")

将其放入 B2,然后抄下来。

这看起来令人难以接受,但 temporarity 会将第 n 个 @ 替换为不同的字符(不太可能在推文中使用的字符,即竖线“|”),然后找到该位置及其后的下一个空格。如果后面没有空格,它会将名称作为推文中的最后一个内容。

在此示例中,您的推文位于 A 列第 2 行(假设标题是第 1 行)。您可以将此公式放在 B2 中,并根据需要复制到右侧的任意列。它期望您的标题是要提取的名称。像这样:

在此处输入图片描述

答案2

这是一个 VBA 解决方案。只需将以下代码粘贴到模块中(按Alt+F11并转到 Insert>> Module)。选择您的推文列表并执行(通过F5从 VBA 编辑器窗口按)。

Sub getUniqueUsers()
Dim r As Range, users As Object, Tweets() As Variant, ns As Worksheet
Dim i As Long, j As Long, k As Long
Dim rgx As Object, Matches As Object, M As Object, key As Variant
Set r = Selection
'Load tweets into array for fast processing
Tweets = r.Value
'create scripting objects
Set users = CreateObject("Scripting.dictionary")
Set rgx = CreateObject("vbscript.regexp")
rgx.MultiLine = True
rgx.Pattern = "(^| )(@[^ \t]+)"
'Check each tweet for user mentions with regular expression matching. Add all matches to dictionary.
For j = LBound(Tweets, 2) To UBound(Tweets, 2)
    For i = LBound(Tweets, 1) To UBound(Tweets, 1)
        Set Matches = rgx.Execute(Tweets(i, j))
        For Each M In Matches
            If Not users.exists(M.submatches.Item(1)) Then
                users.Add M.submatches.Item(1), M.submatches.Item(1)
            End If
        Next M
    Next i
Next j
'Output list to new sheet
Set ns = Worksheets.Add
ns.Name = "Unique User Mentions"
k = 1
For Each key In users
    ns.Range("A" & k).Value = key
    k = k + 1
Next key
End Sub

此代码使用正则表达式和字典脚本对象。它将在每条推文中找到用户提及并将其存储在字典中。字典用于确保唯一性。最后,唯一用户提及将打印在新工作表的 A 列中。

相关内容