Martyn有一个工作表,该工作表的B列中包含很多关键字。

任何单个单元格都可以具有任意数量的唯一关键字,每个关键字之间用空格分隔。他需要一种生成唯一关键字列表以及每个关键字包含多少行的方法。

没有简单的方法可以使用公式生成关键字列表。但是,您可以使用宏快速处理此类列表。以下是一个可以很快完成工作的示例。

Sub KeywordList()

Dim dTally As Dictionary     Dim rSource As Range     Dim c As Range     Dim d As Variant     Dim aKeys() As String     Dim J As Integer     Dim sTemp As String

Set dTally = New Dictionary     Set rSource = Selection     For Each c In rSource         ' Put all keywords in an array         aKeys = Split(c, " ")

For J = LBound(aKeys) To UBound(aKeys)

sTemp = LCase(Trim(aKeys(J)))

If Len(sTemp) > 0 Then                 If dTally.Exists(sTemp) Then                     ' Increment existing keyword                     dTally(sTemp) = dTally(sTemp) + 1                 Else                     ' Add new keyword and count                     dTally.Add sTemp, 1                 End If             End If         Next J         Erase aKeys     Next c

' Now have all the keywords in a dictionary object     ' Add a new worksheet to store the list     Worksheets.Add     Cells(1, 1) = "Keyword"

Cells(1, 2) = "Count"



J = 1     For Each d In dTally.Keys         J = J + 1         Cells(J, 1) = d         Cells(J, 2) = dTally(d)

Next d End Sub

如果该宏在您的系统上不起作用,则可能是因为Excel无法识别Dictionary对象。如果您怀疑是这种情况,请确保在VBA中启用Microsoft脚本运行时库。 (您可以通过在Visual Basic编辑器中单击“工具” |“引用”,找到该库,单击它旁边的复选框,最后单击“确定”来执行此操作。)

为了使用该宏,只需选择包含您要计算的关键字的单元格(在Martyn的情况下,这就是B列中的单元格),然后运行该宏。它创建一个新的工作表,该工作表在A列中列出了关键字,在B列中列出了每个关键字出现的次数。

如所写,宏不关注关键字的大小写;例如,这意味着“橙色”与“橙色”相同。如果您希望关键字列表区分大小写,则只需要删除LCase语句即可。在宏中仅使用一次。

您还应该注意,在运行宏之前,关键字在您进行的选择中的出现顺序在新工作表中列出。进入工作表后,您可以根据需要轻松地对关键字进行排序。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(13499)适用于Microsoft Excel 2007、2010、2013和2016。