エクセルの表を印刷するには見栄えの為にセルの結合を行ったら、並べ替えをするとエラーになって困ったことありませんか?
Mergeメソッドを書き加えれば、自動的にセルの複数一括結合・解除を自動的に行ってくれるので、並べ替え時のエラーを回避できる方法をご紹介します。
Mergeメソッド
VBAでセルの結合・解除は、Mergeメソッドを使いますが、エラーを防ぐ為に結合・解除するセルの範囲の左上端の入力値がセルを指定します。
その為にその他のセル入力値は削除されるので注意してください。
Mergeメソッドでセル結合
まず、Mergeメソッドの基本的な使い方の例として、セルA1とセルB1の隣同士を結合するVBAコードをご紹介します。
ここではユーザーフォームに配置したコマンドボタンに記載している例です。
Private Sub CommandButton1_Click()
Range(“A1:B1”).Merge
End Sub
- コマンドボタン1がクリックされたら
- セルA1とB1を結合する
- マクロ記録終了
このようにとても簡単で、ここではRangeを使いましたが、繰り返し処理の変数を使う時はCellsを使うので下記のようになります。
Private Sub CommandButton1_Click()
Range(Cells(1, 1), Cells(1, 2)).Merge
End Sub
今回の例は隣同士のセルを結合するVBAコードですが、もちろんA1:C1とすれば横3列を結合、A1:B2とすれば縦横4つのセルが結合できます。
UnMergeメソッドでセル解除
結合の次はセルの結合解除も重要ですが、とても簡単な事で結合時に使った「Merge」を解除の「UnMerge」に変えるだけでセルを解除できます。
Private Sub CommandButton1_Click()
Range(“A1:B1”).UnMerge
End Sub
このように簡単にVBAコードを書くことができます。
行単位で複数のセル結合・解除
1か所のセルの結合・解除を行うのならばVBAを使わないと思いますが、複数の行をまとめて一括処理で結合・解除を行わなくてはいけないのでVBAを使うと思います。
ここでは、Mergeメソッドの引数AcrossをTrueに設定することで、選択範囲のセルを行単位で結合することができるようになります。
例としてRangeを使ってセル範囲A1:B10を行単位で結合するVBAコードをご紹介します。
Private Sub CommandButton1_Click()
Range(“A1:B10”).Merge True
End Sub
- コマンドボタン1がクリックされたら
- セルA1~B1の範囲を行単位で結合する
- マクロ記録終了
これでA1とB1が結合A2とB2が結合・・・A10とB10が結合と行単位結合の完成です。
ちなみに行単位で結合したセルを結合解除する方法は、基本的なセル結合解除と一緒です。
セル結合のある表の並べ替え
セルの結合・解除を行いながらエクセルで作った表の並べ替えをVBAを使って実行する方法をご紹介します。
ここでは下の図のようにセルB2~C10を行単位で結合して点数を見やすくするVBAコードで、同時に点数の多い順に並べ替えも同時に行います。

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
ActiveSheet.Unprotect
Range(“B2:C10”).UnMerge
Range(“A2:D10”).Sort KEY1:=Range(“B1”), ORDER1:=xlDescending
Range(“B2:C10”).Merge True
ActiveSheet.Protect
Application.ScreenUpdating = True
End Sub
- コマンドボタン1がクリックされたら
- 画面の移動を停止(ちらつき防止)
- シートの保護を解除
- セル範囲B2~C10のセル結合解除する
- セル範囲A2~D10を並べ替える(最優先セルB列・大きい順)
- セル範囲B2~C10を行単位でセル結合する
- シートの保護
- 画面移動停止解除
- マクロ記述終了
ここでは、実際に使っているように画面のちらつきを防ぐVBAコードと、シートの保護・解除も付け加えています。

