後で連結される文字列を再フォーマットする関数を設定しようとしています。文字列の例は次のようになります。
Standard_H2_W1_Launch_123x456_S_40K_AB
ただし、「[〜#〜] s [〜#〜]」は存在せず、「40K」は「60K」またはそこにないことがありますが、「_ AB」は「_CD」または「EF」。最後に、すべての下線をハイフンに変更する必要があります。最終製品は次のようになります。
Standard-H2-W1-Launch-123x456-
次の4つの関数を実行すると、これらすべてを処理できます。
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,"_AB","_"),"_CD","_"),"_EF","_")
=SUBSTITUTE(SUBSTITUTE(B2,"_40K",""),"_60K","")
=SUBSTITUTE(C2,"_S_","_")
=SUBSTITUTE(D2,"_","-")
これらを1つの関数に結合する方法をいくつか試しましたが、このレベルのExcelは比較的新しいので、迷っています。とにかくこれをすべて組み合わせて、1つのセルで1つのコマンドを次々に実行する方法はありますか?
これらを単純に結合するには、次のようにそれらをすべて一緒に配置できます。
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,"_AB","_"),"_CD","_"),"_EF","_"),"_40K",""),"_60K",""),"_S_","_"),"_","-")
(これは、7つのネストされたステートメントという古いExcelの制限に合格する可能性があることに注意してください。私はExcel 2010でテストしています
別の方法は、Left
およびRight
関数を利用することです。
これは、最後の変更データが常に存在し、8文字の長さであると想定しています
=SUBSTITUTE(LEFT(A2,LEN(A2)-8),"_","-")
これにより、同じ結果の文字列が得られます
文字列の末尾が8文字で終わるとは限らない場合は、「_ S」を検索して現在の場所を取得できます。これを試して:
=SUBSTITUTE(LEFT(A2,FIND("_S",A2,1)),"_","-")
数式を分解するアイデアをありがとう Werner !
Alt + Enterを使用すると、複雑な代替数式の各ビットを別々の行に配置できます。Enterを押すと、それらが追跡しやすくなり、自動的に整列します。
セル参照の両側のsubstitute(
行の数に一致する十分な終了ステートメントがあることを確認してください。
この例のように:
=
substitute(
substitute(
substitute(
substitute(
B11
,"(","")
,")","")
,"[","")
,"]","")
になる:
=
SUBSTITUTE(
SUBSTITUTE(
SUBSTITUTE(
SUBSTITUTE(B12,"(",""),")",""),"[",""),"]","")
これはそのまま正常に機能しますが、余分な段落をいつでも手動で削除できます。
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(B12,"(",""),")",""),"[",""),"]","")
名前> substitution()
[アメリカ領サモア]>アメリカ領サモア
次のアプローチを使用します。
_=SUBSTITUTE(LEFT(A2,LEN(A2)-X),"_","-")
_
ここで、X
は、あなたが後ではないものの長さを示します。そして、X
に使用します
_(ISERROR(FIND("_S",A2,1))*2)+
(ISERROR(FIND("_40K",A2,1))*4)+
(ISERROR(FIND("_60K",A2,1))*4)+
(ISERROR(FIND("_AB",A2,1))*3)+
(ISERROR(FIND("_CD",A2,1))*3)+
(ISERROR(FIND("_EF",A2,1))*3)
_
上記のISERROR(FIND("X",.,.))*x
は、X
が見つからない場合は0を返し、見つかった場合はx
(X
の長さ)を返します。技術的には、一致する可能性があるものから_A2
_を右からトリミングしています。
このアプローチの利点は、「置換」がネストされていないため、どの置換(または削除)が行われているのかがより明確であることです。