一所懸命に手抜きする

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

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

 本記事はExcel2013以前の内容です。

& や + 記号を用いる

 多くのプログラミング言語では文字列を結合する場合は & や + 記号を用いることができます。
 (例) x="山田"&"太郎" や y="鈴木"+"花子"
 もちろん、Excelワークシートでもこのような使い方はできます。

concatenate関数での結合

 Excelにはconcatenateという関数があって、
 concatenate(A1,A2,B3,C5,…)のように使います。
 でもそれなら=A1&A2&B3&C5 で十分な気がします。concatenate などという長い関数名を入力するのは面倒でしかないように感じます。
 実際には、concatenate は関数で、+のような算術演算子、&のような論理演算子ではないことを明確にしているのだと思いますが…。

concatenate 関数の引数にRangeは指定できない(Excel2013以前)

 concatenate などという長い関数名を入力する手間を掛けるのですから、それに見合う優れた存在価値を concatenate に見出せればと思います。
 concatenate 関数に引数を A1: B5 のようにRange(範囲)で渡せると良いのですが、Excel2013以前ではそのような使い方はできません。
 Range(範囲)で引数渡しできる concatenate を実現したいと思います。
 ※Excel2016ではconcatという関数で範囲指定に対応しました。  support.office.com

ユーザー関数を作る

Excelメニューの [ツール(T)]から、 [マクロ(M)]、[VisualBasicEditor(V)]と選択します。
 これにより、Visual Basic のエディタ(VBE)画面に移ります。

VBEメニューの [挿入(I)]から、[標準モジュール(M)]と選択します。
 Module1(コード)という画面が表示されまます。そのModule(コード)画面に関数をコーディングします。
 とりあえず下のコードを貼り付ければOKです。

[Excel][VBA]ユーザー関数 ConcatenateByRange()
Function ConcatenateByRange(rgs As Range)
       'User defined function to Concatenate values refered in Range format 
    Dim str As String
    Dim rg As Range
    str = ""
        For Each rg In rgs
            str = str & rg.Value
        Next
    ConcatenateByRange = str
End Function

ユーザー関数をワークシート関数として使ってみる
 VBE画面ではなくExcel表計算画面に戻り、下の画面の例では、=ConcatenateByRange(A1:B3)のように引数を範囲で指定できるようになります。
f:id:a_habakiri:20161121215419p:plain
 これでRangeでconcatenateできるようになりました。 ConcatenateByRangeは引数が一つですが、引数をマルチ対応させると… a-habakiri.hateblo.jp