Excel マクロ集
Excel(and Visual Basic for Application)は、私にとってDelphiに次いでよく使っています。
ここでは実際の研究で使ったプログラム、あるいはルーチンワークな処理に用いたプログラム、Excel-users-clubで話題になったものについて集めてみました。
使用、改変に関しては特に連絡の必要はありません。
Excel 97では「このファイルにはマクロが含まれています」という警告が出ることがあります。しかし下に掲載したファイルには
・意図的にコンピュータに不具合を起こす
・勝手に他のファイルやコンピュータに伝染させる
といった悪意を持ったコードは含まれていませんので、最近問題となっている「マクロウィルス」の心配はありません。ただし、もしかするとプログラム上の不備があるかもしれませんので、自己責任においてご利用ください。
なお、ソースコードはすべて公開しておりますので問題を見つけた方はご連絡ください。
ファイルを開くと自動的にマクロが実行されるのを防ぐには、ファイルを開くときにSHIFTキーを押してください。


フォルダ内のファイル名取得モジュールFndFiles.bas (テキストファイル、6kB)

フォルダ内のファイル名一覧を取得します。任意のVBAプログラムに「ファイルのインポート」でこのモジュールを読み込むことで、プログラムにバッチ処理が手軽に組み込めます。このプログラムはflist.xlsのファイル名取得部分だけを独立させたものです。
2000/5/10 ファイルが存在しない場合やキャンセルした場合などにエラーが出る問題を修正しました。ソースの先頭につけたサンプルコードを参考に、戻り値がFalseの場合はファイル名を取得しないようなコードにしてください。

カレンダーコントロール (ActiveX Control) [Excel97]
calxctl.exe (登録ツール付き、248kB)
calxctl.lzh (ActiveX only、200kB)
ActiveX Controlです。ブックではありませんので登録作業が必要になります。
また、ブック配布時にこのActiveXを同梱する必要があります。

インストーラを使って登録された方は、Excel VBA画面からツールボックスを表示し、
ツールボックスの上で右クリックして「その他のコントロール」を選択。
CalendarX コントロールにチェックを入れてください。

