- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在寻找从字母数字字符串中提取数字的解决方案时,我在MrExcel论坛中偶然发现了以下公式。我很难理解公式中LOOKUP
和RIGHT
函数前面的减号在做什么。公式为
=-LOOKUP(1,-RIGHT(TRIM(LEFT(D1,FIND("g/L",D1)-1)),{1,2,3,4,5,6}))
最佳答案
TL; DR
简短的答案是减号乘以-1
首先由RIGHT
函数返回的数组中的项,故意在数组中生成#VALUE!
错误(因为字符串不能相乘),并且
第二个相反的事实是,候选对象从LOOKUP
公式(数组中的数字作为字符串)的答案现在为负,但是一旦整个公式计算完毕,就必须为正。
关于MrExcel的原始问题
该论坛上的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
,ar123
,bar123
。您通常无法在Excel中直接直接看到它,但是如果您使用“插入函数”向导来检查LOOKUP
公式,则可以。
在RIGHT
函数的前面添加减号的作用是将数组的每个项目乘以-1,这现在为我们提供了-3
,-23
,-123
,#VALUE!
,< cc>,#VALUE!
。错误值是有目的的,因为我们现在可以推断出字符串的数字部分是3位数字,因为任何其他正确的权利都会产生错误,即您不能将字母字符乘以-1并得到有意义的结果。
接下来使用#VALUE!
函数在此数组中找到1,即LOOKUP
。数组中所有数值结果均为负数,因此所有结果均小于1。=LOOKUP(1, etc)
函数将返回数组中小于或等于查找值(见下文)的最大值。将是具有最多数字的结果,因此是正确的“捕获”,因为我们正在从右侧搜索字符串的数字部分。它暗示该行为只是跳过了LOOKUP
错误。因此,在我们的示例中,这将返回#VALUE!
。
From MSDN:
数组形式
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和正则表达式工具,但对于想要或需要使用公式进行所有操作的人来说,这提供了一种进行模糊匹配以识别文本数据中重要信息的方法。
关于excel - Excel中带有减号的查找功能的说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41904014/
我正在 gnuplot 中生成 .eps 数字,以包含在使用 LaTeX 排版的论文中,使用 set terminal postscript eps enhanced "Helvetica" 14 这
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
我目前正在做以下作业: CREATE TABLE T_1 (COURSE_NO CHAR(8) PRIMARY KEY, COURSE_NAME CHAR(50) ); CREATE TABLE T_
我最近在 Bash 脚本中发现了这样一个片段: $ echo ${A=3} 现在,我知道 ${A:=3}将设置变量 A如果A是“假的”,或${A:-3}如果 A 将返回 3是“虚假的”。不过,我从未见
是否有“-”减号的 UIBarButtonSystem 图标?与此相反: 谢谢。 最佳答案 不,所有可用的图标都是 here .您可以改用自定义 View 。 关于objective-c - UIBa
我有一个元素,需要它的宽度没有(!)垂直滚动条。 Firebug 告诉我 body 宽度是 1280px。 这些在 Firefox 中都可以正常工作: console.log($('.element'
我无法理解以下内容。在 Clojure 中定义 main 函数时(基于 Leinigen 生成的代码),有一个 -函数名前的符号main . 我访问了 clojure.com 上的原始文档,发现 de
我在图形的 Scala 实现中遇到过这个运算符(您可以找到示例 here ,其中两个列表插入运算符 -- 和两个 Maps。 abstract class GraphBase[T, U] { ca
我以前从未处理过正则表达式。对于仅包含数字 (0-9)、加号 (+) 和减号 (-) 以及井号 (#) 的字符串,我应该使用什么组合?顺序并不重要。 最佳答案 很简单: [0-9+#-]+ 演示:ht
我想使用加号/减号图标而不是向下箭头。我已经尝试过,但我不知道什么时候必须添加减号图标或加号图标。请指导我非常感谢 最佳答案 这件事让我发疯 在..\catalog\view\theme\YOURTH
我有以下 jQuery 菜单,您也可以在 JSfiddle here 中找到它: $(document).ready(function () { $(".main_menu_01, .main
我为一个简单的菜单开发了以下代码: $(document).ready(function () { $(".main_menu_01, .main_menu_02").on('click',
char sign = '+'; cout > sign; if ( sign != '+' || sign != '-' ) { cout << "you c
Linux:减号 -* 在行尾的 bash 脚本中意味着什么: tar -czvf $pfad/toolkitdb.log.`date -d "yesterday" +%Y-%m-%d`.tar.g
在 cron 语法中,行首的加号和减号是什么意思? + 0 9 * * * /usr/bin/curl -k http://www.example.com/cron/deactivate_users
有没有办法随机化加号或减号字符?我有一个程序,其中一个 Sprite 在屏幕上移动,当你点击它时,它会重新出现在不同的地方。我也希望它移动的方向也是随机的。目前我只能将它设置为从左到右+,或者从右到左
问题 我正在尝试使用名为 data-maxchars 的属性声明一个匿名类型. 因为减号是一个运算符,它将我想要的属性名称降级(?)为一个操作,我得到一个编译错误:Invalid anonymous
public void Foo(double d){ // when called below, d == 2^32-1 ... } public void Bar(){ ui
在 ERb 序列末尾使用“-”(减号)有什么意义? 例子: FooBar Sometext 无论我是否使用'-',浏览器都会呈现相同的输出。 谢谢,Aplha。 最佳答案 在 Rails 3
我的问题很简单,但我没有找到答案。 我想从 git diff 中的每一行中删除前导加号/减号。在你问我为什么要这样做之前,请允许我概述一下我的理由: 恰好 80 个字符的行会溢出一个字符,这看起来很尴
我是一名优秀的程序员,十分优秀!