本記事は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です。
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)のように引数を範囲で指定できるようになります。
これでRangeでconcatenateできるようになりました。 ConcatenateByRangeは引数が一つですが、引数をマルチ対応させると… a-habakiri.hateblo.jp