【コラム】
10月28日に、「オープンソースカンファレンス2006 Tokyo/Fall」へ出展しました。今回は、「なでしこ」の出展も行ったのですが、特にWeb開発環境「葵」を前面に出しました。
「葵」は、いま私が力を入れて開発をしているソフトで、なでしこのような日本語プログラミング言語を用いて、掲示板やWikiなどを作ることができます。今回も、いろいろな人が見に来てくださって、意見交換を行うことができました。そしてイベント後に、なでしこユーザーの方々とささやかな食事会を開きまして、なでしこの今後の活動についても話し合うことができました。
フリーソフトを作っていたり、オープンソースで開発していると、なかなか自分の開発成果をじかに発表する場所がないのですが、オープンソースカンファレンスは開発者とユーザーを結ぶ素晴らしい祭典です。終わったばかりですが、次が待ち遠しいなぁと思うのでした。
さて、今回は2つのExcelシートの内容を比較するプログラムを作ってみます。
Excelには、セルの変更履歴を記録する機能がついていますが、これを利用するためには、対象のブックに対して「共有」の設定を行わなければなりません。
ですので、通常、自分の作った住所録を誰かが編集した場合、どこが編集されたのかを探すのは容易なことではありません。どこが変わったのか、いちいち2つシートを開いて見比べていくのは、とても大変です。
そこで、セルの内容を比較する簡単なプログラムを作れば、見比べていく必要がなく、瞬時に変更点を見つけることができます。
では、どうすれば、Excelシートの内容を比較できるのか少し考えてみましょう。
一番初めに思いつくのはこんな方法でしょうか。箇条書きにしてみます。
これは、私たちが手作業で行う方法と同じかもしれません。今回10行で作るプログラムでも、この方法で比較することにします。
他にも、テキスト比較ツールを利用してExcelの内容を比較する方法があります。世の中には、テキストの比較ツールが多く存在しています。有名なものでは、UNIXに標準で用意されているコマンドのDIFFや、Windows 2000以上で用意されているFCコマンド、また、テキストエディタなどにも、比較ツールが用意されていることもあります。
しかし、Excelのファイルはテキストファイルではないので、そのままでは比較することができません。そこで、テキスト比較ツールが使えるように、一度CSVファイルなどの形式で保存しておいて、CSVファイル同士を比較します。
せっかくなので、Windows標準の比較ツールFCでファイルの内容を比較する方法を詳しく書いてみます。例えば、Excelの文書「a.xls」と「b.xls」の内容を比較してみます。
![]() |
|
違っている行付近が表示されます |
これを実行すると、違っているセル近辺の情報が行番号と共に示されます。
FCコマンドに関しては、本連載の64回目で、なでしこによるフロントエンドを作成していますので、そちらも参考にしてください。
今回作る10行プログラムでは、なでしこでExcelを起動させ、比較したい2つのExcel文書を開き、そのセルを1つずつ順に確認していくという方法を取りますので、なでしこから、Excelを操作する方法をいくつか見ていきたいと思います。
なでしこでExcelを起動するのは簡単です。一行、「エクセル起動」と書くだけです。そして、エクセルファイルを開くのも、「(ファイル名)をエクセル開く」と書くだけです。
そして、Excelのセルの内容を一括で取得するには、「(左上セル)から(右下セル)までエクセル一括取得」と書きます。こう書くと、なでしこの二次元配列形式でセルの内容を一括で取得できます。
以下は、ExcelファイルのセルA1からB50の範囲の内容を取得して画面に表示する例です。
次に、今回は、Excelシートの内容を比較して、相違点があれば、シートを赤色にマーキングするということをしたいのです。それで、セルに色を付ける方法も見ておきましょう。
セルに色をつけるには、はじめに、「エクセル選択」命令を使って、着色したい範囲を選択します。そして、「エクセル着色」命令で選択範囲のセルに色をつけます。
以下は、セルに色を塗る例です。
選択しておいてから、色を付けるという手順なので、少し使い方に戸惑うかもしれません。
それでは、改めて10行プログラムの内容を箇条書きで確認しておきましょう。
セルを1つずつ取得して比較することもできますが、初めに比較したい範囲を取得しておいて、後から比較した方が実行速度が速くなりますので、この方法で作ってみました。
ここでは、Excelのファイル「a.xls」と「b.xls」を比較するプログラムを作りました。実際に動かしてみるには、以下の10行プログラムと同じフォルダに比較したいファイルを、「a.xls」と「b.xls」という名前でコピーしておきます。
1行目では、Excelを起動します。2行目では、比較元となるExcelファイル「a.xls」を開き、3行目で比較したい範囲を取得して、変数「見本セル」に代入します。
4~5行目では、比較するExcelファイル「b.xls」を開き、比較範囲を取得して、変数「比較セル」に代入しておきます。
6行目、7行目では、セルの内容を1つずつ繰り返し比較するように「繰り返す」構文を使います。繰り返す範囲は、それぞれ、字下げ(インデント)している範囲です。
8行目では、「もし」構文でセルの内容を比較しています。もし、セルの内容が違うなら、9行目以降を実行します。
9行目では、比較したセルを選択しています。セルの選択は、「A6」(A列6行目)とか「C4」(C列4行目)のようなExcel固有の形式で指定しなければならないので、ここでは、列番号を「CHR」関数を使ってエクセル形式に変換してから、セルを選択しています。
10行目では、9行目で選択したセルを赤色で塗りつぶします。
![]() |
|
Excelシートの内容を比較し、違う部分を赤くマーキングします |
改造のヒントですが、まず、ここでは、「a.xls」と「b.xls」とExcelファイルの名前を固定にしてしまってますので、「ファイル選択」命令などを利用して、比較するファイルを選択できるように改造してみると、汎用的に使えるツールになると思います。
また、比較の範囲も、ここでは、「A1」から「B50」と非常に限られた範囲しか範囲にしていませんので、範囲も任意の大きさに広げてみてください。
これだけ変更するだけでも、ぐっと使いやすくなると思います。また、冒頭で紹介したFCを利用したテキスト比較も、なでしこを利用することにより、バッチファイルを書いたりしなくてもフロントエンドを作ることが出来ると思います。
Excel文書の比較は、ちょっとした折に便利に使えると思いますので、ぜひ、使いやすく改造してみてください!
| Evernote、リマインダー機能を追加 - Mac、iOS、Web版で利用可能 [21:30 5/24] |
| 【レポート】写真の印刷と共有の楽しさを再実感 - LGのモバイルフォトプリンタ「Pocket Photo」発表会 [21:29 5/24] |
| 富士通、直販サイト「WEB MART」で「ボーナスセール」 - PCが最大24%割引 [20:16 5/24] |
| ディラック、Celeron 1007Uをオンボードで搭載したMini-ITXマザーボード [20:13 5/24] |
| 上海問屋、7つの充電ポートを装備したUSB-ACチャージャーなど3種 [20:08 5/24] |
|
ニコニコ静画×月刊アクションのコラボサイトがオープン、描き下ろし作品など無料掲載 [23:00 5/24] ホビー |
|
「ローゼンメイデン」8人目のドールをゴスロリ誌で募集 [22:35 5/24] ホビー |
|
戦場ヶ原ひたぎのねんどろいど同梱『化物語』PremiumアイテムBOXが限定発売 [22:30 5/24] ホビー |
|
[JUJU]グッチの「音楽基金」大使に就任 会見で「Take Five」を初披露 [22:12 5/24] ホビー |
|
椋蔵の漫画TIMES新連載「アクトレスアクト」は男の娘もの [22:10 5/24] ホビー |