一所懸命に手抜きする

デスクワークばかりのスポーツ嫌いで50歳も過ぎ、いよいよ足腰に衰えを感じつつある昨今。

範囲指定もできて複数の引数を渡せるconcat互換ユーザー関数

Excel2016のConcat関数は範囲指定で文字列結合ができる

 当社は下位互換性を維持する必要性もあってExcel2016は使用していないのですが、Excel2016ではconcatenateを代替する関数としてConcat関数が導入されました。

support.office.com

[Excel2016-]concat
=CONCAT(B2:C8,X7,Y1:Z5)

 もともとのconcatenate関数は引数が複数でしたから、concat関数も引数を複数引き渡せます。そしてさらにB2:C8のように範囲で引き渡せるのですから素晴らしいです。
 Excel2016以降をお使いの方は本記事は無視して下さい。
 旧バージョンを使用している身としては、ぜひこの関数を使いたいのですが・・・。

ユーザー関数ConcatenateByRange()は範囲指定はできても引数は一つでした

 以前作成したユーザー関数ConcatenateByRange()は範囲指定はできても引数は一つしか渡せませんでした。

Range(範囲)で引数渡しできる concatenate

a-habakiri.hateblo.jp

concat互換のユーザー関数

 そこで、Excel2013以前用にユーザー関数としてconcat互換関数を作ってみました。

[Excel2016-]myConcat
Function myConcat(ParamArray myRanges())
    
    Dim cnt As Long
    Dim strs As String
    Dim myCell As Range
        
        strs = ""
    For cnt = 0 To UBound(myRanges())
        For Each myCell In myRanges(cnt)
                strs = strs & myCell.Value
        Next myCell
    Next cnt
    
    myConcat = strs
End Function

f:id:a_habakiri:20161123215630p:plain
 使い方はconcatと同じです。大文字小文字は関係ありません。

myConcat使用法
=myconcat(B2:C8,X7,Y1:Z5)
=myconcat("apple"," ","pen")

 郵便番号、都道府県、市町村、町名番地、建物名のように別れているデータを結合するのが簡単になりました。

ポイント

  1. 複数の引数を渡せる
  2. 引数に範囲を渡せる