Excel2000ではカレンダーコントロールが使えるといううわさですが、Excel97でもカレンダーコントロールを扱えるようにするActiveXです。ただし、Excel2000でもこのActiveXを使わないと動きません。Excel97/Excel2000/他社のOCXと、ライセンス条項の問題で可搬性のないOCXに悩まされている方はご自由にどうぞ。
ソースコードは添付してませんが、欲しい人はあげます。というよりすべてDelphi任せですから、私が一番頭を使ったのは圧縮とインストーラ作成ぐらいです(^_^;
Excel-users-club Subject: [euc-vba:22533]の大越さんの投稿を見て作ってみました。

古いWindows95にはカレンダーコントロールが存在しませんので、IE4をインストールするか、Microsoftのサイトからcomctl32.dllの最新版を入手して、これを先にインストールしておく必要があります。(私の作ったActiveXはVBAからcomctl32.dllの機能を呼び出せるようにするものです。カレンダー本体の機能はcomctl32.dllによるものです。)

ProgressBar (ActiveX Control) [Excel97]
progbarx.exe (登録ツール付き、203kB)
progbarx.lzh (ActiveX only、153kB)
ActiveX Controlです。ブックではありませんので登録作業が必要になります。
また、ブック配布時にこのActiveXを同梱する必要があります。

インストーラを使って登録された方は、Excel VBA画面からツールボックスを表示し、
ツールボックスの上で右クリックして「その他のコントロール」を選択。
ProgBarXControlにチェックを入れてください。

VBAでプログレスバー(進行中の棒グラフ)を扱えるようにするActiveXです。
最初に登録作業が必要になりますが、いったん登録してしまえば下のwaitapp.xlsよりはるかに簡単に使えると思います。
ソースコードは添付してませんが、欲しい人はあげます。というよりすべてDelphi任せですから、私が一番頭を使ったのは圧縮とインストーラ作成ぐらいです(^_^;
Excel-users-club Subject: [excel:12204] Re: プログレスバーもどきについて(1998.12.1)より引用
(URLは投稿当時のものです。)

>本物のプログレスバー(ActiveXコントロール)をDelphiで作ってみまし
>た。欲しい方は持っていっていただいて結構ですが、ブックを配布すると
>きに、同時に下のファイルもインストールする必要が出てきます。
>
>http://h1sparc1.kais.kyoto-u.ac.jp/~kawamura/lzh/progbarx.lzh
>(ActiveX Only, 152k)--regsvr32を使って、ご自分で登録作業が必要に
>なります。
>http://h1sparc1.kais.kyoto-u.ac.jp/~kawamura/lzh/progbarx.exe
>(登録ツール付き, 202k)
>
>いや〜、実に簡単だったので、何にもActiveXの勉強にはなりませんでし
>た(^_^;
>このくらいのコントロールなら、どこかに落ちてるような気もしますが...


「ファイル操作」のアニメーションをするサンプルプログラム [Excel97]shfopsmp.xls (75kB)

エクスプローラでファイルを削除したり、コピーしたりすると「ファイルをxxxしています...」と、書類がひらひらと舞うダイアログが出てきますが、これをVBAから使ったサンプルです。SHFileOperation関数の機能(削除、コピー、移動、名前の変更)を紹介しています。複数のファイルを削除したりするときは、
filename + vbNullChar + filename2 + vbNullChar + ... + filenameX + vbNullChar + vbNullChar
というように、ファイル名の間をvbNullCharで区切って指定します。また最後のファイル名の後には二つのvbNullCharを付けてください。詳しくはWindows APIの解説書をご覧ください。
Excel-users-club Subject: [excel:09696] Re: コピーしていますダイアログ(1998.9.30)で紹介。

ナンバープレースを自動解答 [Excel97]NumPlace.xls (57kB)

某パズル雑誌で、懸賞付きで出ている問題を自動的に解いてくれます。
私の解き方をプログラムにしたので、私の解き方に落ち度があれば解けない問題があるかもしれません。一応某パズル雑誌(1冊分)でチェックをかけています。
某パズル雑誌で、葉書代だけでビデオデッキやらコンポやらをもらおうなんて思ってる方はご自由にどうぞ。(ソース付きなので、4*4とか対応させようと思えば、できないことはないです)
でも暇を持て余してる方とか、パズルを解くのが好きな方は自分で解いた方が面白いと思いますよ(^_^;私はプログラムを書く方が楽しいので...(^_^;

grphclk.xls [Excel97]grphclk.xls (36.5kB)

大量のデータを持つ散布図などで、クリックした点の要素番号を返すサンプルプログラム。連続してセルに出力などの応用はご自分で(^_^;
Excel-users-club Subject: [excel:09192] Re: グラフから値の取得(1998.5.8)で紹介。

Excel97での標準カラーパレット [Excel97]


Excel97で「セルの色」「グラフの塗りつぶし色」などで用いる色のインデックス(ColorIndexプロパティ)を知りたくても、ヘルプは16色表示のため、全然違う色になっています。上のページを256色以上のディスプレイで見ると、ちゃんとまともな色と、対応するColorIndexプロパティが参照できます。Excel-users-club投稿済み(1998.9.17)。

waitapp.xls [Excel97]waitapp.xls (109kB)


サンプルプログラムです。実際の用途に合わせて書き換えて使ってください。
時間のかかる処理中にダイアログを表示するマクロ。
Excel-users-club Subject: [excel:02615] マクロの進行状況を表示のスレッドを参考に作ったものです。

grphdemo.xls [Excel97]grphdemo.xls (36kB)


サンプルプログラムです。実際の用途に合わせて書き換えて使ってください。
コンボボックスでレーダチャートに使うデータを自由に選択できるマクロ。コンボボックスの中身はA列を参照します。
Excel-users-club Subject: [excel:02429] Re: 任意選択セルの行番号と同じ行のセル値をグラフのデータとしてほしいのですが。で紹介したものです。

FaceIDの一覧表 [Excel97](GIF画像ファイル)
1〜1000
1001〜1000
2001〜2000
3001〜3518


Excel97で、マクロをコマンドボタンに割り当てるとき、そのボタンの図柄の番号(FaceID)を知る必要がありますが、ヘルプにはその図柄が出ていません。
そこでExcel-users-clubで酒井さんが紹介されたマクロ([excel:01850][excel:01915]より)を用い、一覧表を作りました。

setime.xls [Excel97]setime.xls (32kB)
setime2.xls (32kB, 空白ブックを開きたくない方向け)


Excelを開いたとき、IMEを「かなモード」にするマクロ。
xlstartフォルダに入れておくと便利です。
注意!!! sendkeys関数を使ってBSキー、続いてESCキーを送出しています。実行中(Excel起動中)に他のアプリケーションを使っていると、BSキーやESCキーに反応する可能性がありますのでご注意ください。

Excel-users-club Subject: [excel:01600] Re: MS-IME の表示で紹介したものです。
1998.2.26 Microosftのサポート情報をもとに、一部改良しました。

graphset.xls [Excel97]graphset.xls (162kB)


Excelブックのグラフの色、およびシート上のグラフのサイズを整えるマクロ。

Excel-users-clubでの紹介文より引用
(URLは投稿当時のものです。)
Subject: [excel:01534] Re: [Excel97] Axis.Width
>シート上のグラフの大きさを揃えたい(正確には長さを指定したい)という
>問題について質問したのですが、返事がいただけなかったので、とりあえ
>ずこんなのを作ってみました。ちょっと巨大なので、見たい方は下にアク
>セスしてください。(Excel97用)
>http://h1sparc1.kais.kyoto-u.ac.jp/~kawamura/graphset.xls
>
>ただ、使ってみると分かるのですが、やはり変な挙動をします。このプロ
>グラムでも2回ループを回しているのですが、それでもちゃんと合わない、
>あるいは合わないどころか全く異なる大きさになってしまうことがありま
>す。何度か繰り返すとマシになるので、うまく行かないときは何回か繰り
>返してみてください。
>
>なお、おまけとしてグラフの色を変えるマクロも付属しています。
>Excelデフォルトのグラフの塗りつぶし色はセンスが悪いので、虹色、また
>はモノクロに変えるものです。(16系列,あるいは16段階まで可)
>要は「オプション」-「色」の設定を簡単にしただけなんですけどね。
>ただこちらの方は「コントロール配列」の定義の仕方が分からず、急いで
>いたので48個のテキストボックスと16個のフレームの値を長々と参照する
>という、実に汚いコードです。「コントロール配列」の使い方をご存知の
>方は教えてください。

1998.2.27 コントロール配列を使って書き直しました。機能的には大して変わっていません。

flist.xls [Excel97]flist.xls (81.0kB)


フォルダに含まれるファイル一覧をシートに出力するマクロ。

Excel-users-clubで紹介したものを一部手直ししたものです。
1998.2.27 Windows APIを用い、「ファイルの種類」が表示できるようにしました。また、生成された一覧をHTMLファイルで保存する機能を付けました。
1998.6.4 Windows APIを用いて「フォルダの参照」ダイアログを表示できるようにしました。
1998.11.11 「フォルダの参照」ダイアログをキャンセルしたときエラーが起こるのを修正しました。井上@inetさん、ご報告ありがとうございました。
Subject: [excel:01312] file list(Re: はじめまして、すかさず質問)
> >エクスプローラで表示されるファイル名の一覧をエクセルかテキ
>ストに
> >ファイルとして取り込めませんか? という質問です
>
>ファイル名の一覧をシートに出力するのでしたら、VBAを使えば簡単
>です。ただし、直接エクスプローラの表示を取り込むのではなくて、
>「ファイルを開く」ダイアログから取り込むことになります。
>
># でもこの例ですと、何かファイルを指定しないと「開く」ボタン
>が押せないのが気持ち悪いですねえ。フォルダの参照ができたらうれ
>しいのですが。


FFTアナライザ R9211A データ読み取りプログラム
Excel97用(暫定版 for ukyo)adv97.lzh(40kB)
Excel95用adv32.exe(47kB)
Excel ver.5用adv16.exe(51kB)

業務用ですので、誰の役にも立たないかもしれません(^^;;;
Microsoft Excel上で、ADVANTEST R9211(FFTアナライザ)のデータディスクを読み取ります。
緊急に必要になったため、Excel 97版を暫定的に作りました。


番外編
Word97 連続印刷
Word97用wdallprn.lzh(2kB)

Word97(98もOkだと思う)で、指定したフォルダ内に存在する.docファイルをすべて印刷するマクロです。VBAエディタで「ファイルのインポート」を利用して取り込んでください。
Module2はflist.xlsと同一内容です。(SHBrowseForFolder APIのラッパーです)
組み込み方がちょっと面倒なので、初心者の方にはお勧めしません。
Wordマクロは配布が面倒ですね...


戻る  河村のページに戻る


mailto: susumuk@fa.mbn.or.jp

推奨されたHTML文書に仕上げるため、 HTMLパーサでチェックしました。HTML4.0対応のすべてのブラウザで正常にご覧いただけます。
HTML4.0に対応していないブラウザでは、表組みが読めなかったり、フォントの色や大きさが変わらないことがあります。