如何根据自定义规则对excel项目进行分组?

如何根据自定义规则对excel项目进行分组?,excel,excel-formula,vba,Excel,Excel Formula,Vba,我有一组数据(网站管理员工具搜索查询)在excel中,标题如下: 查询|印象|点击|日期 谷歌电子表格样本 我想添加一个名为Category的额外列,并根据搜索列a上字符串的自定义规则对所有查询进行分类。 例: 如果A2包含字符串“laptop”,则在其旁边的类别上写上“laptop” 到目前为止,我已经尝试了一个公式来做到这一点,但我不确定这是最简单的方法。此外,如果有很多分类规则,那么公式就会变得很长且难以管理 =IF(ISNUMBER(SEARCH("laptop",A2)),"lapto

我有一组数据(网站管理员工具搜索查询)在excel中,标题如下:

查询|印象|点击|日期

谷歌电子表格样本

我想添加一个名为
Category
的额外列,并根据搜索列a上字符串的自定义规则对所有查询进行分类。 例:

如果A2包含字符串“laptop”,则在其旁边的类别上写上“laptop”

到目前为止,我已经尝试了一个公式来做到这一点,但我不确定这是最简单的方法。此外,如果有很多分类规则,那么公式就会变得很长且难以管理

=IF(ISNUMBER(SEARCH("laptop",A2)),"laptop",
   IF(ISNUMBER(SEARCH("notebook",A2)),"laptop",
   IF(ISNUMBER(SEARCH("iphone",A2)),"phone",
   IF(ISNUMBER(SEARCH("galaxy s",A2)),"phone",
"other")))
你能推荐一种更好的方法吗?我可以将规则以这种格式放在一张纸上:

Query|u包含| Category|u为


其中,
Query\u contains
将是需要在初始工作表的A列中匹配的字符串,
类别
将是需要在D列中填充的值。

这个小宏假设您的数据在工作表1中,并且您的规则在A列和中的工作表规则中B:

Sub catagorize()
    Dim s1 As Worksheet, s2 As Worksheet
    Dim N1 As Long, N2 As Long
    Set s1 = Sheets("Sheet1")
    Set s2 = Sheets("rules")
    N1 = s1.Cells(Rows.Count, "A").End(xlUp).Row
    N2 = s2.Cells(Rows.Count, "A").End(xlUp).Row
    For i = 2 To N1
        v = s1.Cells(i, 1).Value
        For j = 1 To N2
            If InStr(1, v, s2.Cells(j, 1).Value) > 0 Then
                s1.Cells(i, "D").Value = s2.Cells(j, "B").Value
            End If
        Next j
    Next i
End Sub

好的,我把你的床单改了一点

假设所有数据都在单元格A1:C9中,那么在单元格F1:G5中有下表

Search_For:    Category:
laptop         Laptop
iphone         Phone
galaxy         Phone
notebook       Laptop
现在,在单元格D2中,输入以下公式:

=IFERROR(INDEX(G$2:G$5,MATCH(TRUE,ISNUMBER(SEARCH(F$2:F$5,A2)),0)),"other")
然后将其作为数组公式输入意思是,输入后,按CTRL+SHIFT+enter

然后,您可以将公式从单元格D2向下拖动,它将给出所需的结果(当然,您可以根据需要增加F&G列中的列表)


希望这能奏效

对于第三个选项,您可以使用自定义公式

我在一个单独的工作表上创建了一个只针对类别的表,然后在一个标准模块中插入了以下代码

Option Explicit

Function CategoryLookup(s_Query As String, Keyword_tbl As Range)
    Dim rngKeywords As Range
    Dim s_foundCategory As String
    Dim b_CategoryExists As Boolean
    b_CategoryExists = False

    For Each rngKeywords In Keyword_tbl
        If InStr(s_Query, rngKeywords.Value) <> 0 Then
            s_foundCategory = rngKeywords.Offset(0, 1).Value
            b_CategoryExists = True
            Exit For
        End If
    Next rngKeywords

    If b_CategoryExists = True Then
        CategoryLookup = s_foundCategory
    Else
        CategoryLookup = "Other"
    End If
End Function

Vlookup
应该做你想做的事情。。。第一列将是您在A列中期望的值,第二列将是类别,然后您只需将vlookup映射到该2列表。。。如果没有意义,请告诉我…@JohnBustos查看示例电子表格中的数据,简单的vlookup将不起作用。抱歉,谢谢@guitarthrower,我现在下载了表格。。。现在发布解决方案…谢谢你们这完全取决于你想要VBA还是公式。。。您的解决方案可能更有效,但需要VBA。。。这取决于你正在寻找的解决方案的风格。谢谢John,你的解决方案在Google电子表格上有效,但在我的Excel 2011 for mac中没有。我想这是因为数组公式。。你确定Mac上的关键字组合是相同的吗<代码>CTRL+SHIFT+ENTER?如果我按下按钮,它会将整个公式(包括
=
)用花括号括起来,我在mac上不知道,但你应该可以通过谷歌立即得到这个结果……糟糕的是,我在公式中输入了一个错误,这就是它不起作用的原因。在mac版本中,键盘快捷键的工作原理相同,而花括号语法也可以。。
=CategoryLookup(A2,categories!$A$2:$A$5)