通过公式特定级联文本单元格

时间:2014-09-16 12:12:16

标签: excel-formula concatenation libreoffice-calc

我难以制作一个CONCATENATE公式,它以我想要的方式组合文本单元格。我想连接五个字段:Title,Forename,RegnalNumber,Surname和Alias,按顺序排列。我不是正则表达式专家,所以原谅可怜的格式化,但这是表达我想要实现的目标的粗略方式:

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

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

| 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为null但Forename和Alias为非null。例如,如果Forename为Garth,而别名为Of Oldtown,则连接输出:Garth , Of Oldtown。如果标题非空,则相同。它不应该在逗号之前有空格。

你能帮我修一下这个公式,以便按预期工作吗?如果你能找到一种简化它的方法,那就更好了!我知道我可能过于复杂了。我使用的是LibreOffice Calc 4.3.1.2,而不是Excel。

2 个答案:

答案 0 :(得分:1)

解决这种情况的最佳方法是将问题分成多个简单的列,而不是一个庞大的复杂公式。请记住,您始终可以隐藏您不希望看到的列。

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

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

  • for Forename,你想要包含&#34;?&#34;如下:=if(b2="?","",b2&" ")
  • for Alias,你想要包含领先&#34;,&#34;:=if(e2="","",", "&e2)

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

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

答案 1 :(得分: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&amp;“”&amp; A2)

(需要在F列中放置单个撇号才能使其正常工作)

复制时的

如下所示: -

enter image description here