首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >复合方程

复合方程
EN

Web Applications用户
提问于 2021-07-01 19:45:24
回答 1查看 49关注 0票数 -1

我有一张用来盘点的纸。我们使用信函成本代码,员工在扫描项目时输入该代码。详情如下。B-1,L-2,A3,C-4,K-5,R-6,O-7,U-8,G-9,E-0

我试图使这些字母,但输入(即,UUC)显示其相应的号码(884)在一个单独的列。这是我写的,但要不断地得到错误的答案。

代码语言:javascript
运行
复制
=if(I586="B",1,if(I586="L",2,if(I586="A",3,if(I586="C",4,if(I586="K",5,if(I586="R",6,if(I586="O",7,if(I586="U",8,if(I586="G",9,if(I586="E",0,))))))))))
EN

回答 1

Web Applications用户

发布于 2021-07-12 00:25:48

在海报的电子表格中,第一列的标题后面跟着以下四种输入类型之一:

·货币格式的数字(小数点2位)

文本字符串"NA“或"N/A”以任何一种形式出现

*文章中描述的包含有限字母代码的字符串

·空

根据我的理解,海报需要代码转换成美元和美分的货币(例如,UUC = 884 =8.84美元)。

基于此,我在这根柱子线上提供了以下解决方案:

首先,选择完整的L栏并删除其中的所有内容。

为了处理速度,总是最好保持您的纸张修整只满足您的需要。因此,我建议您下一步删除数据下面所有未占用且可能仍未占用的行。

然后,在L1中放置以下公式:

=ArrayFormula( {"HEADER OF CHOICE"; IF( (ISNUMBER(I2:I)) + (LEFT(I2:I)="N") + (I2:I=""), I2:I, VALUE( SUBSTITUTE( TRANSPOSE( QUERY( TRANSPOSE( ARRAY_CONSTRAIN( IFERROR( RIGHT( SEARCH( SPLIT( REGEXREPLACE( I2:I & REPT("X", 10), "(.)", "$1~"), "~"), "BLACKROUGE"))), ROWS(I2:I), 10)),, 10)), " ", "")) / 100)} )

这个公式将创建标题(您可以在公式中随意更改)和所有列结果,说明您输入的"N/A“(也以”NA“的形式输入)、空格、货币和代码。

How它工作在

标题文本可以根据需要在公式中进行更改。

IF( (ISNUMBER(I2:I)) + (LEFT(I2:I)="N") + (I2:I=""), I2:I, ...

如果列-i输入是货币或以"N“开头的任何内容,请将其返回到L列(注意:"N”不在代码字母中,因此它只对"NA“或"N/A”文本字符串起作用)。

否则,从内到外工作..。

REGEXREPLACE( I2:I & REPT("X", 10), "(.)", "$1~")

这将将"X“的10次迭代附加到I2:I中的任何内容(就所有意图和目的而言,这些迭代都只是此时的代码),然后将整个新字符串替换为每个原始字符,后面跟着一个倾斜符,例如,UUC将变成U~U~C~X~X~X~X~X~X~X~X~X~X~。附加的"X“字符不是代码字母,因此这些字符将允许以后将每个字符串截断为偶数10个字符,而不管其原始长度如何;这种一致性在公式的稍后阶段是必要的。

SPLIT( REGEXREPLACE( I2:I & REPT("X", 10), "(.)", "$1~"), "~")

上面的字符串将是SPLIT,用于在倾斜点分隔列。

SEARCH( SPLIT( REGEXREPLACE( I2:I & REPT("X", 10), "(.)", "$1~"), "~"), "BLACKROUGE")

然后,每个字符都将按照值从1到10的顺序在代码字母的组合中进行SEARCH编辑,即BLACKROUGEB值为1,E值为10。

RIGHT( SEARCH( SPLIT( REGEXREPLACE( I2:I & REPT("X", 10), "(.)", "$1~"), "~"), "BLACKROUGE"))

如果不包括两位数的10,这一步可能已经被取消了.但是,由于我们有10 (在代码中值为0),我们只需从每个RIGHT编辑位置获取SEARCH单个字符。这将返回代码字母的值0-9 (或在“BLACKROUGE”中找不到的“X”字符的错误)。

IFERROR( RIGHT( SEARCH( SPLIT( REGEXREPLACE( I2:I & REPT("X", 10), "(.)", "$1~"), "~"), "BLACKROUGE")))

IFERROR将控制发生"X“的上述错误,将这些错误保留为空。

ARRAY_CONSTRAIN( IFERROR( RIGHT( SEARCH( SPLIT( REGEXREPLACE( I2:I & REPT("X", 10), "(.)", "$1~"), "~"), "BLACKROUGE"))), ROWS(I2:I), 10)

在这里,我们看到了额外的“X”字符的原因,因为ARRAY_CONSTRAIN现在可以提取一个统一的I2:I行和10列数组。这10列数据中的每一列现在要么为0-9,要么为null。

TRANSPOSE( QUERY( TRANSPOSE( ARRAY_CONSTRAIN( IFERROR( RIGHT( SEARCH( SPLIT( REGEXREPLACE( I2:I & REPT("X", 10), "(.)", "$1~"), "~"), "BLACKROUGE"))), ROWS(I2:I), 10)),, 10))

这是利用QUERY函数的一个特性的标准“技巧”。也就是说,人们不仅需要选择01作为QUERY的头数。这种函数组合,翻转由ARRAY-CONTRAIN创建的数组,要求QUERY不返回表数据,只返回10个标头(这将是我们在1-9和nulls上面创建的所有列数据),然后将其翻转回原来的方向。最终的结果是,所有的0-9和空字符将形成一行字符串,每个原始字符之间有空格。

SUBSTITUTE( TRANSPOSE( QUERY( TRANSPOSE( ARRAY_CONSTRAIN( IFERROR( RIGHT( SEARCH( SPLIT( REGEXREPLACE( I2:I & REPT("X", 10), "(.)", "$1~"), "~"), "BLACKROUGE"))), ROWS(I2:I), 10)),, 10)), " ", "")

SUBSTITUTE移除这些空格,每一行形成一个连续字符串。

VALUE( SUBSTITUTE( TRANSPOSE( QUERY( TRANSPOSE( ARRAY_CONSTRAIN( IFERROR( RIGHT( SEARCH( SPLIT( REGEXREPLACE( I2:I & REPT("X", 10), "(.)", "$1~"), "~"), "BLACKROUGE"))), ROWS(I2:I), 10)),, 10)), " ", ""))

VALUE将将这些数字字符串转换为实际的数值。

VALUE( SUBSTITUTE( TRANSPOSE( QUERY( TRANSPOSE( ARRAY_CONSTRAIN( IFERROR( RIGHT( SEARCH( SPLIT( REGEXREPLACE( I2:I & REPT("X", 10), "(.)", "$1~"), "~"), "BLACKROUGE"))), ROWS(I2:I), 10)),, 10)), " ", "")) / 100

/ 100的添加将将这些数值转换为美元和美分。

票数 1
EN
页面原文内容由Web Applications提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://webapps.stackexchange.com/questions/155527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档