excel - 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 雕像大
高盛雕像小
解决方案
我假设给定字符串的结构类似于:<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(它允许您使用正则表达式进行更复杂/灵活的字符串匹配)。
- 打开 VB 编辑器 (
Alt
+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
- 然后你应该可以
ExtractProduct
直接从工作表调用(即假设单元格A2
包含一些输入,=ExtractProduct(A2)
在单元格中输入B2
)
不幸的是,Excel 中的内置工作表函数目前似乎不支持正则表达式(与 Google 表格之类的东西相比)。所以这不能只用一个简单的公式来实现——或者至少这是我的理解。
推荐阅读
- r - R:根据字母成绩计算学生 GPA 的 R 脚本
- node.js - 如何将 MongoDB-atlas 集合中的特定文档与存储在同一集群中不同集合中的文档相关联?
- python - 从具有多个数组的函数创建矩阵而不使用 for 循环
- matlab - 逐行搜索矩阵中幅度最小的值
- android - 屏幕旋转上的检查按钮
- mysql - 如何通过在任何 SELECT 中将两个或更多列作为分组来创建父级和子级,但有效?
- javascript - 部署的 Rails 应用程序不会路由不同的控制器
- javascript - Angular - ngModel 在我点击 textarea 之前不会更新
- python-3.x - IndexError:列表索引超出范围。尝试为 BeatifulSoup 项目创建字典列表
- python - 从电子表格填充字典