クリスは、列AからFに顧客名があるワークシートを持っています。列Gに、6つの名前列からすべての名前を取得し、それらを1つの長い文字列に連結する式を含めたいと考えています。 。 6つの列すべてに名前がない可能性があり、余分な先頭または末尾の//区切り文字があってはなりません。

Excelでテキストを連結するのは簡単です。たとえば、セルA2に何かがあり、それをセルB2にあるものと連結する場合は、次の数式を使用して行うことができます。

=A2 & B2
=A2 & "//" & B2

これはとても簡単です。このアプローチを使用すると、次の式を使用して6つの名前すべてを連結できます。

=A2 & "//" & B2 & "//" & C2 & "//" & D2 & "//" & E2 & "//" & F2

物事がトリッキーになるのは、それらのセルのいくつかに何も含まれていない可能性があることを認識したときです。したがって、数式は末尾または末尾の//区切り文字、または二重区切り文字(////)になります

結果の途中のどこか。

明らかな解決策は、IFステートメントを使用して、名前セルを連結する前にその内容を確認することです。ただし、これにより、驚くほど長い数式が生成される可能性があります。たとえば、次の式はチェックと連結を正しく実行します。

=IF(RIGHT(CONCATENATE(IF(A3="","",CONCATENATE(A3,"//")), IF(B3="","",CONCATENATE(B3,"//")),IF(C3="","",CONCATENATE(C3,"//")), IF(D3="","",CONCATENATE(D3,"//")),IF(E3="","",CONCATENATE(E3,"//")), IF(F3="","",F3)),2)="//",LEFT(CONCATENATE(IF(A3="","", CONCATENATE(A3,"//")),IF(B3="","",CONCATENATE(B3,"//")), IF(C3="","",CONCATENATE(C3,"//")),IF(D3="","",CONCATENATE(D3,"//")), IF(E3="","",CONCATENATE(E3,"//")),IF(F3="","",F3)), LEN(CONCATENATE(IF(A3="","",CONCATENATE(A3,"//")), IF(B3="","",CONCATENATE(B3,"//")),IF(C3="","",CONCATENATE(C3,"//")), IF(D3="","",CONCATENATE(D3,"//")),IF(E3="","",CONCATENATE(E3,"//")), IF(F3="","",F3)))-2),CONCATENATE(IF(A3="","",CONCATENATE(A3,"//")), IF(B3="","",CONCATENATE(B3,"//")),IF(C3="","",CONCATENATE(C3,"//")), IF(D3="","",CONCATENATE(D3,"//")),IF(E3="","",CONCATENATE(E3,"//")), IF(F3="","",F3)))

はい、これは1行の数式です。 (ふぅ!)この式は、IFステートメントをネストするアプローチを使用して目的の結果を達成します。これはこの特定のインスタンスで機能する可能性がありますが、数式は、IFステートメントを7レベルの深さにネストすることのみを許可するというExcelの制限に非常に近く実行されます。

潜在的なネストされたレベルの問題の解決策は、IFステートメントをネストしないことです。代わりに、各セルを個別に評価し、返されたものを連結することができます。

=MID(IF(ISTEXT(A3),"//"&A3,"") & IF(ISTEXT(B3),"//"&B3,"")

& IF(ISTEXT(C3),"//"&C3,"") & IF(ISTEXT(D3),"//"&D3,"") & IF(ISTEXT(E3),"//"&E3,"") & IF(ISTEXT(F3),"//"&F3,""),3,2000)

この式ははるかに短いことに注意してください。複数の行に「分割」された式を見ると、それが何をしているのかがよくわかります。

=MID( IF(ISTEXT(A3),"//"&A3,"") & IF(ISTEXT(B3),"//"&B3,"") & IF(ISTEXT(C3),"//"&C3,"") & IF(ISTEXT(D3),"//"&D3,"") & IF(ISTEXT(E3),"//"&E3,"") & IF(ISTEXT(F3),"//"&F3,""),3,2000)

数式内の個々のIFステートメントは、名前セルを評価し、セルにテキストが含まれていない場合は何も返さない( “”)か、区切り文字(//)の後に名前を返します。次に、数式全体がMIDステートメントで囲まれ、文字列の最初の//区切り文字が効果的に切り捨てられます。

次のように、ISTEXT関数を使用してセルを評価する代わりに、ブール比較を実行してセル内にテキストがあるかどうかを確認すると、この数式をさらに短縮できます。

=MID(IF(A3>"","//"&A3,"") & IF(B3>"","//"&B3,"") & IF(C3>"","//"& C3,"") & IF(D3>"","//"&D3,"") & IF(E3>"","//"&E3,"") & IF(F3>"","//"&F3,""),3,2000)

これはまったく同じ手法ですが、少し短くなっています。 (そして、元の式からかなり短くなっています。)

名前セルの値がテキストである場合、この数式はうまく機能します。名前の列に何らかの理由で数値が含まれている場合は、次のように、ISTEXTの代わりにISBLANKを使用するように数式を簡単に変更できます。

=MID(IF(ISBLANK(A3),"","//"&A3) & IF(ISBLANK(B3),"","//"&B3)

& IF(ISBLANK(C3),"","//"& C3) & IF(ISBLANK(D3),"","//"&D3)

& IF(ISBLANK(E3),"","//"&E3) & IF(ISBLANK(F3),"","//"&F3),3,2000)

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(2173)は、Microsoft Excel 97、2000、2002、および2003に適用されます。