Visual BASICおよびExcel VBAで
簡単なオリジナルソフトを作ろう

私は日曜プログラマー。ソフトは手作りが一番!自分に合っ
たかゆい所に手が届くツールは自分で作ろうと思います。
ここで紹介するのはEXCELのVBAを使ったプログラムです。
時間的余裕が無いけど1ステップずつ作って行きましょう!
これもDIYのテーマです。

CONTENTS
§EXCELのVBAで画像ファイル管理ソフトを作る!
  (ステップ1) ファイル名呼び出しプログラム
  (ステップ2) ファイル名一括変換プログラム
  (ステップ3) 画像一覧表示プログラム

§EXCEL掲示板で見た内容を実践する!
  (その1) セルA1に数値を入力するとB1に加算されていくVBA

§Visual BASICで作った便利ツール(フリーソフト集)
  (No1)[Ace-Window] Version1.1にアップしました。(2002.5.11更新)
      どんなウィンドウも常に手前に表示させられるツール
      窓の杜ニュース/Vector/ASCII に掲載されました。
      月刊誌Windows100%(2002年5月号)に掲載されました。

  (No2)[Ace-Clip] Version1.1にアップしました。(2002.5.10更新)
      いつでもささっと全角/半角/大文字/小文字/ひらがな/カタカナの変換ができる
      クリップボード拡張ツール
      Vector/ASCII に掲載されました。
      月刊誌Windows100%(2002年5月号)に掲載されました。


§CCD(CATIA CADAM Drafting)用マクロが作りたい!!!
  (詳細)IUEの資料不足で今回はWindowsAPIを利用した外部マクロを製作しました。
      CCDユーザの方、情報交換しませんか?
  (No1)[CCD Erase Detail]
      未使用の子図をボタン一つで削除します。
  (No2)[CCD HotKey]  Version1.2にアップしました。(2002.4.23更新)
      キーボードによるファンクションの切換を実現します。




メインページへ戻る


(ステップ1) ファイル名呼び出しプログラム
デジカメで撮った写真は大抵メーカの決めた記号と連番のファイル名ですよね。整理分類していくうちにどうしても同じファイル名が出てきます。これを回避するには独自のファイル名に変更しなくてはなりません。
1個ずつ名前の変更をしていたのでは、大変です。フリーウェア等で一括りネーム出来るソフトもありますが、置換ファイル名の設定などでどうしてもかゆい所に手が届きません。そこで自分で作ろうと思うのですが、Visual BASICでプロジェクトを作成するよりもEXCELで作ってしまった方が楽なのではないかと思いつきました。
EXCELに搭載されたVBAはVB製品版に劣らず大抵何でもこなせてしまいます。実行もコンパイル不要でEXCEL環境があれば出来ますので、DIYには良いツールだと思います。
弱点はEXCELのVBAはインタープリタなので実行速度がかなり遅いです。でも重くないプログラムなら・・・そこそこ使えるはずです。

今回はファイル名一覧を表示する所までしか完成していませんが、EXCELのスマートフィル機能を使う前提ならばリネームプログラムの簡易版の仕上がりまではあと半歩と言う所でしょう。
ただ次に進むと必ずエラー処理の問題に突き当たりますので、今回はここまでです。

プログラムコードの表示

(2001.6.3)

(ステップ2) ファイル名一括変換プログラム
前回はEXCEL上でファイル名の一覧を取得するマクロを作りました。Windows標準のエクスプローラにはファイル名をテキストデータとして取り出す機能がありませんので、これだけでも少しは使える場面が出てきます。

さて今回は抽出したファイル名一覧を一気にリネームしてみます。
やはり標準のエクスプローラでは数十数十百のファイルのリネームはきつい物があります。
リネームするファイル名は予め隣のセルなどに記載してある必要があります。これはEXCELのスマートフィル機能を使ってマウスでドラックすれば、いとも簡単に関数や連番のファイル名を生成する事が出来るでしょう。

今はとりあえずの状態です。例えば変換しようとした名前が既に存在しているとエラーが発生します。
これらエラー処理は今後上手く対処するように作り変えます。
では、また次回!

