空白だったら上のセルを参照したい

セルとセルを結合させる場合など単純にセルを参照するときに,もし空白の部分を参照した場合は,代わりにその上のセルの値を持ってきたいときがあります。

例えば,次のような,都道府県名と市町村名のデータを使うときを考えます。
B列には全市町村名が約1700個あり,A列には都道府県名が最初の1行にしか入っていないとします。

20161122-1

これらをつなげた「都道府県名+市町村名」を全て作りたい場合,単純に&を使って結合しようとする場合,数が少なければひとつひとつ処理すれば良いですが,たくさんある場合は普通は数式を相対コピーすると思います。

20161122-2

そうすると,当然ブランクのところは都道府県名が入りません。
都道府県名を全ての行に反映させたいとき,「もし参照したセルが空白だったら,上のセルを参照する」ようにしたいですね。

これの解決をWeb検索で探してもあまり有効な回答が見つからなかったので,VBAでユーザー定義関数を作ることにしました。

標準モジュールに以下の関数を作成します。簡単なコードなので,どんなバージョンでもWinでもMacでも動くと思います。

このように使うと,A列が空白の場合,都道府県名が書かれているところまで上を参照しつづけて返すようになります。

20161122-3

(2017/12/02追記)
最初の Application.Volatileは、ユーザー定義関数を自動再計算関数にするための宣言です。自動再計算関数は、ワークシートのいずれかのセルで計算が行われるたびに再計算が行われます。
そうしない場合(非自動再計算関数)は、入力した変数の値が変わったとき(すなわちユーザー定義型関数を使ったセルが更新されたとき)だけ再計算が行われます。
通常、ユーザー定義関数の冒頭部分で宣言しておきます。

関連記事