Excelでセルの結合を行うと、よろしくない現象がいろいろ発生するので、私個人としてはセル結合を利用することはほとんどありません。
セル範囲の中央に文字列を簡単に表示するために[セルを結合して中央揃え]ボタンを利用する方が多いと思いますが、その場合、[選択範囲内で中央]を指定すればいいはずなのです。
しかし現実としては、セル結合に関連するご質問や要望をいただくことは、少なくありません。
もっとも多いのがセルを結合するショートカットキーでしょう。
セルを結合するそのままのショートカットキーは用意されていませんが、2003までのExcelなら[セルの結合]ボタンをツールバーに作成してボタンのテキストを表示するという方法で、Excel 2007・2010ならクイックアクセスツールバーに[セルの結合]ボタンを作成することで、アクセスキーをショートカットキーもどきとして使うことができます。
セル結合時にデータもマージしたい
ショートカットキーについで多いのが、セルを結合するときにデータも一緒にマージできないのか、といったご質問・要望です。
データの入力されている複数のセルを結合しようとすると
「選択範囲には複数のデータ値があります。1つのセルとして結合すると、選択したセル範囲にある最も左上端にあるデータのみが保持されます(空白セルは無視されます)。」
といったメッセージが表示され、そのまま結合を実行すると左上端セルのデータだけが残ります。
これを、左上端のデータだけでなく、すべてのデータを残して、データをマージしてセル結合をしたいという要望をいただくことがあります。
セル結合時にデータもマージするサンプルマクロ
左上端のデータだけ残るのがExcelの仕様でデータをマージしてセルを結合する機能は標準では用意されていないので、VBA(Visual Basic for Application)でマクロを組みましょう。
Dim rng As Range
Dim txt As String
For Each rng In Selection
txt = txt & rng.Text
Next
Application.DisplayAlerts = False
Selection.MergeCells = True
Selection.Value = txt
Application.DisplayAlerts = True
End Sub
最初の、
For Each rng In Selection.Cells
txt = txt & rng.Text
Next
の部分で、選択されているセルのデータを変数txtに格納しています。
データをマージしたいという要望の場合、本当の単なるデータ・Valueよりは、書式も含めたデータということが多いでしょうから、ここではTextを変数に追記していきます。
その後、
Selection.MergeCells = True
でセルを結合して
Selection.Value = strText
でそのセルに先の変数txtの値を入れています。
本当に必要な処理は上記の5行だけで、あとはメッセージが表示されないように
Application.DisplayAlerts = False
とする定番の処理を入れています。
Home » Excel VBA Rangeオブジェクト » 結合セル » セル結合時にデータもマージするExcelマクロ