在搜索从字母数字字符串中提取数字的解决方案时,我在MrExcel论坛中偶然发现了以下公式。我很难理解减号符号在公式中LOOKUP
和RIGHT
函数前面的作用。公式为
=-LOOKUP(1,-RIGHT(TRIM(LEFT(D1,FIND("g/L",D1)-1)),{1,2,3,4,5,6}))
有人可以向我解释一下这个公式是做什么的,为什么还有减号?
答案 0 :(得分:2)
简短回答是减号会乘以-1
首先查看RIGHT
函数返回的数组中的项目,故意在数组中生成#VALUE!
错误(因为字符串不能相乘),
第二个反转候选人从LOOKUP
公式 - 数组中的数字作为字符串 - 回答的事实现在是否定的,但是一旦评估了整个公式,就需要为正。
该论坛上的OP要求:
寻找帮助,找出从可变长度字母数字字符串中提取VOC含量值的最佳公式。 VOC含量是" g / L"之前的数字。
数据样本是:
SEALANT-RETAINING COMPOUND SINGLE COMPONENT ANAEROBIC, SCR40372A, *Loctite 242, 10 ML BOTTLE,146 g/L VOC
SEALANT-THREAD LOCK *HIGH STR *MIL-S-22473 *GRADE AA *50 ML BOTTLE * * *SCR802269A\ * Loctite 089 Weld Sealant125.3 g/L VOC
他们想要的答案是146
或125.3
。
在帖子中,回答者(pgc01)发布了这个公式:
=-LOOKUP(1,-RIGHT(TRIM(LEFT(D1,FIND("g/L",D1)-1)),{1,2,3,4,5,6}))
(其中D1将包含该字符串)
原始线程希望从占位符为g/L
的未知长度的字符串中提取未知长度的数值。把它放在一边让我们简单地考虑以下字符串:
foobar123
foobar1234
foobar12345
挑战在哪里获得数字部分而不知道它有多长(数字赢得超过6位数)。您不能正常使用RIGHT
,因为您不知道要在第二个参数中放入多少个字符。我们没有使用VBA,所以我们需要一种迭代文本并找出什么是数字和非数字字符串的方法,这样我们就可以拉出数字部分。
所以现在你看的公式只是:
=-LOOKUP(1,-RIGHT("foobar123",{1,2,3,4,5,6}))
打破公式:
RIGHT("foobar123",{1,2,3,4,5,6})
- 在整个公式的上下文中,这将返回一系列结果3
,23
,123
,r123
,{{1 },ar123
。您无法在Excel中直接看到此内容,但如果您使用“插入函数”向导检查bar123
公式,则可以。LOOKUP
函数的前面添加减号会使数组的每个项目乘以-1,现在为我们提供了RIGHT
,-3
的数组, -23
,-123
,#VALUE!
,#VALUE!
。错误值的目的是因为我们现在可以推断字符串的数字部分是3位数,因为任何进一步的权利都会给出错误,即你不能将字母字符乘以-1并获得有意义的结果。#VALUE!
函数在此数组中查找1,即LOOKUP
。我们在数组中的所有数值结果都是负数,因此所有结果都将小于1. =LOOKUP(1, etc)
函数将返回数组中小于或等于查找值的最大值(见下文)我们的情况将是具有最多数字的结果,因此是正确的捕获'因为我们正在从右侧搜索字符串的数字部分。它暗示行为只是跳过LOOKUP
错误。因此,在我们的示例中,这将返回#VALUE!
。数组表单
LOOKUP的数组形式在数组的第一行或列中查找指定的值,并从数组的最后一行或列中的相同位置返回一个值。当您要匹配的值位于数组的第一行或第一列时,请使用此形式的LOOKUP。如果要指定列或行的位置,请使用其他形式的LOOKUP。
提示通常,最好使用HLOOKUP或VLOOKUP函数而不是LOOKUP的数组形式。提供这种形式的LOOKUP是为了与其他电子表格程序兼容。
如果LOOKUP找不到lookup_value,它会使用数组中小于或等于lookup_value的最大值。
如果lookup_value小于第一行或第一列中的最小值(取决于数组维度),LOOKUP将返回#N / A错误值。
-123
函数前面的减号运算符将计算结果乘以-1,得到LOOKUP
。 123
提供=-LOOKUP(1,-RIGHT("foobar123",{1,2,3,4,5,6}))
123
提供=-LOOKUP(1,-RIGHT("foobar12345",{1,2,3,4,5,6}))
12345
给出=-LOOKUP(1,-RIGHT("foobar123456789",{1,2,3,4,5,6}))
(因为456789
函数的第二个参数中的数组最多只能达到6。
RIGHT
位, =-LOOKUP(1,-RIGHT("foobar123baz",{1,2,3,4,5,6}))
给出#N/A
。
因此,在MrExcel的原始帖子中,使用查找字符串中的baz
项目并将其左侧作为确保未知数量(最多6个)右侧的方法最近的字符将是数字。
有些人可能希望在此时获得VBA和正则表达式工具,但是对于那些想要或需要使用公式做任何事情的人来说,这提供了一种模糊匹配的方法来识别文本数据中的重要信息。