プログラムコードの表示

サンプルプログラムのダウンロード

(2001.6.29)

(ステップ3) 画像一覧表示プログラム
前回はEXCEL上でファイル名の一括変換をするマクロを作りました。まだエラー処理等の問題が残っており完成には至っていませんが、使い方を心得ていれば日常使用できます。エラー処理に関してはステップ4で行う事として・・・今回は別の部分を先に作ります。

さて今回は抽出したファイル名を元に画像の一覧をワークシートに表示させ印刷してみます。
実は仕事上デジカメで撮った写真をレポートにまとめる作業があり急遽作りました。今回は数枚の写真だったのでメモリ不足にはならなかったですが、プライベートの写真の方は既に1000枚を超えており、このマクロではメモリ不足で暴走が目に見えています。
あくまで少量の写真である事と、700MHz以上の早いマシンでの利用と言う事で簡易版として作成しました。

始めに”ファイル名検索”のシートで写真の格納されているファルダからファイルリストを取得します。ソートするなり要らない物を切り捨てるなどして、読み込む写真を12枚以下くらいに区切ります。
次に”ファイル名リスト”のシートにファイル名とフォルダ名をコピーします。(手動です。)このサンプルVBAではこのリストの先頭から画像を読み込んでいき、空白行があるとストップします。
写真はワークシート”写真一覧”に表示されますので、このシートを印刷すれば良いでしょう。
横の枚数や画像配置の間隔はセル上の設定情報を書き換える事で変更出来ます。しかし写真の縮小率は今のところVBAの中身を変更するようになっています。
今はちょうど200万画素クラスのデジカメ画像にちょうど良い設定だと思います。
次々と実行するとメモリ不足は必至ですので、写真をクリアするマクロも作りました。

プログラムコードの表示

サンプルプログラムのダウンロード

(2001.7.9)

EXCEL掲示板で見た内容を実践する!

(その1) セルA1に数値を入力するとB1に加算されていくVBA
”絵でわかるエクセル図鑑”というメールマガジンを購読しているのですが、EXCELでこんな事も出来たのか!と驚かされる事がいっぱいです。その主宰の掲示板に載っていた話題なのですが・・・

> > 簡単な例で説明させていただきます。
> > セルA1に数値を1から10まで次々入力すると、セルA2にセルA1に入力された
> > 数値の累計55が表示されるようにしたいのですが、何か良い方法があるでしょうか
> > 関数とか使ってできる方法があれば、ぜひお教え下さい。よろしくお願い致します。
>
> リセットを伴ったVBAでないと無理だと思います。

確かにワークシート関数では出来ないと思います。でもVBAなら簡単かなと思って作ってみたら意外に難しく、今まで使った事の無いようなイベント関数に行き着きました。結局、出来上がって見るとほんの数行の非常にシンプルな物でした。
ただ、このままだと足し算しか出来ない出来の悪い電卓のような感じなので、ダウンロード版ではEXCELの特性を利用して発展させたらと思います。とりあえず、A1だけでなく3つ配置してみました。でも何に使うかはよく解りません。


サンプルプログラムのダウンロード

---------------------------------------------------------
Private Sub Workbook_SheetChange(ByVal Sh As Object, _
ByVal Source As Range)
' シートを変更すると実行されます。

' イベントを停止します。
Application.EnableEvents = False

If Range("A1") <> "" Then
Range("B1") = Range("B1") + Range("A1")
Range("A1").Select
Selection.Clear
End If

' イベントを再開します。
Application.EnableEvents = True

End Sub
'---------------------------------------------------------

これは新規モジュールに書くのではなく、ThisWorkbookにプロシージャとして追加します。


参考にさせて頂いているexcelaさんの掲示板
掲示板(エクセル Q&A掲示板、検索機能付き)
http://www3.neocity.to/treebbs/bbs.cgi?116/excela

excelaさんのホームページ
http://www2.ocn.ne.jp/~excel/

(2001.7.9)