○第103回目 QXマクロを使っての仕事(一例)
現在、力を入れているのは、業務上のものも含めての辞典作りです。業務上のものは言及できませんので、エクセルマクロを作るための辞典作りを題材にします。
エクセルマクロの辞典ですから、エクセルマクロ命令の使用例を取りまとめています。行頭にある○でひとつの区切りとしています。
行頭以外で使われている○は、単なる記号とみなします。その○の以下に、コマンド、機能の説明、機能の検索キー、使用例などを記述します。
現在、重複もありますが、286項目、1400行となっています。この辞書の内容は、既存のマクロから引っ張ってきています。また、マクロのホームページからの引用もあります。
この辞書は、行頭の○から次の行頭の○までを1レコードとしてみなしています。ですから新しい情報は気にせずに追加していけばいいのです。
そして、ソートをかけることができるます(これはマクロ)。すると順番に並ぶので、通常機能の検索機能を使って、該当するところに移動し、その内容を見るということができます。これは説明文章の中の文字にも反応しますので、目的とするものにまず最初にはいきつくことはできません。
また、○が見出しに設定されているので、QXエディタで通常機能の見出し一覧を表示しそこから該当箇所に飛ぶこともできます。
次の使用方法は、検索文字を設定して、その文字のあるレコード(行頭の○から次の行頭の○まで)のみを、新しいファイルに抜き出すということができます(これはマクロです)。
例えば、"input"という言葉で抜き出してみると、次のようなものが出てきます。
(たくさんあるので一部のみ)
'---------------------------------------------------------------------
○inputbox関数
z_no0 = InputBox(msg01 & ii9 & " 以内", xpos:=1000, ypos:=2000, Default:=settei_ti0)
'---------------------------------------------------------------------
○シートの移動(シートは相対位置で指定します)
ii_max = ActiveWorkbook.Sheets.Count
ii0 = ActiveSheet.Index
sh_cnt = InputBox("グラフのあるシートの場所を入れてください。… -1 , 0 , 1 …など", Default:=-1, xpos:=2000, ypos:=3000)
Sheets(ii0 + sh_cnt).Select
'---------------------------------------------------------------------
○シートの移動1
Do
flag = 0
sh_cnt = InputBox("新しいシートの場所を入れてください。… -1 , 0 , 1 …など", Default:=1, xpos:=2000, ypos:=3000)
'シートオーバーの場合の歯止め、再入力
'---------------------------------------------------------------------
以下略。
この中から、使えそうな構文をコピーするということが可能となります。またこのファイルを基にして、さらに検索をかけることで、さらに絞り込むことも可能です。
自分の外に知識を移してそこへのつながりをしっかりしておくと、結構便利だと思います。辞典的なものは分量が多くなるので、そこから必要な部分のみをセレクトするという機能が備わっていないと、辞典というデータベースを作っただけになります。
このような辞書を活用してエクセルマクロを作ります。
次に、デバックに伴う修正ですが、まず、エクセルのマクロ用のモジュールをエクスポートします。そして、そのファイルをQXエディタで開くというマクロを作っておきます(通常操作では、拡張子basのファイルをQXエディタで開くように関連付けをして、エクスポートしたモジュールを開けばいいことになりますが、操作が何回か余計にかかります。そこで、マクロが登場するのですが、このマクロでは、二桁の数字を入力して、moduleNNを開くことができますので、拡張性があります。)。
直接修正するのが簡単な場合は、モジュール上で直接修正しますが、テキストエディタでの修正が便利な場合は、QXエディタで、そのモジュールを開くマクロを動かします。そして、QXエディタで修正を行います。
(クリップボードを経由した、通常の処理、すなわち、モジュールの中で、コピーをしその内容をQXエディタに貼付けるという操作でも同じようなことになります。こちらも操作が単純です。=⇒モジュール上の操作で、Ctrl+上下の矢印(次のSubの先頭に移動)がありますが、その操作を知らないときに作ったので、この操作を知った今は、主に、クリップボード経由でQXエディタとの間のやり取りをしています)
QXエディタの中では、前々回紹介した"どこでもコピデル"も使いながら、修正していきます。
(QXエディタからエクセルマクロへの移植は、コピー・ペーストの手作業になってしまいます。これも自動化できるといいのですが、その方法が考え付きません)
また、基本コマンドについては、その頭文字からサーチできる短縮入力機能がQXエディタにはついているので、その機能(データは自分で作ります)も利用して入力します。こちらは文字数がかなり短く限定されているので、使用例も短く指定しています。
つまり、大きな機能の使用例を探すのは辞典を利用して、ちょっとした構文を探すのは短縮入力を利用するという感じです。
(QXエディタの短縮入力は、"見出し" TAB "用語など"という形式なっていて、見出しが複数の英文字で自動サーチできます。Enterを押すと、"用語など"が貼付けられます)
こう書いていたら、ひらめきました。
エクセルマクロはあるひとつのエクセルファイルの複数のモジュールに保存してあります。マクロを保存するファイルはひとつに特化しているということです。
バックアップとして、モジュールをエクスポートしています(拡張子は.bas)。
このbasはテキストファイルなので、関連付けをつけておけばQXエディタで開けます。
この一連のbasを一括結合してテキストファイルとして開く、というQXエディタのマクロを作ります。
これを動かすと、ほぼ全部のエクセルマクロが結合され、一つのファイルができます。これに検索をかけることができれば、コマンドの使用例としてはこれに勝るものはありません。
したがって、このファイルを用いて、こんどは行頭の'を区切り記号として、情報を抽出することのマクロがあればいいことになります。原型はすでにできてるので、○の代わりに、'を設定すればいいことになります。
これもひとつの辞典となります。区切りとしては適切に付加されているとはいえませんが、おおむねという感じで活用できそうです。
こういうことをやっていてつくづく思うのは、事務の7割がたがいわゆるワード系、筆者で言えばテキストエディタ系の作業になるのではないかということです。ここを攻める必要があると思います。
エクセルマクロのマクロといっても、ある場面においてはいいテキストエディタが重要である、といえると思います。そして、"読み、書き、そろばん"の"書き"の部分の役割としても、いいテキストエディタは必需品なのではないかと思っています。
皆様方においても、ワード一辺倒ではなく、テキストエディタのいいものを活用することが、目立たないことですが、事務の能率に大いに寄与するのではないかと、ひそかに思っています。

0 件のコメント:
コメントを投稿