Google表格将公式提取并将货币从€或£转换为USD

时间:2016-10-15 23:01:17

标签: if-statement google-sheets logical-operators formulas

我正在尝试执行以下操作:

  1. 检查N/ANo的单元格;如果它具有其中任何一个,那么它应该输出N/ANo
  2. 检查单元格£Yes;如果它有其中之一那么它将继续步骤3.如果它有$那么它应该重复与输出相同的输入。
  3. 使用以下内容从单元格中提取货币:REGEXEXTRACT(A1, "\$\d+")REGEXEXTRACT(A1, "\£\d+")(我认为这是最佳方式)
  4. 使用GoogleFinance("CURRENCY:EURUSD")GoogleFinance("CURRENCY:GBPUSD")
  5. 将其转换为$ USD
  6. 输出原始单元格,但使用步骤4的输出替换步骤3中提取的货币。
  7. 示例:(原创 - >输出

    • N/A - > N/A
    • No - > No
    • Alt - > Alt
    • Yes - > Yes
    • Yes £10 - > Yes $12.19
    • Yes £10 per week - > Yes $12.19 per week
    • Yes €5 (Next) - > Yes $5.49 (Next)
    • Yes $5 22 EA - > Yes $5 22 EA
    • Yes £5 - £10 - > Yes $5.49 - $12.19

    我无法使用正常的IF语句,我可以在普通代码中执行此操作,但无法解决电子表格公式问题。

    我已经尝试多次修改@Rubén的答案以包括N/A,因为它不是Sheets错误,我也试过让任何USD输入以USD(没有变化)出现但我真的无法在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表达式的方法,但显然不是。

    Re:Rubén的最新代码2016/10/10

    我把它修改为= 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位小数。

    正如你在下面的图片中看到的那样,两个红色单元格并不完全正确,因为我从未想过这个场景,这两个值中的第二个是保留在它的输入形式而不是转换为USD。

    enter image description here

1 个答案:

答案 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 $12.19          |
| 4 | Yes £10 per week | Yes $12.19 per week |
| 5 | Yes €5 (Next)    | Yes $5.49 (Next)    |
+---+------------------+---------------------+

解释

OR功能

相反或使用OR函数,上面的公式使用嵌套的IF函数。

REGEXTRACT

不使用每个货币符号的REGEXEXTRACT函数,而是使用正则表达式OR运算符。实施例

REGEXEXTRACT(A1:A6, "[\£|\€]\d+")

使用了三个正则表达式,

  • 获取货币符号和金额[\£|\€]\d+
  • 获取金额[\£|\€](\d+)
  • 获取货币符号[(\£|\€])\d+

货币转换

不使用嵌套IF来处理货币转换率,而是使用VLOOKUP和数组。假设未来可以添加更多货币,这可以更容易维持公式。