ここでの作業を困難にする重要なポイント - 文字列の最後の 2 つのハイフンをセパレータとして使用し、残りはすべてそのままにする必要があります。そのような場合には、 ARRAY 数式が最適です。私の解決策は以下の通りです:
- 名前 A1 から始まる 6 列: 文字列 | MAX "-" | 2番目の MAX "-" | Str1 | Str2 | Str3
- から始まる列 A に値を入力します
A2
。
- B2 ( MAX "-" ): 式を入力しますが、通常の代わりに+ +を
=MAX(IFERROR(SEARCH("-",$A2,ROW(INDIRECT("1:"&LEN($A2)))),0))
押します。これにより、ARRAY 式が定義され、その周りに括弧が表示されます (ただし、手動で入力しないでください!)。CTRLSHIFTENTERENTER{}
- C2 ( 2番目の MAX "-" ): 式を入力し、もう一度+ +
=MAX(IFERROR(SEARCH("-",$A2,ROW(INDIRECT("1:"&LEN($A2)))),0)*IF(IFERROR(SEARCH("-",$A2,ROW(INDIRECT("1:"&LEN($A2)))),0)=MAX(IFERROR(SEARCH("-",$A2,ROW(INDIRECT("1:"&LEN($A2)))),0)),0,1))
を押します。CTRLSHIFTENTER
したがって、文字列内の最後の 2 つのハイフンの位置を取得します。残りは簡単です - 通常の LEFT / MID / RIGHT のもの:
- D2:
=LEFT($A2,$C2-1)
, ENTER.
- E2:
=MID($A2,$C2+1,$B2-$C2-1)
, ENTER.
- F2:
=RIGHT($A2,LEN($A2)-$B2)
, ENTER.
- オートフィル
B:F
。
一時的な列 B:C が不要な場合 - B:C のコンテンツの D:F でそれらへの参照を置き換える必要があります (つまり$A2
、=LEFT($A2,
A2 の実際の数式に置き換えます)。ただし、これにより、非常に複雑な ARRAY 数式が作成され、依然として機能しますが、作成者でも翌日にはわかりにくい)
上記のソリューションについては、おそらく改善または単純化される可能性がありますが、メガバイトの統計データを分析しなければならなかった時代から、そのような構造にかなり慣れているROW...INDIRECT
ので、LEFT / RIGHT を作成するのと同じくらい簡単です。とにかく、それはうまくいくようです。
便宜上、私のサンプル ファイルを共有します: https://www.dropbox.com/s/p49x32t3a0igtby/StringHyphensSeparate.xlsx
お役に立てば幸いです)
追加 - 最後の 2 つのハイフンを見つけるための 2 つの単純化されたソリューション(残りの手順は上記と同じです):
より単純な ARRAY 数式:
- B2 ( MAX "-" ): 式を入力しますが、通常の代わりに+ +を
=MAX(IF(MID($A2,ROW(INDIRECT("1:"&LEN($A2))),1)="-",ROW(INDIRECT("1:"&LEN($A2))),0))
押します。これにより、ARRAY 式が定義され、その周りに括弧が表示されます (ただし、手動で入力しないでください!)。CTRLSHIFTENTERENTER{}
- C2 ( 2番目の MAX "-" ): 式を入力し、もう一度+ +
=LARGE(IF(MID($A2,ROW(INDIRECT("1:"&LEN($A2))),1)="-",ROW(INDIRECT("1:"&LEN($A2))),0),2)
を押します。CTRLSHIFTENTER
関数を使用した正規の数式SUBSTITUTE
:
- B2 ( MAX "-" ): 式
=SEARCH("@",SUBSTITUTE($A2,"-","@",LEN($A2)-LEN(SUBSTITUTE($A2,"-",""))))
を入力しENTERます。
- C2 ( 2番目の MAX "-" ): 式
=SEARCH("@",SUBSTITUTE($A2,"-","@",LEN($A2)-LEN(SUBSTITUTE($A2,"-",""))-1))
を入力しENTERます。
解決の鍵は、マッチの特定のインスタンスのみ、つまり 2 番目または 3 番目のハイフンのみをSUBSTITUTE
置換できることです。ハイフンの総数は、次の式によって再び決定されます: 元の文字列の長さ MINUS すべてのハイフンが空の文字列に置き換えられた文字列の長さ: . ここでもう 1 つのトリック - 元の文字列をそのままにしておく必要がありますが、中間的な解決策のためにそれを使って何かをしても構いません! したがって、ハイフンを に置き換えてから、一時文字列で検索します。SUBSTITUTE
LEN($A2)-LEN(SUBSTITUTE($A2,"-","")
@
@
上記の解決策はすべて機能しています。好きなものを選択してください/よりよく理解してください。同じタスクに対して2つの異なるアプローチがあるため、配列数式の理解にも役立つことを願っています。
サンプル ファイルを更新して、最後の 2 つの例 + 結果のメガフォーミュラを中間ステップなしで含めました。リンクは同じで、上にあります。幸運を!