【问题标题】:Google Sheets Formula to Extract and Convert Currency from € or £ to USD谷歌表格公式提取欧元或英镑货币并将其转换为美元
【发布时间】:2016-10-15 23:01:16
【问题描述】:

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

  1. 检查单元格中的N/ANo;如果它有其中任何一个,那么它应该输出N/ANo
  2. 检查单元格中的£Yes;如果它有其中之一,那么它将继续执行第 3 步。如果它有 $,那么它应该重复与输出相同的输入。
  3. 使用REGEXEXTRACT(A1, "\$\d+")REGEXEXTRACT(A1, "\£\d+") 从单元格中提取货币(我认为这是最好的方法)
  4. 使用GoogleFinance("CURRENCY:EURUSD")GoogleFinance("CURRENCY:GBPUSD") 将其转换为美元
  5. 输出原始单元格,但将步骤 3 中提取的货币替换为步骤 4 中的输出。

示例:(原始 --> 输出

  • 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,因为这不是表格错误,我也尝试过相同的方法使任何美元输入都以美元形式出现(没有变化),但我真的可以'无法掌握 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( 如果(不是(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 位。

正如您在下图中看到的那样,两个红色单元格并不完全正确,因为我从未想过这种情况,两个值中的第二个值保持在它的输入表单中,而不是转换为美元。

【问题讨论】:

  • GoogleFinance 和 REEXTRACT 在 Excel 中不可用,请添加您尝试过的公式。
  • 我明白你的意思,但同样适用于 Excel,只需使用 Find()InStr()LenLeft()/Right()/Mid() 混合使用货币兑换他们可以向 yahoo Finance 之类的网站添加新的网络查询或使用 Excel Currency Converter 插件。至于公式,我已经尝试了很多,但我无法掌握 IF 语句。
  • 指南要求提问者跟踪他们的研究(见How to Ask)。我没有发现问题保持详尽的研究跟踪,所以至少有一个,我认为你的问题应该没问题。
  • 在需要非常用函数的问题中考虑 Excel 和 Google 表格会使问题过于宽泛,因此可能会被关闭。
  • Rubén,即使像 =IF(REGEXEXTRACT(A1, "\$"), "Dollar", IF(REGEXEXTRACT(A1, "\£"), "Pound", IF(REGEXEXTRACT(A1, "\€"), "Euro", ""), ""), "") 这样的人似乎也无法提取正确的货币。它只是抛出#N/A,所以我什至无法通过那个简单的步骤;我假设我打算使用 IF(OR())IF(AND()) 但我无法在这种情况下如何使用它们。

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


【解决方案1】:

直接回答

试试

=数组公式( IF(IFERROR(SEARCH("$",A1:A6),0),A1:A6,IF(A1:A6="N/A","N/A",IF(A1:A6="No", “不”, 代替( A1:A6, 正则表达式(A1:A6,“[\£|\€]\d+”), 文本( 正则表达式(A1:A6, "[\£|\€](\d+)") * 查找( 正则表达式(A1:A6,“([\£|\€])\d+”), { {"£";"€"}, {GoogleFinance("CURRENCY:GBPUSD");GoogleFinance("CURRENCY:EURUSD")} }, 2,0), "$###,###.00" ) ) ))) )

结果

+----+------------------+----------+ | |一个 |乙| +----+------------------+----------+ | 1 |不适用 |不适用 | | 2 |没有 |没有 | | 3 |是 10 英镑 |是 $12.19 | | 4 |是 每周 10 英镑 |是的 $12.19 每周 | | 5 |是 5 欧元(下一个)|是 5.49 美元(下一个)| +----+------------------+----------+

说明

或函数

上面的公式使用嵌套的 IF 函数代替或使用 OR 函数。

正则提取

没有对每个货币符号使用 REGEXEXTRACT 函数,而是使用了正则表达式 OR 运算符。示例

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

使用了三个正则表达式,

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

货币换算

不是使用嵌套的 IF 来处理货币兑换率,而是使用 VLOOKUP 和数组。假设将来可以添加更多货币,这可能会使公式更容易维护。

【讨论】:

  • Rubén,N/A 在我的示例中不是 Google 表格错误,我尝试编辑您的数组公式以在第一个 IF 语句中使用 OR 语句来适应它,但那不起作用。我已经以各种可能的方式进行了尝试:OR(IF(C109="No","No",REGEXEXTRACT(C109, "[\£|\€]\d+")), IF(C109="Unknown","Unknown",REGEXEXTRACT(C109, "[\£|\€]\d+"))), Also 如果货币是美元,那么它应该只是复制自己而不是抛出 #N/A 编辑的主要帖子来显示这一点。跨度>
  • @Ryflex:将您尝试的内容添加到问题中。还要在输入数据上添加美元示例。
  • 我已经修改了你的最后一个公式并用它修复了一些东西,它也有助于我理解嵌套的 if 语句。然而,它确实存在一个问题。我已经编辑了我的主题以包含最新的更改和问题。
  • @Ryflex:关于“新”场景,我认为您应该将其作为一个新问题发布。
猜你喜欢
  • 1970-01-01
  • 2022-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多