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以外のとき、正常動作しない不具合を修正