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

时间:2014-02-24 16:45:54

标签: excel excel-vba excel-formula vba

我有一组数据(网站管理员工具搜索查询),其中包含以下标题:

Query | Impressions | Clicks | Date

示例Google电子表格here

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

if A2 contains the string 'laptop' then write 'laptop' on the category next to it

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

=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_contains | Category_is

其中Query_contains是需要在初始工作表中与A列匹配的字符串,而Category将是需要填入D列的值。

3 个答案:

答案 0 :(得分:9)

好的,我把你的床单改了一下......

假设您的所有数据都在单元格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列中的列表)。

希望这可以解决问题!!

答案 1 :(得分:3)

此小宏假设您的数据位于 Sheet1 中,而您的规则位于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

答案 2 :(得分:1)

对于第三种选择,您可以使用自定义公式。

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

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

然后在D2(您的类别列)中插入以下公式(然后可以向下拖动)

=CategoryLookup(A2,categories!$A$2:$A$5)