エクセルの表を印刷するには見栄えの為にセルの結合を行ったら、並べ替えをするとエラーになって困ったことありませんか?
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で複数セルを一括で結合・解除を繰り返し処理する方法
エクセルの表を印刷するには見栄えの為にセルの結合を行ったら、並べ替えをするとエラーになって困ったことありませんか? Mergeメソッドを書き加えれば、自動的にセル… -
データの操作
エクセルVBAでシートの移動と同時に表のデータの並べ替えをする
成績表やデータ表などに付き物の並べ替え作業って地味に面倒だと思ったことありませんか? 優先順位をつけて並べ替える時に、同時にエクセルシートも切替出来たら作業が… -
データの操作
エクセルVBAで氏名・名前を姓と名で自動的に分割する簡単な方法
エクセルで表などを作成していると、並べ替えや振り分けなどのデータ処理が面倒だと思ったことはありませんか? データ処理に手間をかけていると仕事の作業効率が悪くな… -
データの操作
エクセル関数とVBAを組み合わせて商品期限切れ通知を表示する方法
小さな会社や個人では、アプリや専用ソフトを使って商品管理とかはコストが見合わず、エクセルで商品管理していませんか? このエクセルによる商品管理でリストの中にあ… -
セルの操作
エクセルで苗字と名前2つのセルの値をくっつける(セルの値の結合)
CSVファイルなどを取り込んだ時に、苗字と名前が別々のセルに分かれていることが多いと思いますが、1つのセルに結合して表示したいと思ったことありませんか? 例えば… -
データの操作
エクセルVBAで不要な行や列を非表示ができない時の対処方法と順番確認
データ抽出などで不要な行や列を自動的に非表示にできるExvel-VBAのHiddenプロパティですが、コードは正しく書かれているのにコマンドボタンを押すとエラーになったこと… -
セルの操作
複数のセルの値を別のセルにコピーする
【VLOOKUPでは数式の値は検索不能?】 ボウリングのリーグ戦の成績表をエクセルで作っていて、リーグ戦では一般的に初回はレーン抽選によって対戦相手が決まり、2週目以… -
セルの操作
エクセルVBAでリストの中から不要な行や列を非表示にする方法
小さなお店ではスタッフのシフト表をエクセルで管理している事が多いと思いますが、時間別出勤リストを表示させるときにお休みの人は非表示にして見やすくしたいと思い… -
セルの操作
入力済み最終行を見つけて追記・削除する方法
【エクセルVBAのユーザーフォームで一発検索する】 ボウリング場のリーグ戦成績表でも使っているエクセル。 エクセルには参加者のスコアーなど様々なデータを入力します…
紅葉スポット
-
白いアーチ橋の六方沢橋と紅葉へ日光駅からバスで滞在時間20分
霧降高原にある六方沢橋バス停から歩道を300mほど歩くと六方沢橋に行くことができ紅葉絶景が眼下に広がり、さらに400m歩いた六方沢展望台では遠くのダム湖や今市市街を… -
日光駅から避暑地で紅葉名所の日光三名瀑の霧降の滝へバスで滞在時間30分
【紅葉見頃】10月下旬~11月上旬 日光三名瀑「華厳の滝」「裏見の滝」「霧降の滝」といわれ、年間を通じて観光に訪れる人が多い近畿スポットで、夏は避暑地として秋は… -
群馬甘楽町の紅葉山公園へのバスが廃止でも1回500円の愛タク利用へ
【紅葉見頃】11月上旬~11月中旬 富岡市のコミュニティーバスが2020年で廃止になり利用しづらくなりましたが、代わりに2021年から登場したデマンドタクシーがあるので… -
日本庭園「松雲山荘」へ柏崎駅から徒歩圏内の大正時代からの紅葉名所
紅葉見頃 10月下旬~11月下旬 約3,000本つつじやもみじなどで大正時代に作られた日本庭園で、柏崎ガス創設者の飯塚謙三氏から柏崎市に移譲され無料で庭園内を散策でき… -
復元された平家の里へ平清盛像や茅葺屋根と水の郷で温泉と紅葉コラボ
【紅葉見頃】10月中旬~11月中旬 日光市の北部で鬼怒川温泉のさらに奥地にある湯西川温泉には平家落人伝説があり、秘話・伝説などが現代に伝える役目を果たすために「… -
茨城県内の11月に見頃を迎えるおススメ紅葉スポット11選
【茨城県内の人気紅葉スポット】 関東地方で紅葉名所といえばなんといっても日光ですが、紅葉シーズンになると平日でもいろは坂は大渋滞なのに休日ともなると日光駅周辺…