ここで解説する CONCAT関数 と TEXTJOIN関数 は、Excel 2016のProPlusに追加された関数です。Professional Plusなどでは使用できません。ProPlusなどに関しては、
Excel 2016レビュー「Office 2016は3種類ある」
を、ご覧ください。
どちらも、セル内の文字列を結合する関数です。従来から使用できたCONCATENATE関数の拡張版ですね。まず、今までの文字列結合を振り返ってみましょう。
上図のように、複数のセルに入力されている文字列を結合するには、CONCATENATE関数か&演算子を使いました。
いずれにしても、入力されているセルをカンマで区切って、ひとつずつ指定しなければなりませんでした。これ、3つくらいならいいですけど、もっと多かったら面倒くさいです。「ったく!こっからここまで全部結合みたくできねーのかよ」と、Excelに悪態をついたのは私だけじゃないはずです。ちなみに、そのような動作を実現するマクロを作ったりもしました。
あるいは、ただ結合するだけでなく「A-B-C」みたいに、別の文字を区切りとして挿入するとなれば、これはもう&演算子を使って、地道にやるしか手はありませんでした。ああ、なんと古典的なやりかたなのでしょう。とても令和の時代には相応しくありません。
こうした文字列結合を拡張したのがCONCAT関数とTEXTJOIN関数です。順番に解説します。
使い方は簡単。引数に、ただセル範囲を指定するだけです。
まぁ、ほとんどの場合は、これで用が足りると思いますが、一応引数には、複数の文字列を指定できるので、こんなことや
こんなことも可能です。
CONCAT関数に関しては以上です。これで作業が楽になる人も多いのでは。なお、CONCAT関数が追加されたことで、今までのCONCATENATE関数は「これからは、これ使わないでね~」的な扱いになりました。使ってもいいですけど。
引数「区切り文字」には区切り文字を指定します。たとえば「A-B-C」のようにハイフンで区切るのなら"-"を、「A,B,C」のようにカンマで区切るのなら","です。スペースも指定できます。区切り文字を別のセルに入れておき、そのセルを参照することも可能です。空欄("")を指定すると、文字列が区切られず「ABC」のようになります。
引数「空のセルは無視」には、もし指定したセル範囲内にブランクセルがあった場合、そのブランクセルをスキップして、区切り記号も表示しないのか、ブランクセルはスキップするものの、区切り記号は表示するのかを指定します。これは、実際の違いを見ると分かりやすいです。ああ、ちなみに引数「文字列」のところに、結合したい文字列が入力されているセル範囲を指定します。
一般的には、TRUEを指定することが多いと思います。
CONCAT関数やTEXTJOIN関数は、VBAからWorksheetFunctionで呼び出すことができます。特にTEXTJOIN関数は超便利です。VBAには以前からJoin関数がありました。Join関数は、配列内の文字列を結合します。
Sub Macro1() Dim A(2) As String A(0) = "A" A(1) = "B" A(2) = "C" MsgBox Join(A, "-") End Sub
これができたら、どれほど便利だろう…と、何度も神様にお祈りしましたがダメでした。今まではしかたなく、次のようにするしかなかったです。
Sub Macro3() Dim A(2) As String A(0) = Range("A1") A(1) = Range("A2") A(2) = Range("A3") MsgBox Join(A, "-") End Sub
それが!TEXTJOIN関数なら一発です。神様ありがとう!
Sub Macro4() MsgBox WorksheetFunction.TextJoin("-", True, Range("A1:A3")) End Sub
ワークシート上に作成したデータをCSV形式で保存するようなときに重宝しますね。