Excel switch 语句公式将 "M" 或 "K" 转换为 1000000000 或 1000000
Excel switch statement formula to convert "M" or "K" to 1000000000 or 1000000
我有一个数据集,其中包含足球运动员的估计身价。当我下载该集时,所有的净值如下所示:
85.5M
30.3K
20M
我想创建一个自动遍历数据以适当转换 M 和 K 的 switch 语句,示例:
85,500,000,000
30,300,000
20,000,000,000
问题似乎出在公式的 (LEFT(H3, -3)
部分,因为那是我得到红色括号的地方。我已经尝试将 LEFT
切换为 RIGHT
,但似乎没有什么不同。
=SWITCH(LEFT(H3, -3), "M", 1000000000, "K", 1000000)
结果看起来像 #VALUE
我已经调查过并得出结论它是一个语法错误...
所有 3 种解决方案都产生相同的结果,如照片所示。该宏允许您覆盖单元格中的值,因此您不需要辅助列
如果您对辅助列开放....
=IF(RIGHT(A2,1)="M",SUBSTITUTE(A2,"M","")*10^6,SUBSTITUTE(A2,"K","")*10^3)
如果你对宏开放....
Option Explicit
Sub Convert()
Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1") '<-- UPDATE
Dim LR As Long, Val As Range
LR = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
'Change .Offset(, 4) to .Offset(,) to replace the existing value
For Each Val In Range("A2:A" & LR)
Select Case Right(Val, 1)
Case "M"
Val.Offset(, 4) = Left(Val, Len(Val) - 1) * (10 ^ 6)
Case "K"
Val.Offset(, 4) = Left(Val, Len(Val) - 1) * (10 ^ 3)
End Select
Next Val
End Sub
如果您对 UDF 持开放态度....
Function CSTConvert(Val As Range) As Long
Select Case Right(Val, 1)
Case "M"
CSTConvert = Left(Val, Len(Val) - 1) * (10 ^ 6)
Case "K"
CSTConvert = Left(Val, Len(Val) - 1) * (10 ^ 3)
End Select
End Function
也许这就是你想要的:
=IFERROR(LEFT(A1,LEN(A1)-1)*SWITCH(RIGHT(A1,1),"M",10^6,"K",10^3),A1)
最简单的方法是使用 right()。右returns 最后一个字符(或多个字符)或一个字符串。使用它,有几个解决方案。
你可以
Iferror(Value(A1),Value(Left(A1,Len(A1)-1))*If(right(A1)="M",10^6,10^3))
我们正在做的是首先说如果 A1 的值是一个错误,评估函数。这是因为如果 Value A1 只是一个数字,它将忽略我们计划对它做的所有字符串废话。
假设不是数字,最后一定有K或M。我们想删除它以获得数字。因此,我们将最左边的字符取到 K 或 M 并只查看它们。我们通过询问 A1 的长度是多少,然后从左边少拉 1 个字符来做到这一点。这将始终保留最后一个字符,在我们的例子中将始终是 K 或 M。重要的是我们在执行此操作之前过滤掉数字,否则它会删除最后一个数字并且我们的结果将偏离 10 倍.
现在我们评估这个字符串以获得一个数字。我们现在需要将它乘以我们得出的 K 或 M。幸运的是,这就像放置一个 * 和一个 if 语句一样简单,因为我们只有 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))
在技术上更短,尽管意义不大,但仍然可以工作。
我有一个数据集,其中包含足球运动员的估计身价。当我下载该集时,所有的净值如下所示:
85.5M
30.3K
20M
我想创建一个自动遍历数据以适当转换 M 和 K 的 switch 语句,示例:
85,500,000,000
30,300,000
20,000,000,000
问题似乎出在公式的 (LEFT(H3, -3)
部分,因为那是我得到红色括号的地方。我已经尝试将 LEFT
切换为 RIGHT
,但似乎没有什么不同。
=SWITCH(LEFT(H3, -3), "M", 1000000000, "K", 1000000)
结果看起来像 #VALUE
我已经调查过并得出结论它是一个语法错误...
所有 3 种解决方案都产生相同的结果,如照片所示。该宏允许您覆盖单元格中的值,因此您不需要辅助列
如果您对辅助列开放....
=IF(RIGHT(A2,1)="M",SUBSTITUTE(A2,"M","")*10^6,SUBSTITUTE(A2,"K","")*10^3)
如果你对宏开放....
Option Explicit
Sub Convert()
Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1") '<-- UPDATE
Dim LR As Long, Val As Range
LR = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
'Change .Offset(, 4) to .Offset(,) to replace the existing value
For Each Val In Range("A2:A" & LR)
Select Case Right(Val, 1)
Case "M"
Val.Offset(, 4) = Left(Val, Len(Val) - 1) * (10 ^ 6)
Case "K"
Val.Offset(, 4) = Left(Val, Len(Val) - 1) * (10 ^ 3)
End Select
Next Val
End Sub
如果您对 UDF 持开放态度....
Function CSTConvert(Val As Range) As Long
Select Case Right(Val, 1)
Case "M"
CSTConvert = Left(Val, Len(Val) - 1) * (10 ^ 6)
Case "K"
CSTConvert = Left(Val, Len(Val) - 1) * (10 ^ 3)
End Select
End Function
也许这就是你想要的:
=IFERROR(LEFT(A1,LEN(A1)-1)*SWITCH(RIGHT(A1,1),"M",10^6,"K",10^3),A1)
最简单的方法是使用 right()。右returns 最后一个字符(或多个字符)或一个字符串。使用它,有几个解决方案。
你可以
Iferror(Value(A1),Value(Left(A1,Len(A1)-1))*If(right(A1)="M",10^6,10^3))
我们正在做的是首先说如果 A1 的值是一个错误,评估函数。这是因为如果 Value A1 只是一个数字,它将忽略我们计划对它做的所有字符串废话。
假设不是数字,最后一定有K或M。我们想删除它以获得数字。因此,我们将最左边的字符取到 K 或 M 并只查看它们。我们通过询问 A1 的长度是多少,然后从左边少拉 1 个字符来做到这一点。这将始终保留最后一个字符,在我们的例子中将始终是 K 或 M。重要的是我们在执行此操作之前过滤掉数字,否则它会删除最后一个数字并且我们的结果将偏离 10 倍.
现在我们评估这个字符串以获得一个数字。我们现在需要将它乘以我们得出的 K 或 M。幸运的是,这就像放置一个 * 和一个 if 语句一样简单,因为我们只有 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))
在技术上更短,尽管意义不大,但仍然可以工作。