首页 > 解决方案 > Excel 按产品名称分组和匹配

问题描述

我有一个产品数据的 Excel 电子表格,我需要按产品名称对其进行重组和分组。产品名称的示例如下所示:

Bee 22"x36" Table Runner, Ecru

是否有一个公式可以找到并分组所有其他同名产品?

例如,我需要公式还包括

Bee 22"x48" Table Runner, White

在分组结果中。它是同一种产品,只是颜色和尺寸不同。我想我需要使用 excel 通配符,但这就是我所拥有的。

其他产品示例:

Carillon 吊坠 大号象牙色
Carillon 吊坠 中号象牙色
Carillon 吊坠 小号象牙色
羊绒毛皮枕 奶油色
羊绒毛皮枕 浅灰色
Focus 特大床
Focus 床头柜
Focus 大床
Focus 餐具柜
Godenza 餐桌 矩形黑灰
Godenza 餐桌 矩形胡桃木
Godenza 餐桌 圆形黑灰
Goldman 雕像大
高盛雕像小

标签: excelvbaexcel-formulaworksheet-function

解决方案


我假设给定字符串的结构类似于:<manufacturer> <dimensions> <product>, <colour>.

换句话说,在字符串中Bee 22"x36" Table Runner, Ecru

  • <manufacturer>=Bee
  • <dimensions>=22"x36"
  • <product>=Table Runner
  • <colour>=Ecru

我还假设当您说要“按产品名称分组”时,您要分组<product>(即 和 之间的文本<dimensions><colour>

最后,我假设先提取可能会更好<product>。此后,您可以根据需要对行进行排序/重新组织,因为您没有详细描述您想要实现的最终结果。


使用 Excel 函数和帮助列

尽管对and之MATCH类的通配符提供有限的支持,但我没有使用它。如果您在 cell 中有给定的字符串,请尝试以下操作:*?A2

  • 在单元格中B2,粘贴:=INDEX(SEARCH({"0 ","1 ","2 ","3 ","4 ","5 ","6 ","7 ","8 ","9 "},SUBSTITUTE(A2,"""","")),MATCH(TRUE,ISNUMBER(SEARCH({"0 ","1 ","2 ","3 ","4 ","5 ","6 ","7 ","8 ","9 "},SUBSTITUTE(A2,"""",""))),0))
  • 在单元格中C2,粘贴:=SEARCH(" ",MID(A2,1,9999),B2)+1
  • 在单元格中D2,粘贴:=SEARCH(",",A2)
  • 在单元格中E2,粘贴:=MID(A2,C2,D2-C2)

这应该给你提取<product>的单元格E2

非 VBA


使用 VBA 和正则表达式

除了上面的方法,您可以尝试使用 VBA(它允许您使用正则表达式进行更复杂/灵活的字符串匹配)。

  1. 打开 VB 编辑器 ( Alt+ F11)
  2. Insert>Module
  3. 将下面的代码粘贴到新插入的模块中。

代码:

Option Explicit

Public Function ExtractProduct(ByVal someText As String) As Variant

    Const PRODUCT_PATTERN As String = "\d+["" ]?x ?\d+""? (.+?),"

    Dim regExp As Object
    Set regExp = CreateObject("VBScript.RegExp")
    regExp.Pattern = PRODUCT_PATTERN

    Dim matchesFound As Object
    Set matchesFound = regExp.Execute(someText)

    If matchesFound.Count > 0 Then
        If matchesFound(0).SubMatches.Count > 0 Then
            ExtractProduct = matchesFound(0).SubMatches(0)
        Else
            ExtractProduct = CVErr(xlErrNA)
        End If
    Else
        ExtractProduct = CVErr(xlErrNA)
    End If
End Function
  1. 然后你应该可以ExtractProduct直接从工作表调用(即假设单元格A2包含一些输入,=ExtractProduct(A2)在单元格中输入B2

不幸的是,Excel 中的内置工作表函数目前似乎不支持正则表达式(与 Google 表格之类的东西相比)。所以这不能只用一个简单的公式来实现——或者至少这是我的理解。


推荐阅读