【VBA】1行マクロ【セル結合解除】

こういう、セル結合をバリバリした表があったとします。

この状態だと何が困るかというと、フィルタをしてもデータが抽出できないです
フィルタをかけても必要なデータが抽出できない例。㈱あ120期生でフィルタをかけたところ、本当は3人抽出されてほしいのに、1行しか抽出されないです。

し、コピーも貼り付けもしづらく、

セル結合した行をコピーしても満足に値が貼りつかない事例

・・・とまあ、こんな風に、セル結合はいいことがないです。

そこで、セル結合を解除してフィルタで値を抽出できるようにしようと思います。

そのときに使う1行マクロを紹介します。

まずはマクロの記録

最初に、マクロの記録をします。

ショートカットにmを入れる

コードを整理する

マクロの記録が終わったら、Alt+F11を押してVBE(Visual Basic for Application Editor)を開きます。

VBEを開いた状態

このコードの説明を軽くしておきます。

コードの説明

プロパティとメソッドの違いについて

プロパティというのは静的な属性のことです。

メソッドというのは動的な動作のことです。

セル結合を解除するには二つの方法が用意されています。

セルのプロパティにあるMergeCellsという属性をFalseにするか、セルを選択した状態でUnMergeメソッドを実行するかです。

マクロの記録では両方が記録されてしまっていますが、どちらか片方だけあればOKです。

「なんで両方とも記録されるんだ?」という質問はしないでください。私には分かりません。Microsoft社がそういう風に設計したとしか・・・。

WithとEnd Withについて

Withというのはオブジェクトをまとめて指定できるステートメントです。ステートメントというのは文のことです。あまり気にしなくていいです。

上記の例で言えば、

Selecgtion.HorizontalAlignment = xlGeneral
Selecgtion.VerticalAlignment = xlCenter
Selecgtion.WrapText = True
Selecgtion.Orientation = 0
Selecgtion.AddIndent = False
Selecgtion.IndentLevel = 0
Selecgtion.ShrinkToFit = False
Selecgtion.ReadingOrder = xlContext
Selecgtion.MergeCells = False

という風に、すべてSelectionを省略せずに書くこともできます。

しかし、これだと何度も同じ言葉が出てきて冗長です。そこで、Withから始まってEnd Withで終わるところまでは、Withで指定したオブジェクトを.(ピリオド)の前で省略して使うことができるようにするのが、With~End Withです。

整理したココード

整理した後のコード

コードを整理すると、↑このようになります。

セル結合解除はMergeCellsプロパティを使って解除することにしました。

FillDownとEnd(xlDown).SelectのメソッドにはSelectionが先頭についていましたが、Withの中に入れてしまえばよかろうと思い、そうしました。

マクロの実行

ワークシートに戻ってマクロを実行します。

セルB10でCtrl+mでマクロを実行したところ

1回ずつ確認しながら実行できるのが1行マクロの良いところです。

テンポよくマクロを実行していきます。

最後までマクロ実行したところ

最後の742行目まで、ほぼ1分かかりませんでした。

別の列でも使える

となりの列でもマクロを実行してみたところ

同様に、隣の列でもセル結合を使っているようなので、マクロを使って解除していきます。

これにより、別にFor文とかIf文とかつかった繰り返しのプログラムを作らなくても、十分作業効率をアップできると思います。

まとめ

以上、一行マクロのセル結合解除の仕方を紹介しました。

お役所ではいまだにセル結合をびしばし使っているのでしょうか。

印刷することを宿命づけられた職場では仕方がありませんが、はなはだしく生産性を下げますよね。

なお、作ったマクロはサクッと削除してください。

いつでもまた作れますから。

残しておくと、マクロを知らない人には「ウィルス!?」と思われて、いいことないです。あと、ファイル名が変わってしまう(拡張子がxlsxからxlsmとなるので、xlsmを知らない人から見ると、「これは何!?」と混乱を招くことになります)ので、保存はしないでください。マクロを知っていることを披露したくて残しておいても、マクロなんて属人化するものであり生産性を下げるという価値観もあるので、やっぱりいいことないです(経験談)。

何かのお役に立てば幸いです。

ここまでお読みくださりありがとうございました。