Excelは、文字列をより長い文字列に結合するという同じ目的を持つ1つのブック関数と1つの演算子を提供します。 CONCATENATE関数とアンパサンド(&)演算子の目的は基本的に同じです。

多くの人は、入力が少なくて済むため、CONCATENATE関数よりもアンパサンド演算子を使用しますが、CONCATENATEは、ある範囲のセルを処理する場合、非常に価値が高くなります。

残念ながら、そうではありませんが、範囲内のすべてのセルを非常にうまく連結する独自のユーザー定義関数を作成できます。

次のマクロについて考えてみます。

Function Concat1(myRange As Range, Optional myDelimiter As String)

Dim r As Range

Application.Volatile     For Each r In myRange         Concat = Concat & r & myDelimiter     Next r     If Len(myDelimiter) > 0 Then         Concat = Left(Concat, Len(Concat) - Len(myDelimiter))

End If End Function

この関数には範囲が必要であり、オプションの区切り文字が用意されています。

最後の「If」ステートメントは、連結された文字列から最後の末尾の区切り文字を削除します。 CONCAT1関数を使用すると、CONCATENATEまたはアンパサンド式で必要なメンテナンスなしで、範囲内でセルを追加および削除できます。次のいずれかの方法で関数を呼び出すだけです。

=CONCAT1(C8:E10)

=CONCAT1(C8:E10,"|")

関数を呼び出す2番目の方法では、オプションの区切り文字を使用します。この区切り文字は、C8:E10の範囲の連結された各値の間に挿入されます。ただし、これには問題があります。その範囲のセルが空の場合、2つの連続した区切り文字で終わる可能性があります。区切り文字を1つだけにしたい場合は、関数に1つの小さな変更を加える必要があります。

Function Concat2(myRange As Range, Optional myDelimiter As String)

Dim r As Range

Application.Volatile     For Each r In myRange         If Len(r.Text) > 0 Then             Concat = Concat & r & myDelimiter         End If     Next r     If Len(myDelimiter) > 0 Then         Concat = Left(Concat, Len(Concat) - Len(myDelimiter))

End If End Function

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

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

このヒント(3062)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。