えくせるちゅんちゅん

ことりがエクセルをちゅんちゅんするブログ

Excelのセル結合禁止アドインを作ってみた

~快適なExcel生活のためには手段を選んでいられません~

今日はExcelのセル結合を禁止するアドインを作ってみました。

これを導入すれば、あらゆるブックからセル結合を完全に駆逐できます!

もう二度とセル結合に苦しめられることはありません!

さぁ皆も一緒に 結・合・禁・止 \(^o^)/


きっかけ

という「ふと」した一言から始まりました、セル結合禁止アドイン開発プロジェクト。


昨今、Excelのセルの結合がデータ集計に支障をきたしているということで問題となっています。

なんでセル結合が悪なのかは・・・他所を御覧ください。


機能説明

  • アドインとしてエクセルの裏で常駐できます。
  • 必要なときだけ実行してチェックさせるということも可能です。←ただし終了できません
  • あらゆるエクセルブックを上書き保存した時に、セルの結合を探し出し改善を促します。
  • 効率的にセルの結合を取り除くために、結合されたセルの一覧を表示し、ジャンプ&ハイライトすることができます!
  • 文章をよく読んで全ての質問に対して正しい選択を選ばないと保存できないので、あまりの鬱陶しさにセル結合を解除せざるを得ないという仕様です。👿←要改善

なお、現時点では、セル結合を一つたりとも認めないポンコツ仕様となっています。

永久に上書き保存できません。


ダウンロード

まだ人にお見せ出来るソースコードではありませんが、一応公開しておきます。

どうやって実装しているのか気になる開発者さんだけが御覧ください。

ただし

現時点では「終了」コマンドを用意していないので、エクセルを閉じるまでセル結合の検知が止まりません

開発者さんなら下記の方法で止めることも出来ます。

  • セル結合禁止アドイン.xlamプロジェクトがアクティブのときに、VBEの「リセット」ボタンを押す

  • イミディエイトウィンドウにて、下記のコマンドを実行する

ThisWorkbook.Close False

リセットで一度止めてしまったものを再開したい場合は、MergeBlockerStart()を実行してください。

https://github.com/kotori-chun/MergeCellBlocker/raw/master/bin/%E3%82%BB%E3%83%AB%E7%B5%90%E5%90%88%E7%A6%81%E6%AD%A2%E3%82%A2%E3%83%89%E3%82%A4%E3%83%B3.xlam

※ファイルのプロパティより、「許可する」にチェックを入れないと開けない場合があるようです。


ソースコード

ソースコード全文は、https://github.com/kotori-chun/MergeCellBlocker で公開していますので、こちらを参照願います。

概要

開発にあたっての重要なプログラムなど


別のブックのイベントをフックする仕組み

通常、シート上のイベントはシートモジュールへ、ブック上のイベントはThisWorkbookモジュールへ記載します。

しかし、他のブックのイベントはフックできません。

クラスモジュールにて、下記のようなプログラムを書くことでアプリケーションレベルのイベントフックが可能となります。

Private WithEvents App As Excel.Application

上書き保存の検知

Private Sub App_WorkbookBeforeSave(ByVal wb As Workbook, ByVal SaveAsUI As Boolean, Cancel As Boolean)

シートの選択セルの変更の検知

Private Sub App_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

に使っています。


ウィンドウを並べて表示するプロシージャ

通常、エクセルのウィンドウを整列するプログラムは下記の一行で十分です。

Windows.Arrange ArrangeStyle:=arrange_style

しかし、この構文には多くの課題があります。

  • 全てのウィンドウが対象となってしまう
  • マルチディスプレイ環境において、それぞれのディスプレイで整列が行われる


実用性を考えると「2つ以上の任意のウィンドウを同じデスクトップで整列したい」です。

そこで、以下のようなプロシージャを作りました。

Sub ExcelWindowArrange(targets, arrange_style As XlOrientation)

以下のような流れで実現しています。 * 無関係なウィンドウを非表示にして整列されないようにする  * 整列対象の2番目以降のウィンドウを1番目と同じデスクトップへ移動 * 並べて表示を実行する * 非表示にしておいたウィンドウを再表示 する * 整列対象のウィンドウを前面へ移動させ、1番目のウィンドウを最前面にする

詳しい解説記事を書きました。

www.excel-chunchun.com


今後の予定

まだまだ改善の余地があります。

  • メッセージボックスをもっと大きく派手にしたい
  • メッセージの内容をカスタマイズできるようにしたい
  • セルのハイライトをもっと派手に強調したい
  • 多少の結合を見逃すための仕組みを考えたい
  • 結合されたセルを1つづつ選択して改善を促すようにしたい


まとめ

このアドインを会社の全てのPCに導入し、セルの結合を世界から無くしましょう(笑)

アドインを常駐させる方法は・・・ググってください。

※真面目な話、問題ないセル結合も見逃さないポンコツなので、

まだ本格導入はしないでくださいね?

常駐させたアドインの削除方法も・・・ググってください。


反応が良さそうなので、実用化に向けて改良していきます。

今後とも宜しくお願いいたします。


www.excel-chunchun.com

www.excel-chunchun.com


以上


何か御座いましたらコメント欄、またはTwitterからどうぞ♪

それではまた来週♪ ちゅんちゅん(・8・)