Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
要转换的Excel开关语句公式";M";或;K";到100000000或1000000_Excel_Switch Statement_Formula - Fatal编程技术网

要转换的Excel开关语句公式";M";或;K";到100000000或1000000

要转换的Excel开关语句公式";M";或;K";到100000000或1000000,excel,switch-statement,formula,Excel,Switch Statement,Formula,我有一个关于足球运动员估计价值的数据集。当我下载这套时,所有的资产净值如下所示: 85.5M 30.3K 20M 我想创建一个switch语句,该语句将自动遍历数据以适当地转换M和K,例如: 85,500,000,000 30,300,000 20,000,000,000 问题似乎出在(左(H3,-3),这是公式的一部分,因为这是我得到红色大括号的地方。我尝试将左切换到右,但似乎没有什么区别 =SWITCH(LEFT(H3, -3), "M", 1000000000, "K", 100000

我有一个关于足球运动员估计价值的数据集。当我下载这套时,所有的资产净值如下所示:

85.5M
30.3K
20M
我想创建一个switch语句,该语句将自动遍历数据以适当地转换M和K,例如:

85,500,000,000
30,300,000
20,000,000,000
问题似乎出在
(左(H3,-3)
,这是公式的一部分,因为这是我得到红色大括号的地方。我尝试将
切换到
,但似乎没有什么区别

=SWITCH(LEFT(H3, -3), "M", 1000000000, "K", 1000000)
结果看起来像
#VALUE
,我已经研究过了,并得出结论,这是一个语法错误

所有3种解决方案都会产生与照片中所示相同的结果。宏允许您覆盖单元格中的值,这样您就不需要辅助列


如果您打开的是帮助器列。。。。
如果你对宏开放。。。。
也许这就是你想要的:

 =IFERROR(LEFT(A1,LEN(A1)-1)*SWITCH(RIGHT(A1,1),"M",10^6,"K",10^3),A1)

简单的方法是使用right()。right返回最后一个(或多个)字符或字符串。使用它,有几种解决方案

你可以

Iferror(Value(A1),Value(Left(A1,Len(A1)-1))*If(right(A1)="M",10^6,10^3))
我们要做的是,首先说如果A1的值是一个错误,则计算函数。这是因为如果A1的值只是一个数字,它将忽略我们计划对其执行的所有无意义字符串

假设它不是一个数字,结尾必须有一个K或M。我们想去掉它来得到数字。因此,我们把最左边的字符移到K或M,只看这些字符。我们通过询问A1的长度,并从左边少拉1个字符来实现这一点。这将始终保留最后一个字符,这在我们的情况总是K或M。在进行此操作之前,我们过滤掉这些数字是很重要的,否则它将删除最终的数字,我们的结果将以10的因数为准

现在我们计算这个字符串以得到一个数字。我们现在需要将它乘以我们得到的K或M。幸运的是,这很简单,因为我们只有2个选项。要么是M,我们乘以10^6,要么是K,我们乘以10^3

但因为它是excel,所以也有很多废话可以说:

Iferror(Value(A1),(Left(A1,Len(A1)-1)+0)*If(right(A1)="M",10^6,10^3))

从技术上讲,它较短,尽管意义不大,但仍然有效。

您是否尝试过将列转换为数字?这可能是一种自定义数字格式-我在工作中使用它们。我怀疑它是否简单,但值得一拍不幸的是,它看起来像您的
左侧(范围,3)
无法工作,因为并非所有输出都具有相同的字符长度。
85.5
=
Len(4)
20
=
Len(2)
在函数中:
左(H3,-3)
,字符数参数不能为负数。因此,您的
值!
错误。您预期会出现什么错误?+1-到目前为止,我从未见过
开关的功能,因此希望了解错误part@urdearboy
开关
将在
正确(A1,1)时返回错误
不是列出的选项之一。因此,在这种情况下,返回原始值,而不是乘法器的数字部分。
*这个(公式版本,没有检查VBA)容易受到两个因素的影响:它区分大小写,没有训练“K”或“M”(我知道,OP没有指定这些可能性,只是说…)这就是说,区分大小写可能是一件好事,毕竟
M
=10^6
M
=10^-3Good call out@chrisneilsen。如果是这种情况,OP,在函数UPPER中嵌套范围的右部分,以便根据宏的大小写转换,只需将小写作为逗号分隔的值添加到大小写中(大小写“M”),“m”)谢谢!你的回答和@Michael Burton帮了大忙。
 =IFERROR(LEFT(A1,LEN(A1)-1)*SWITCH(RIGHT(A1,1),"M",10^6,"K",10^3),A1)
Iferror(Value(A1),Value(Left(A1,Len(A1)-1))*If(right(A1)="M",10^6,10^3))
Iferror(Value(A1),(Left(A1,Len(A1)-1)+0)*If(right(A1)="M",10^6,10^3))