Google 用于提取货币并将其从 € 或 £ 转换为 USD 的工作表公式
Google Sheets Formula to Extract and Convert Currency from € or £ to USD
我正在尝试执行以下操作:
- 检查
N/A
或 No
的单元格;如果它有其中任何一个,那么它应该输出 N/A
或 No
- 检查
£
或 €
或 Yes
的单元格;如果它有其中之一,那么它将继续到第 3 步。如果它有 $
,那么它应该重复与输出相同的输入。
- 使用以下方法从单元格中提取货币:
REGEXEXTRACT(A1, "$\d+")
或 REGEXEXTRACT(A1, "\£\d+")
(我认为这是最好的方法)
- 使用
GoogleFinance("CURRENCY:EURUSD")
或 GoogleFinance("CURRENCY:GBPUSD")
将其转换为 $ USD
- 输出原始单元格,但将第 3 步中提取的货币替换为第 4 步的输出。
示例:(原始 --> 输出)
N/A
--> N/A
No
--> No
Alt
--> Alt
Yes
--> Yes
Yes £10
--> Yes .19
Yes £10 per week
--> Yes .19 per week
Yes €5 (Next)
--> Yes .49 (Next)
Yes 22 EA
--> Yes 22 EA
Yes £5 - £10
--> Yes .49 - .19
我无法使 IF
语句正常工作,我可以用普通代码执行此操作,但无法为电子表格公式计算出来。
我已经多次尝试修改@Rubén 的答案以包含 N/A
因为它不是表格错误,我也尝试了同样的方法使任何美元输入以美元形式出现(没有变化)但是我真的无法在 Excel/Google 表格中掌握 IF/OR/AND 的窍门。
=ArrayFormula(
SUBSTITUTE(
A1,
OR(IF(A1="No","No",REGEXEXTRACT(A1, "[\£|\€]\d+")),IF(A1="N/A","N/A",REGEXEXTRACT(A1, "[\£|\€]\d+"))),
IF(
A1="No",
"No",
TEXT(
REGEXEXTRACT(A1, "[\£|\€](\d+)")*
IF(
"€"=REGEXEXTRACT(A1, "([\£|\€])\d+"),
GoogleFinance("CURRENCY:EURUSD"),
GoogleFinance("CURRENCY:GBPUSD")
),
"$###,###"
)
)
)
)
上面,我尝试在第一个 IF 语句之前添加一个 OR() 以尝试将 N/A
作为选项包含在内,在下面我尝试了它,您可以在下面以各种不同的方式看到(用这个替换第 4 行)
IF(
OR(
A1="No",
"No",
REGEXEXTRACT(A1, "[\£|\€]\d+");
A1="No",
"No",
REGEXEXTRACT(A1, "[\£|\€]\d+")
)
)
但这也不管用。我认为使用 ;
是一种分隔 OR 表达式的方法,但显然不是。
回复:Rubén 的最新代码 16/10/2016
我已将其修改为 =ArrayFormula(
IF(NOT(ISBLANK(A2)),
IF(IFERROR(SEARCH("$",A2),0),A2,IF(A2="N/A","N/A",IF(A2="No","No",IF(A2="Alt","Alt",IF(A2="Yes","Yes",
SUBSTITUTE(
A2,
REGEXEXTRACT(A2, "[\£|\€]\d+"),
TEXT(
REGEXEXTRACT(A2, "[\£|\€](\d+)")
*
VLOOKUP(
REGEXEXTRACT(A2, "([\£|\€])\d+"),
{
{"£";"€"},
{GoogleFinance("CURRENCY:GBPUSD");GoogleFinance("CURRENCY:EURUSD")}
},
2,0),
"$###,###"
)
)
)))))
,"")
)
此修复:
- 空白单元格不再抛出#N/A
Yes
只有单元格不再抛出 #N/A
- 添加了另一个文本值
Alt
- 将货币格式更改为 0 个小数位,而不是我最初要求的 2 个小数位。
正如您在下图中看到的那样,两个红色单元格不太正确,因为我从未想过这种情况,两个值中的第二个值保留在输入形式中,而不是转换为美元。
直接回答
尝试
=ArrayFormula(
IF(IFERROR(SEARCH("$",A1:A6),0),A1:A6,IF(A1:A6="N/A","N/A",IF(A1:A6="No","No",
SUBSTITUTE(
A1:A6,
REGEXEXTRACT(A1:A6, "[\£|\€]\d+"),
TEXT(
REGEXEXTRACT(A1:A6, "[\£|\€](\d+)")
*
VLOOKUP(
REGEXEXTRACT(A1:A6, "([\£|\€])\d+"),
{
{"£";"€"},
{GoogleFinance("CURRENCY:GBPUSD");GoogleFinance("CURRENCY:EURUSD")}
},
2,0),
"$###,###.00"
)
)
)))
)
结果
+---+------------------+---------------------+
| | A | B |
+---+------------------+---------------------+
| 1 | N/A | N/A |
| 2 | No | No |
| 3 | Yes £10 | Yes .19 |
| 4 | Yes £10 per week | Yes .19 per week |
| 5 | Yes €5 (Next) | Yes .49 (Next) |
+---+------------------+---------------------+
说明
或函数
以上公式使用嵌套的 IF 函数来代替或使用 OR 函数。
REGEXTRACT
没有为每个货币符号使用 REGEXEXTRACT 函数,而是使用了正则表达式 OR 运算符。范例
REGEXEXTRACT(A1:A6, "[\£|\€]\d+")
使用了三个正则表达式,
- 获取货币符号和金额
[\£|\€]\d+
- 获取金额
[\£|\€](\d+)
- 获取货币符号
[(\£|\€])\d+
货币换算
不使用嵌套 IF 来处理货币换算率,而是使用 VLOOKUP 和数组。假设将来可以添加更多货币,这可以更容易地维护公式。
我正在尝试执行以下操作:
- 检查
N/A
或No
的单元格;如果它有其中任何一个,那么它应该输出N/A
或No
- 检查
£
或€
或Yes
的单元格;如果它有其中之一,那么它将继续到第 3 步。如果它有$
,那么它应该重复与输出相同的输入。 - 使用以下方法从单元格中提取货币:
REGEXEXTRACT(A1, "$\d+")
或REGEXEXTRACT(A1, "\£\d+")
(我认为这是最好的方法) - 使用
GoogleFinance("CURRENCY:EURUSD")
或GoogleFinance("CURRENCY:GBPUSD")
将其转换为 $ USD
- 输出原始单元格,但将第 3 步中提取的货币替换为第 4 步的输出。
示例:(原始 --> 输出)
N/A
-->N/A
No
-->No
Alt
-->Alt
Yes
-->Yes
Yes £10
-->Yes .19
Yes £10 per week
-->Yes .19 per week
Yes €5 (Next)
-->Yes .49 (Next)
Yes 22 EA
-->Yes 22 EA
Yes £5 - £10
-->Yes .49 - .19
我无法使 IF
语句正常工作,我可以用普通代码执行此操作,但无法为电子表格公式计算出来。
我已经多次尝试修改@Rubén 的答案以包含 N/A
因为它不是表格错误,我也尝试了同样的方法使任何美元输入以美元形式出现(没有变化)但是我真的无法在 Excel/Google 表格中掌握 IF/OR/AND 的窍门。
=ArrayFormula(
SUBSTITUTE(
A1,
OR(IF(A1="No","No",REGEXEXTRACT(A1, "[\£|\€]\d+")),IF(A1="N/A","N/A",REGEXEXTRACT(A1, "[\£|\€]\d+"))),
IF(
A1="No",
"No",
TEXT(
REGEXEXTRACT(A1, "[\£|\€](\d+)")*
IF(
"€"=REGEXEXTRACT(A1, "([\£|\€])\d+"),
GoogleFinance("CURRENCY:EURUSD"),
GoogleFinance("CURRENCY:GBPUSD")
),
"$###,###"
)
)
)
)
上面,我尝试在第一个 IF 语句之前添加一个 OR() 以尝试将 N/A
作为选项包含在内,在下面我尝试了它,您可以在下面以各种不同的方式看到(用这个替换第 4 行)
IF(
OR(
A1="No",
"No",
REGEXEXTRACT(A1, "[\£|\€]\d+");
A1="No",
"No",
REGEXEXTRACT(A1, "[\£|\€]\d+")
)
)
但这也不管用。我认为使用 ;
是一种分隔 OR 表达式的方法,但显然不是。
回复:Rubén 的最新代码 16/10/2016
我已将其修改为 =ArrayFormula( IF(NOT(ISBLANK(A2)),
IF(IFERROR(SEARCH("$",A2),0),A2,IF(A2="N/A","N/A",IF(A2="No","No",IF(A2="Alt","Alt",IF(A2="Yes","Yes",
SUBSTITUTE(
A2,
REGEXEXTRACT(A2, "[\£|\€]\d+"),
TEXT(
REGEXEXTRACT(A2, "[\£|\€](\d+)")
*
VLOOKUP(
REGEXEXTRACT(A2, "([\£|\€])\d+"),
{
{"£";"€"},
{GoogleFinance("CURRENCY:GBPUSD");GoogleFinance("CURRENCY:EURUSD")}
},
2,0),
"$###,###"
)
)
)))))
,"")
)
此修复:
- 空白单元格不再抛出#N/A
Yes
只有单元格不再抛出 #N/A- 添加了另一个文本值
Alt
- 将货币格式更改为 0 个小数位,而不是我最初要求的 2 个小数位。
正如您在下图中看到的那样,两个红色单元格不太正确,因为我从未想过这种情况,两个值中的第二个值保留在输入形式中,而不是转换为美元。
直接回答
尝试
=ArrayFormula( IF(IFERROR(SEARCH("$",A1:A6),0),A1:A6,IF(A1:A6="N/A","N/A",IF(A1:A6="No","No", SUBSTITUTE( A1:A6, REGEXEXTRACT(A1:A6, "[\£|\€]\d+"), TEXT( REGEXEXTRACT(A1:A6, "[\£|\€](\d+)") * VLOOKUP( REGEXEXTRACT(A1:A6, "([\£|\€])\d+"), { {"£";"€"}, {GoogleFinance("CURRENCY:GBPUSD");GoogleFinance("CURRENCY:EURUSD")} }, 2,0), "$###,###.00" ) ) ))) )
结果
+---+------------------+---------------------+ | | A | B | +---+------------------+---------------------+ | 1 | N/A | N/A | | 2 | No | No | | 3 | Yes £10 | Yes .19 | | 4 | Yes £10 per week | Yes .19 per week | | 5 | Yes €5 (Next) | Yes .49 (Next) | +---+------------------+---------------------+
说明
或函数
以上公式使用嵌套的 IF 函数来代替或使用 OR 函数。
REGEXTRACT
没有为每个货币符号使用 REGEXEXTRACT 函数,而是使用了正则表达式 OR 运算符。范例
REGEXEXTRACT(A1:A6, "[\£|\€]\d+")
使用了三个正则表达式,
- 获取货币符号和金额
[\£|\€]\d+
- 获取金额
[\£|\€](\d+)
- 获取货币符号
[(\£|\€])\d+
货币换算
不使用嵌套 IF 来处理货币换算率,而是使用 VLOOKUP 和数组。假设将来可以添加更多货币,这可以更容易地维护公式。