1

CONCATENATE希望どおりにテキスト セルを結合する数式を作成するのに苦労しています。連結したいフィールドは 5 つあります。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))

うまくいかないケースが 1 つあります。Surname と RN が null で、Forename と Alias が null でない場合です。たとえば、Forename がGarthで、Alias がOf Oldtownの場合、連結の出力: Garth , Of Oldtown. タイトルが null でない場合も同様です。コンマの前にスペースを入れてはいけません。

期待どおりに機能するように、この式を修正するのを手伝ってもらえますか? 単純化する方法を見つけることができれば、なおさらです。私はおそらくこれをかなり複雑にしすぎていることを知っています。Excel ではなく、LibreOffice Calc 4.3.1.2 を使用しています。

4

2 に答える 2

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 に答える
1

このような状況を解決する最善の方法は、1 つの巨大で複雑な数式ではなく、複数の単純な列に問題を分割することです。表示したくない列はいつでも非表示にできることに注意してください。

というタイトルの列を作成します=if(a2="","",a2&" ")

これは、次を除く他のすべての列に拡張できます。

  • Forename の場合、「?」を含める場所 次のように:=if(b2="?","",b2&" ")
  • 先頭の「,」を含めるエイリアスの場合:=if(e2="","",", "&e2)

最後に、作業中の各列を次のように連結します=f2&g2&h2&i2&j2

これにより、問題が非常に単純なコンポーネントに分割され、デバッグが容易になります。後の段階で機能を追加したい場合は、式の 1 つを別のものに簡単に交換できます。

于 2014-09-16T13:00:43.247 に答える