我有一个excel电子表格的产品数据,我需要重新组织和分组的产品名称。产品名称的示例如下所示:
Bee 22"x36" Table Runner, Ecru
是否有一个公式,可以找到和分组所有其他产品的同名?
例如,我需要公式也包括
Bee 22"x48" Table Runner, White
在分组结果中。这是同一个产品,只是颜色和尺寸不同而已。我想我需要使用excel通配符,但这就是我所拥有的。
产品的其他示例:
Carillon吊坠大象牙
Carillon吊坠中象牙
Carillon挂件小象牙
羊绒毛绒枕头霜
羊绒毛绒浅灰色
聚焦特大床
焦点床头柜
聚焦大床
聚焦餐具柜
戈登萨餐桌长方形黑灰
戈登萨餐桌长方形核桃
戈登萨餐厅圆桌黑灰
高盛大型公司
高盛小雕像
发布于 2019-12-25 00:12:07
我假设给定字符串的结构类似于:<manufacturer> <dimensions> <product>, <colour>。
换句话说,在字符串Bee 22"x36" Table Runner, Ecru中
<manufacturer> = Bee<dimensions> = 22"x36"<product> = Table Runner<colour> = Ecru我还假设,当您说要“按产品名称分组”时,您希望按<product>分组(即<dimensions>和<colour>之间的文本)。
最后,我假设最好先提取<product>。此后,您可以根据需要对行进行排序/重新组织,因为您没有详细描述您想要达到的最终结果。
使用函数和辅助列
虽然MATCH对诸如*和?这样的通配符提供了有限的支持,但我没有使用它。如果单元格A2中有给定的字符串,请尝试以下操作:
细胞内的=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))
=SEARCH(" ",MID(A2,1,9999),B2)+1
C2,粘贴:=SEARCH(" ",MID(A2,1,9999),B2)+1
D2,粘贴:=SEARCH(",",A2)
E2,=MID(A2,C2,D2-C2)这将给出单元格E2中提取的E2。

使用VBA和正则表达式的
您可以尝试使用VBA (它允许您使用正则表达式进行更复杂/灵活的字符串匹配),而不是上述方法。
打开VB编辑器(下面是新插入的模块中的F11)
Insert + Module
代码:
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然后,您应该能够从工作表中直接调用B2) (例如,假设单元格A2包含一些输入,在单元格
=ExtractProduct(A2) )。不幸的是,Excel中内置的工作表函数目前似乎不支持正则表达式(与Google相比)。所以,这不可能仅仅通过一个简单的公式来实现--或者至少这是我的理解。
https://stackoverflow.com/questions/59460435
复制相似问题