レシピ
OS:Windows
使用言語:Excel/VBA(Excel 2003で検証していますが2000でも動くでしょう)

 皆さん,はじめまして。筆者の園田でございます。前バージョン「かんたん10分プログラミング」から内部的に30以上のバグをfixし,Rev1.02(1.01は非公開テスト版)として再登場しました。前連載をお読みの方も,あらためてよろしくお願い致します。


リスト1●Webサイトへのアクセス日時/回数の統計をとるプログラム(Excel/VBA)のソースコード
[画像のクリックで拡大表示]

図1●Excelで「URL」「最終アクセス日時」「アクセス回数」を表示するシートを作る
[画像のクリックで拡大表示]

 「かんたん10分プログラミング Rev1.02」はその名の通り,10分程度で組める小さな,しかしそれなりに使えて機能拡張もできるサンプル・プログラムをご紹介いていこうという連載です。言語は何でも扱います。今回はExcel/VBAですが,次回はJavaかもしれません。小さなサンプルなので,未知の言語の回にあたったら,その言語をつまみ食いする程度の軽い気持ちでお付き合いください。

 では第1回目のサンプルです。インターネット利用が日常化してくると,ブラウザのブックマーク(「お気に入り」)も日々溜まっていきます。「あとで見よう」と軽い気持ちでブックマークを追加しているうちに,お気に入りのサイトのリストが画面からはみ出してしまったり,フォルダの下にまたフォルダを作ったり…の繰り返しで,奥のほうに入り込んだサイト名にたどり着くだけでも大変になってきます。ましてやそこでついサイトそのものを見てしまうと,整理のつもりだったのに,消すのは惜しくなるは,その先のリンクまでブックマークしてしまうはで,さらにブックマークを広げてしまうという悪循環。

 そこで今回は,Microsoft Excelを使い,本当に「お気に入り」が役に立っているのかをVBAで統計をとってみましょうというサンプルを用意しました(リスト1[拡大表示])。リスト1のプログラムを,ExcelのSheet1に貼り付けてください。サンプル・プログラムは,A列と1行目を空にしたSheet1にデータがあるという前提で作っています。

 図1[拡大表示]のような簡単なシートを作ります。項目は「URL」「最終アクセス日時」「アクセス回数」の三つです。URL欄にURLを記入していくとExcel側で勝手にハイパーリンクしてくれます。最終アクセス日時とアクセス回数は空欄でかまいません。ここはプログラムが勝手に記入していってくれます。

リスト1●Webサイトへのアクセス日時/回数の統計をとるプログラム(Excel/VBA)のソースコード
Private Sub Worksheet_Activate()

 'データが入っている行数を取得
 MR = ThisWorkbook.ActiveSheet.UsedRange.Rows.Count


 For i = 3 To 2 + MR
  '日数単位で本日と最終アクセス日を比較
  DD = DateDiff("d", Cells(i, 3), Now)
   If DD > 10 Then
    ThisWorkbook.ActiveSheet.Cells(i, 3).Font.Color = RGB(255, 0, 0)
   End If
  Next
End Sub

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)

 Dim SR, SC

 SR = Selection.Row
 SC = Selection.Column

 ThisWorkbook.ActiveSheet.Cells(SR, SC + 1) = Now
 ThisWorkbook.ActiveSheet.Cells(SR, SC + 1).Font.Color = RGB(0, 0, 0)

 ThisWorkbook.ActiveSheet.Cells(SR, SC + 2) = _
 ThisWorkbook.ActiveSheet.Cells(SR, SC + 2) + 1

 Worksheets("Sheet1").Cells(SR, SC + 1).Sort _
  Key1:=ActiveSheet.Columns(SC + 1), _
  Order1:=xlDescending, _
  Header:=xlGuess

 'アクセス回数でソートするなら
' Worksheets("Sheet1").Cells(SR, SC + 2).Sort _
' Key1:=ActiveSheet.Columns(SC + 2), _
' Order1:=xlDescending, _
' Header:=xlGuess

End Sub

 これらのハイパーリンクをクリックすると,Worksheet_FollowHyperlinkというイベントが発生します。Excel/VBAでこのイベントを処理し,URLを開いたタイミングで最終アクセス日時(現在日時)と,アクセス回数を1プラスして記録します。このプログラムでは最終アクセス日時とアクセス回数を書き出すときに,最終アクセス日時を使ってデータのソートを行います。最近見たサイトほど上に,しばらく見ていないサイトは下がります。これで頻繁に見ているサイトと,そうでもないサイトが視覚的にわかるようになります。アクセス日時ではなく,アクセス回数でソートしたい場合は,ソート処理のところをコメントアウトされているものと入れ替えてください。

10日間アクセスしなければ,いらないと判断する

 最終アクセス日時順にソートしただけでも,見ている/見ていないがハッキリしてきますが,それだけでは面白くないので,10日間以上見ていないURLについては最終アクセス日時を赤く表示してみることにしました(カラーでお見せできないのが残念)。10日間経過という期限を付けて赤い文字にする処理は,シートを開いた瞬間(Worksheet_Activateイベント)に行うことにします。使用されているセル領域を取得して,最終アクセス日時の列を順に読み,DateDiff関数で現在日時との差を求めます。DD = DateDiff("d", Cells(i, 3), Now)の“d”の部分で日差を取得し,If DD > 10 Thenというところで「日差10以上」という判断をしています。デバッグ時には“d”を“n”にしておくと分差で取れますので,3分や10分で本当に項目が赤文字になるかどうかを確認できます。敷居値は自由に変更してください。

 これで最終アクセス日時と回数,さらに一定日数以上アクセスしていないことが色による区別でハッキリします。一カ月の間で一度も見ていないページというのは,たぶん半年経ってもまず見ることはありません。惜しいと残しておかないで,いっそ思い切って削除しましょう。まして最終アクセス日が空欄のままのURLにいたっては,なぜそこに残っているのかに首をかしげるばかりです。

 実はこの仕組みはURLだけでなく,メールアドレスでも利用できます。URL欄にメールアドレスを記入しておくと,クリックしたときにメールソフト(Officeが入っていればMicrosoft Outlook)が起動しますが,この場合にもWorksheet_FollowHyperlinkイベントが発生します。WebデザイナやWebプログラマが過去に請け負った案件の記録管理にも利用できます。社内で共有すると保守として最後に見たのはいつだったのかの記録にも使えます。共有した場合にはユーザー名も記録しておくと,最後に見たのは誰だったのかまで残しておけるので「いや私は見てません」とか「ちゃんと見て確認してますよ」という嘘も通じなくなります。

 実際にお気に入りの整理に利用するのであれば,IEのお気に入りを自動で取り込むような仕組みも実装できていると便利ですね。ただしこの処理は最初の一回目のみに実行する,あるいは任意のタイミングでたまに実行する関数で組む必要があり(毎回取り込むとせっかくの日時や回数記録が無意味になります),やや“死に関数”的になります。もっとも,URLをシートに打ち込んでいる間に,不要なものは整理が終わるという説もありますけどね。