Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel组和按产品名称匹配_Excel_Vba_Excel Formula_Worksheet Function - Fatal编程技术网

Excel组和按产品名称匹配

Excel组和按产品名称匹配,excel,vba,excel-formula,worksheet-function,Excel,Vba,Excel Formula,Worksheet Function,我有一个产品数据的excel电子表格,需要按产品名称重新组织和分组。产品名称的示例如下所示: Bee 22x36跑步机,本色 是否有一个公式可以查找和分组所有其他同名产品 例如,我需要公式也包括 Bee 22x48桌上跑步者,白色 在分组结果中。这是同一种产品,只是颜色和尺寸不同。我想我需要使用excel通配符,但这就是我所拥有的 产品的其他示例: Carillon吊坠大象牙 Carillon吊坠中象牙色 Carillon吊坠小象牙 羊绒皮枕霜 浅灰色羊绒皮枕 焦点大床 焦点床头柜 焦点双人床

我有一个产品数据的excel电子表格,需要按产品名称重新组织和分组。产品名称的示例如下所示:

Bee 22x36跑步机,本色

是否有一个公式可以查找和分组所有其他同名产品

例如,我需要公式也包括

Bee 22x48桌上跑步者,白色

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

产品的其他示例:

Carillon吊坠大象牙 Carillon吊坠中象牙色 Carillon吊坠小象牙 羊绒皮枕霜 浅灰色羊绒皮枕 焦点大床 焦点床头柜 焦点双人床 焦点餐具柜 戈登扎餐桌长方形黑灰 戈登扎餐桌长方形胡桃木 戈登扎餐桌圆形黑灰 高盛大雕像
我假设给定字符串的结构类似于:

换句话说,在StringBee 22x36 Table Runner中,本色:

=蜜蜂 =22x36 =工作台转轮 =本色 我还假设,当您说要按产品名称分组时,您要按,即介于和之间的文本进行分组

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

使用Excel函数和辅助列

虽然MATCH对*和?之类的通配符提供了有限的支持,但我还没有使用它。如果单元格A2中有给定字符串,请尝试以下操作:

在单元格B2中,粘贴:=INDEXSEARCH{0,1,2,3,4,5,6,7,8,9},SUBSTITUTEA2,,,MATCHTRUE,ISNUMBERSEARCH{0,1,2,3,4,5,6,7,8,9},SUBSTITUTEA2,,,0 在单元格C2中,粘贴:=搜索,MIDA2,19999,B2+1 在单元格D2中,粘贴:=搜索,A2 在单元格E2中,粘贴:=MIDA2、C2、D2-C2 这将为您提供单元格E2中提取的数据

使用VBA和正则表达式

与上述方法不同,您可以尝试使用VBA,它允许您使用正则表达式进行更复杂/灵活的字符串匹配

打开VB编辑器Alt+F11 插入>模块 将下面的代码粘贴到新插入的模块中。 代码:

然后您应该能够直接从工作表中调用ExtractProduct,即假设单元格A2包含一些输入,在单元格B2中输入=ExtractProductA2
不幸的是,与Google Sheets之类的东西相比,Excel中的内置工作表函数目前似乎不支持正则表达式。因此,仅仅用一个简单的公式是无法做到这一点的——或者至少这是我的理解。

强烈建议您将产品/颜色/尺寸拆分为不同的列,然后使用透视表。同意Ben,根据您的需要,您可以通过几次文本到列的迭代来实现这一点data@BigBen由于产品名称的长度不同,数据不会按产品/颜色/大小清晰地拆分为不同的列。这里是另一个产品名称,用于比较布里斯托尔花园14x20 Placemat套装4件,有什么建议吗?@MichelleM。从小处做起。文本到列,然后使用它来分离它,然后可能是符号或X等。考虑使用12个最左边的字符作为排序或填充辅助列的键。有什么想法吗?@MichelleM。检查VBA代码中的所有工作表模块、此工作簿模块和自定义模块,查看是否只有一个名为ExtractProduct的变量/函数。错误可能是检测到不明确的名称而不是不明确的产品名称,其中名称指的是函数ExtractProduct的名称,而与函数恰好提取产品名称这一事实无关。如果发现多个产品,请根据是否要保留其他产品,删除/重命名/限定其他产品。没有看到您的Excel文件/代码,我只能说这些。啊,好的,我删除了冲突的VBA模块。现在,当我运行ExtractProduct时,结果显示所有产品均为N/A,尽管其中一些产品存在匹配项。@Michelem。您能否举例说明返回N/A但应包含匹配项的产品?如果你可以在你的问题中编辑尽可能多的内容,那么我会检查代码中的PRODUCT_模式是否可以调整。感谢您的帮助:
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