textjoin関数の使い方とExcel2013以前の古いエクセルで使う方法


Excel2016の2016年2月アップデートで、
concat関数とともに、textjoin関数が導入されています。
(Excel2016全てで使えるわけではなく、
 一部の契約形態のみ使用できるようです)

textjoin関数とは?

vbaでいうjoin関数とほとんど同じで、
各セルを「区切り文字」つきでくっつけてくれます。

具体的な動きは、次のようになります。

1.書式
TEXTJOIN(区切り文字,空欄時不処理,文字列1,文字列2, ... ,文字列n)
2.動作

文字列1~文字列nまでを
「区切り文字」をはさんでくっつけます。

例えば、

=TEXTJOIN(" ",TRUE, "The", "sun", "will", "come", "up", "tomorrow.")

The sun will come up tomorrow.

というように、
間に区切り文字(今回の場合は「空白」)をはさみながら、
指定した各単語をつなげていっています。

もちろん、

=TEXTJOIN(",", TRUE, A1:G2 , K2)

というように、セルを指定することもできます。

ところで、
vbaのjoin関数とは異なり、
2つ目の引数として「空欄時不処理」という項目があります。

これは、
くっつける「文字列」が、空欄の場合にも、
区切り文字をつけるかどうかを指定する項目で、

  • TRUE :文字列が空欄の場合、区切り文字をつけない
  • FALSE:文字列が空欄の場合も区切り文字をつける

という意味を持ちます。

=TEXTJOIN(",", TRUE, "A", "", "B")

A,B
=TEXTJOIN(",", FALSE, "A", "", "B")

A,,B

両方とも、
くっつける文字列3つのうち、2つ目が空欄になっています。

このようなときに、
「TRUE」の場合は、ムダなカンマが入らないのに対して、
「FALSE」の場合は、カンマが入ります。

使い分け方ですが、

  • 単純に入っているデータの「一覧」を作りたいだけであれば前者
  • CSVファイルを作るなど、空欄に意味がある場合は後者

を使うことになると思います。

Excel2013、Excel2010、Excel2007等古いエクセルでは使えない

このtextjoin関数は、
最新のExcel2016でしか使えませんが、
これも、concat関数と同じく、
古いExcelで使うためのユーザ定義関数を作ってみました。

Function TEXTJOIN(Delim, Ignore As Boolean, ParamArray par())
  Dim i As Integer
  Dim tR As Range
   
  TEXTJOIN = ""
  For i = LBound(par) To UBound(par)
    If TypeName(par(i)) = "Range" Then
      For Each tR In par(i)
        If tR.Value <> "" Or Ignore = False Then
          TEXTJOIN = TEXTJOIN & Delim & tR.Value2
        End If
      Next
    Else
      If par(i) <> "" Or Ignore = False Then
        TEXTJOIN = TEXTJOIN & Delim & par(i)
      End If
    End If
  Next
  
  TEXTJOIN = Mid(TEXTJOIN, Len(Delim) + 1)
  
End Function

上記ソースを
エクセルVBAの標準モジュールにコピペしてもらえれば、
textjoin関数と、ほぼ同じ動きをすると思います。

更新履歴

2017/12/26 19:50 デリミタの文字数が1以外のとき、正常動作しない不具合を修正

エクセル基礎講座 「無料」動画マニュアル

「経理事務のためのエクセル基礎講座(初級編)」(動画マニュアル 総収録時間162分)を無料プレゼント中です!

このマニュアルで解説していることを一通り学べば、経理事務を行う上で最低限必要となる知識が得られます。

ご登録者の方には、合わせて、公認会計士が実体験を通して身に付けたエクセルを使う技をメールにてお伝えしていきます!

無料動画講座 登録フォーム

※ご登録頂いたメールアドレスに、エクセルを使いこなすための情報を配信するメールセミナー「エクセル倍速講座」も合わせて配信させていただきます。