並べ替えエラーを防ぐためにこのような順でVBAコード記述すれば、エラーが出なくなります。
順番を間違えるとエラーになりますよ!
関連記事
-
エクセルVBAで指定範囲内のセルの値「0」を全て空欄に置き換える方法
エクセルで表を扱う時に数式エラーを防ぐ為に、空欄の代わりにIFERROR関数などで数字の「0」で代用していることありませんか? この代用している値を一瞬で空欄にできる… -
エクセルで苗字と名前2つのセルの値をくっつける(セルの値の結合)
CSVファイルなどを取り込んだ時に、苗字と名前が別々のセルに分かれていることが多いと思いますが、1つのセルに結合して表示したいと思ったことありませんか? 例えば… -
Key4は使えないけど4つ以上項目の並べ替えをVBAコードでやる方法
エクセルVBAを使ってデータの並べ替えを行うのにSortメソッドを使うのですが、4つ目の条件までの並べ替えををVBAコードを使ってやってみたら、エラーになった経験あり… -
エクセルVBAでシートの移動と同時に表のデータの並べ替えをする
成績表やデータ表などに付き物の並べ替え作業って地味に面倒だと思ったことありませんか? 優先順位をつけて並べ替える時に、同時にエクセルシートも切替出来たら作業が… -
エクセルVBAで指定した範囲の複数セルの値を一括クリアする方法
入力済みセルの値を消去することがあり、1個1個手作業で空白にするのが面倒だと思ったことはありませんか? Excel-VBAのコマンドボタンを押すことにより、指定した複数… -
VLOOKUPをVBAラベルを活用してデータ検索・修正をする方法
【ラベル(Label)にVBAコードを記述する】 ボウリング成績表でも使っているユーザーフォームに配置した文字を表示するための「ラベル(Label)」にも、実はVBAコードを… -
エクセルVBAで不要な行や列を非表示ができない時の対処方法と順番確認
データ抽出などで不要な行や列を自動的に非表示にできるExvel-VBAのHiddenプロパティですが、コードは正しく書かれているのにコマンドボタンを押すとエラーになったこと… -
エクセルVBAで氏名・名前を姓と名で自動的に分割する簡単な方法
エクセルで表などを作成していると、並べ替えや振り分けなどのデータ処理が面倒だと思ったことはありませんか? データ処理に手間をかけていると仕事の作業効率が悪くな… -
入力済み最終行を見つけて追記・削除する方法
【エクセルVBAのユーザーフォームで一発検索する】 ボウリング場のリーグ戦成績表でも使っているエクセル。 エクセルには参加者のスコアーなど様々なデータを入力します…
紅葉スポット
-
ときわ路パスで行ける茨城県人気紅葉スポット
【茨城県内の紅葉人気ランキング】 関東地方で紅葉名所といえばなんといっても日光ですが、紅葉シーズンになると平日でもいろは坂は大渋滞なのに休日ともなると日光駅周… -
竜神大吊橋の紅葉まつりへ常陸太田駅から路線バスで紅葉絶景へ
竜神大吊橋バンジーや5月の1000匹の鯉のぼりでテレビで取り上げられることが多い竜神大吊橋ですが、実はこの周辺は竜神峡にはもみじなども多く紅葉も年々認知されてきて… -
日本三名瀑・袋田の滝は紅葉ライトアップの名所で袋田駅からバス
日本三名瀑でもある袋田の滝は、高さ120m幅70mの大きさを誇りトンネル横の展望台からは、目の前に迫った滝を見ることができます。 そしてエレベーターで昇った展望台… -
栃木駅から大平山展望台へバスで陸の松島と言われる紅葉スポットへ
【紅葉見頃】11月中旬~11月下旬 太平山は蔵の街で有名な栃木市中心部にある県立自然公園で、山頂付近にある太平山展望台からの眺望は、関東平野が一望でき眼下の峰々… -
塩原温泉・紅の吊橋の紅葉絶景へ那須塩原駅や黒磯駅からバスで行く
【紅葉見頃】10月下旬~11月中旬 塩原温泉郷と言えば、箒川(ほうきがわ)沿いに温泉旅館が点在している首都圏からも近い温泉街ですが、紅葉の時期になるとカエデやも… -
十勝岳望岳台へ活火山の溶岩と山頂部の雪化粧と紅葉の三段紅葉絶景
北海道のほぼ真ん中に位置して旭岳・美瑛藤・上富良野岳などが一望でき、さらに旭川市街や富良野市街までも見ることができる絶景スポットです。 標高930mの十勝岳は9月…