エクセルでシートの比較その2
ふと回りを見渡してみると、世間ではExcel97を使っている人はほとんどいない。
というか、前回のマクロを作りはじめた時点で既に少数派以下の存在であったのだが。
で、なりゆきで最近のExcelでこのマクロを使ってみたところ動かないではないか。
いや、もともとバグっぽい所があって時々動かないこともあったのだが、今回は完全に動かない。
具体的には範囲の選択ができない。これは致命的である。
いろいろ調べた所、いまどきのExcelでは他のブックの範囲選択はできないようなのである。
作り直すのも面倒なので同等機能のマクロを探してみたのだが、ほとんどが比較マクロを走らせるためのシートとして提供されており、そのシートを開いてから比較したいシートを指定するという使い方であった。
また、シート毎の比較のため、「この範囲とこの範囲」みたいに任意の範囲を比較することができない。めったにやることではないが、一つのシートの中の異なる場所を比較するなんて機能をつけているものは見つからなかった。
しかたないのでなんとかそれっぽく動かす方法を探していたら、代替案として事前に範囲に名前をつけておいてそれを読みこむという方法が見つかったので、しぶしぶその方法でマクロを組み直してみた。
まぁ、毎日何人かは「Excel 比較」とか言うキーワードで検索してくる人がいるようなので、今時のExcelで使えるようにしておくのもいいかというサービス精神もちょっとだけ出してみたというわけだ。
ただ組み直すだけじゃなんなので、今まで不便に感じていた部分などを含めてちょっとばかり機能も増やしてみた。
新しいマクロの表示は下のような感じである。
最近やたら長いファイル名を使う人が増えたので、しかたなく表示も横長にしてしまった。なんか負けた気分である。
さて、今回の変更点を説明しよう。
まず、基本的な使い方ががらりと変わった。
今までのはマクロを起動してから比較する範囲を選択したが、新しいのは事前に比較範囲に名前をつけておく必要がある。
やり方は、比較したいExcelファイルを開き、比較したい範囲を選択してメニューの「挿入」-「名前」-「定義」でその範囲に適当な名前をつける。比較を行なうそれぞれのシートで行なっておくこと。(ちなみに新しいExcelならばマクロ起動後に範囲指定を行なうことも可能)
Sheet1、Sheet2の右側の▼をクリックすると選択範囲の一覧が出てくるのでそこから比較する範囲を選ぶ。ここには現在選択されているセルも表示されている。
あとは適当にオプションを指定してOKをクリックすると比較を行なう。
なんだか面倒な気もするが、今までのマクロだと毎回シートを開くたびに範囲選択をしていたのに対し、新しいマクロだと一度範囲名をつけておけば何回開き直してもリストから選ぶだけで済むので便利といえば便利になった。(ということにしておく)
セル一つだけの選択範囲を指定した場合には自動的に入力されているセル全体を含む四角形を選択範囲として比較するというのは今まで通りである。
ちなみに、Excel97だと下のようなエラーが出るので、その際にはこのメッセージの近くにある.Show FalseのFalseを削除してただの.Showだけにする。
最初からExcel97を使うとわかっている人はcompare.basの54行目を書き替えてから組み込むとよいだろう。
この処理を行なうことでExcel97でも使えるようになるのだが、それと引き換えにマクロ起動中に範囲指定をするということができなくなる。つまり、必ず事前に範囲名をつけておく必要があるということだ。
新しく追加された機能について説明をしよう。
ADDボタン
右上にひっそりと存在しているADDボタン。
これは現在選択されている範囲をリストに追加するボタンである。
マクロ起動後に選択範囲を追加したい場合に使用する。
Excel97の場合、前述の処理によりマクロ起動中のワークシート操作はできなくなるためにこのボタンは無意味となる。
Start
比較を開始するセルを指定する。
後述するSTOPオプションを有効に使うために追加した機能である。
複数セルからなる範囲を指定した場合、左上のセルを開始セルとする。
指定しなかった場合は自動的に比較範囲の左上が開始位置となる。
マクロを起動する前に比較範囲に名前をつけておき、比較開始セルを選択した状態にしておけばリストから選ぶだけとなるのでちょっとだけ不便さが解消できる。
色
チェックを入れることでセルの色を比較対象とする。
もともとが異なっているセルに色をつけるという目的で作ったセルに色づけされていないのを前提としたマクロなのに、セルの色を比較するというのはなんとも矛盾した機能なのだが、STOP機能が追加されたので色の比較もあっていいかと思ってつけてみた。
色の違いなんて一目でわかるから無くてもいいという気もするが、モノはついでということで。なにしろ実現するのが簡単なのだ。
STOP
これが今回の目玉といってもいいだろう。
前のマクロでも自分で使っているのは改造してこの機能を組み込んでいたのだが、いまいち使い勝手が悪かった。
今回、比較開始位置が指定できるようになったのでやっと人様に公開できる運びとなったのである。
どういう機能かというと、ここにチェックが入っていた場合、セルの違いが見つかったら色づけをせずにそのセルで処理を停止するという機能である。
今までのマクロを使っていて一気に比較して色づけをしても、結局異なっているセルを一つずつ追いかけていくことになるのでいっそのこと色づけせずに異なっているセルに来たら止まるようにした方が便利という結論になったのである。
ただ、今までのマクロだと比較開始位置が指定できなかったために毎回比較範囲を設定し直さないといけなかったので、かなり面倒なために実用的でなかったのだ。
そんなわけで、デフォルト設定が色づけではなくSTOPになっている。
行方向
ここにチェックが入っていると、比較方向が行方向となる。
例えばA1のセルを比較したら次はB1のセルを比較し、右端まで行ったらA2のセルに来るのである。
チェックをはずすとA1の次がA2というように縦方向に比較していく。
これもSTOP機能とSTART機能をより有効に使えるようにするためにつけた機能。
人によっては縦方向に比較していきたいと思う人もいるだろう。そんな人が横方向限定でSTOP機能を使うと違和感を覚えるはずである。
というか、これもそんなに実現は難しくなかったのでついでにつけた機能だいうのが真実である。
NEXT
これもSTOP機能を有効に使うためのおまけである。
セルを比較してきて異なっている所で止まったとする。ところがそのセルは異なっていてもいいということがわかりきっている場合、いちいち開始位置を指定することなく次のセルから比較を開始したくなるというのが人情である。
やっていることは自動的に次のセル(行方向なら右、列方向なら下)を開始位置にセットしているだけである。
最近のExcelであればマクロ実行中でも隣のセルを選択してADDボタンでそのセルをリストに追加して開始位置として選択すればいいのだが、その作業を1ボタンでできるのであればそれに越したことはない。
Excel97の場合はいちいちマクロを終了してセルを選択しなおすという手間が増えるので結構致命的。
そんな訳でちょっとだけ便利機能をおまけした。
こうしてみると、結構おまけタップリのマクロでお得感倍増(当社比)なのだが、バグがないとはいいきれないのでその辺は覚悟して使ってほしい。
なにしろソフトに関しては素人なうえに充分なチェックをしていないのだから。
ちなみに、今回も「なんか不便だなぁ」とか「動きが怪しいなぁ」と思った人は自分で修正するよーに(笑)。と釘をさしておく。
もちろんバグの報告があった場合、なんとかできるものならなんとかするつもりではある。
というか、だれかもっときれいに作り直してくれないものだろうか。
ということで、ここまで我慢して読んでくれた人にこのマクロをプレゼント。
ちなみにバージョン番号がついているということは、バージョンアップするかもしれない=バグがあるらしいという意味なので、あまり期待しないように。
変更履歴
2005/12/22 Ver.2.00
2006/03/13 Ver.2.01
- セルの中の文字数が多い場合にエラーが出るのでステータスバーにセルの内容を表示するのをやめてメッセージボックスに変更した。
- ついでに経過状況もステータスバーではなくダイアログ内に表示するようにした。
2006/04/03 Ver.2.02
- 異なるブック間の比較ができていないという大バグを修正したつもり。
- 経過状況をダイアログ内に表示するようにしたつもりが表示されていないのに気付いたけどなおし方がわからないので放置。
表紙へ