1

我很难生成以CONCATENATE我想要的方式组合文本单元格的公式。我要连接五个字段:Title、Forename、RegnalNumber、Surname 和 Alias,按此顺序。我不是正则表达式专家,所以请原谅糟糕的格式,但这是表达我想要实现的目标的粗略方式:

(title)? (forename) (regnalnumber)? (surname)?, (alias).

唯一不能为空的字段是名字字段,尽管它可能具有值“?”,在这种情况下,它不应该在连接中输出任何内容,即它应该被视为空白。希望下面的测试用例应该展示我想要实现的输出:右边的输出应该是这样的:

| Title  | Forename | RN | Surname   | Alias        | CONCATENATE                           |
+--------+----------+----+-----------+--------------+---------------------------------------+
| Ser    | Jaime    |    | Lannister | Kingslayer   | Ser Jaime Lannister, Kingslayer       |
|        | Pate     |    |           |              | Pate                                  |
| Lord   | ?        |    | Vance     |              | Lord Vance                            |
| King   | Aerys    | II | Targaryen | The Mad King | King Aerys II Targaryen, The Mad King |
| Lord   | Jon      |    | Arryn     |              | Lord Jon Arryn                        |
|        | Garth    |    |           | Of Oldtown   | Garth, Of Oldtown                     |

我已经尝试了很长时间来尝试使这种串联工作,但一直无法做到正确。这是当前公式,为便于理解,将单元格引用替换为字段名称:

=CONCATENATE(IF(Title<>"",Title&" ",""),IF(AND(Forename<>"",Forename<>"?"),Forename,""),IF(RN<>""," "&RN,""), IF(OR(AND(Forename<>"", Forename<>"?"), Surname<>"", RN<>""), " ",""), IF(Surname<>"",Surname,""),IF(AND(Alias<>"",OR(Alias<>"",AND(Forename<>"", Forename<>"?"),Surname<>"")),", "&Alias, Alias))

在一种情况下它不起作用:如果 Surname 和 RN 为空,但 Forename 和 Alias 不为空。例如,如果 Forename 是Garth, Alias 是Of Oldtown,则串联输出:Garth , Of Oldtown。如果标题不为空,则相同。逗号前不应该有空格。

你能帮我修正这个公式,让它按预期工作吗?如果你能找到一种方法来简化它,那就更好了!我知道我可能把这件事复杂化了很多。我使用的是 LibreOffice Calc 4.3.1.2,而不是 Excel。

4

2 回答 2

1

恕我直言,解决此类情况的最佳方法是将问题划分为多个简单的列,而不是 1 个巨大的复杂公式。请记住,您始终可以隐藏不想看到的列。

因此,为标题创建一个列,上面写着=if(a2="","",a2&" ")

这可以扩展到所有其他列,除了:

  • 对于 Forename,您要在其中包含“?” 如下:=if(b2="?","",b2&" ")
  • 对于要包含前导“,”的别名:=if(e2="","",", "&e2)

最后,只需将您的每个工作列与以下内容连接起来:=f2&g2&h2&i2&j2

这将问题分解为非常简单的组件,并使其易于调试。如果您想在稍后阶段添加额外的功能,很容易将其中一个公式换成其他公式。

于 2014-09-16T13:00:43.247 回答
1

我知道这只是有点有趣,但我可以建议一种更算法的方法吗?

该算法是: -

If a field is empty or ?, do nothing

Else

  If concatenation so far is empty, add field to concatenation

  Else

    Add a space followed by the field to concatenation

这导致了 G2 中的这个公式:-

=IF(OR(A2="",A2="?"),F2,IF(F2="",A2,F2&" "&A2)

(需要在 F 列中添加单个撇号才能使其起作用)

复制时看起来像这样:-

在此处输入图像描述

于 2014-09-16T18:19:19.503 回答