Excel 从描述中提取计数的方法
我的任务是不断地从另一个来源获取信息,并接收不带大小名称的信息。大小或计数在说明中,希望能够使用以下逻辑编写excel公式: 如果单元格中包含胶囊、片剂、液体等,则将此单元格与胶囊、片剂、液体等+其前面的数字相等 几个示例项目:Excel 从描述中提取计数的方法,excel,vba,excel-formula,Excel,Vba,Excel Formula,我的任务是不断地从另一个来源获取信息,并接收不带大小名称的信息。大小或计数在说明中,希望能够使用以下逻辑编写excel公式: 如果单元格中包含胶囊、片剂、液体等,则将此单元格与胶囊、片剂、液体等+其前面的数字相等 几个示例项目: Nature's Bounty Magnesium 500 mg, 200 Tablets Aerobic Life Mag 07 Oxygen Digestive System Cleanser Capsules, 180 Count Natural
Nature's Bounty Magnesium 500 mg, 200 Tablets
Aerobic Life Mag 07 Oxygen Digestive System Cleanser Capsules, 180 Count
Natural Vitality Natural Calm Anti Stress Drink 30 count Raspberry Lemon
如果描述中提到,希望下一列有平板电脑或计数
我尝试过使用if-and-then语句,但不知道如何组合它们来创建“or”和“and”
希望上面示例中的列如下所示:
200 Tablets
180 Count
30 Count
如果值在A列中,则公式如下:
=+IF(ISERROR(VALUE(RIGHT(LEFT(A3,SEARCH(IF(ISERROR(SEARCH("Tablets",A3)),IF(ISERROR(SEARCH("Capsules",A3)),IF(ISERROR(SEARCH("Count",A3)),"","Count"),"Capsules"),"Tablets"),$A3)-1),4))),0,VALUE(RIGHT(LEFT(A3,SEARCH(IF(ISERROR(SEARCH("Tablets",A3)),IF(ISERROR(SEARCH("Capsules",A3)),IF(ISERROR(SEARCH("Count",A3)),"","Count"),"Capsules"),"Tablets"),$A3)-1),4)))&" "&IF(ISERROR(SEARCH("Tablets",A3)),IF(ISERROR(SEARCH("Capsules",A3)),IF(ISERROR(SEARCH("Count",A3)),"","Count"),"Capsules"),"Tablets")
由于公式很长,请参见下面两个不同的单元格,第一个搜索是我们正在查找的项目(片剂、胶囊或计数),并返回它,第二个搜索前一个数字:
+IF(ISERROR(SEARCH("Tablets",A4)),IF(ISERROR(SEARCH("Capsules",A4)),IF(ISERROR(SEARCH("Count",A4)),"","Count"),"Capsules"),"Tablets")
+IF(ISERROR(VALUE(RIGHT(LEFT(A4,SEARCH(B4,$A4)-1),4))),0,VALUE(RIGHT(LEFT(A4,SEARCH(B4,$A4)-1),4)))
该公式对得到的数字有限制,限制为9999,超过了公式得出的结果。对于数字1到9,公式可能返回错误值。如果需要,可以通过更改第二个公式来解决此问题。我会这样做:
- 从IF语句开始
IF(-test-,-true-,-false-)
- 填充-测试-部分。假设我第一次想找到“平板电脑”。我可以使用
但是,这里的问题是如果找不到“Tablet”,它将抛出一个错误,因此我将像这样进行错误验证…FIND(“Tablet”,A2)…
如果在单元格A2中找不到“Tablet”,它将返回FALSE…IFERROR(FIND(“Tablet”,A2),FALSE)…
- 但我还想查找“Count”,这样我就可以使用一个或,以及我已经建立的
这样就可以或一起使用结果-如果找到“Tablet”或“Count”,这个函数将返回一个数字(因为它是一个数字,所以读作TRUE!)…或(IFERROR(Find(“Tablet”,A2),FALSE),IFERROR(Find(“Count”,A2,FALSE))
- 现在我把这个或()方程放到IF中,如果是真的,那么我当然可以把它做成“平板电脑”或“计数”,或者在那里放一个新的方程来具体说明它发现了什么。而my-false-我可以生成
“
IF(或(IFERROR(Find(“table”,A2),FALSE),IFERROR(Find(“Count”,A2),FALSE)),“Count/table”,“FALSE”)
下面是一个使用RegExp轻松测试的UDF:
Function Amounts(txt)
Dim re As Object, allMatches, m, rv, sep
Set re = CreateObject("VBScript.RegExp")
re.Pattern = "(\d+\s?(tablets|tablet|count|liquid))"
re.ignorecase = True
re.MultiLine = True
re.Global = True
Set allMatches = re.Execute(txt)
For Each m In allMatches
rv = rv & sep & m
sep = ","
Next m
Amounts = IIf(rv <> "", rv, "(none)")
End Function
您可以仅使用公式来执行此操作,但公式效率非常低,因此我建议使用VBA。到目前为止,您尝试了什么?我也在使用R进行这项工作,似乎无法使and/or语句在其中也起作用。对那里的引导
+
的用途感到好奇。公式生成一个变量/String
…我用+代替=,因为它更快(在西班牙语键盘中),而且excel启动公式没有什么区别。这是我在西班牙语键盘上打字的习惯,在这里你需要使用Shift键来输入=。有趣;我需要按Shift键来做一个+
;-)
=Amounts(A2)