○第34回目 マクロを何を使って作るのか(その4;テキストエディタのマクロ2)
9. 指定された行数の分をコピー。マイナスも可。
=⇒書き方が繰り返されている場合、前の文書を持ってきて修正しますよね。そのためのものです。マイナスは、語尾から上に数えてというパターンの時の指定です。通常はマイナスの指定のほうが多いのではないでしょうか。
これもプログラムを見てみましょう。
proc main()
'指定された行数をコピーする。
'作った文章群(MAX100行)をそのままコピーし、それを基に新たな文書を作るためのプログラム
'元文書群から1行あけて、コピペする。
'コピーしたい文章群の最後におきマイナスの数値を入力しても可能。
dim i,j,k,l,n,m '=⇒QXマクロは変数の定義が必須。他のマクロにも使えるので不要な変数も残っている。
dim p1,p2,p3
dim rr$
dim msg$
dim y_begin
dim y_end
dim mm$[100]
if @hwnd = 0 then exit proc
'現在のカーソル行を取得
y_begin = @ScrLineToCrLine(@Line) '物理行から論理行への変換。物理行は画面で表示されている行
'行数の入力
msg$ = "コピーしたい行数を入力してください。文末の場合はマイナス付き。"
p1 = inputbox(msg$,,-3)
if p1 = 0 then exit proc
if p1 < 0 then
p2 = abs(p1) '=⇒マイナス数値の場合、絶対値をとる
y_begin = y_begin - p2 + 1 '=⇒コピーする最初の行は前にあるのでそれの指定
else
p2 = p1 '=⇒p2はコピーの終了行
end if
@Line = @CrLineToScrLine(y_begin) '論理的な行数に変換
'メイン処理。
for i = 0 to p2 - 1
mm$[i] = @TextCr$(@Line) '=⇒その行の内容を取得
@MoveNextLineCr '次の行へ
next
'コピー
@InsertF "\n" '=⇒改行を書き込むということ
for i = 0 to p2 - 1
@Insert mm$[i] '=⇒文字の書き込み
@InsertF "\n" '=⇒改行させる
next
@Line = @CrLineToScrLine(y_begin + p2 + 1) '=⇒コピーした文の最初にカーソルを移動する
end proc
※エクセルマクロをやっているので、取り組みやすいと感じると思います。
10. 指定された行数の行を逆転する。
=⇒たまに行をひっくり返してみたいことがありますよね。そのためのものです。
OCR変換をしていると前後が逆になっているのがたまにありお世話になっています。
11. 文末にタブを入れる
=⇒よく考えると、たいしたものではありません。しかしながら、タブをマクロ中でどう記述するのか、結構悩みました。
12. 選択範囲の任意文字数目に、設定した文字を挿入する。
=⇒通常は、行頭に挿入します。例えば、タブN個、スペースN個、決まった文字(○、・など)を挿入するということです。結構重宝しています。エクセルマクロでタブによる文字下げをする場合、範囲を指定してひょっと出来ます(デフォルトがタブを行頭に挿入となっています)。
13. 空行、空白行の削除
=⇒ホームページからテキストをとってくると、いやに改行が多いですね。そのような場合、無意味な行を削除するものです。
14. 削除する行数を入れて、その行数を削除する。
=⇒削除の操作タッチを少なくするものです。
15. 選択範囲の指定した桁数目に、連続する数値列を挿入する。
=⇒マクロを作っていると、変数名の与え方によっては、変数の連番だけ変えたいことがあります。それに対応するものです。
16. 数値にカンマを挿入(複数行可能)
=⇒フリーの"計算式を計算"を動かす場合、だいたいはカンマを入力しないで計算式をつくり動かします。後でカンマをいれ見てくれを整えるものです。
17. 範囲内の複数語の置換え
=⇒フリーの"複数文字列一括置換マクロ"の機能を範囲を設定しても可能にしたもの。変更がかったるいので余り使っていません。
18. 選択範囲の行頭に、'''を挿入する。
19. 選択範囲の'''を削除する。
=⇒マクロのデバック行の加工用。途中経過をチェックする行をコメント行にするためのもの。一々行の頭に'をいれるのが結構めんどくさかったので作成しました。
20. マクロの中から定数(特別な記号から始まる)を抜き出しまとめる。
=⇒マクロの中では定数は変数化して使っています。変数定義の漏れがないように、マクロから自動的に抜き出すものです。行数を管理する定数、列数を管理する定数、回数を管理するなどその他の定数と三つに分けて特殊な記号を先頭につけていますので、抜き出し可能なのです。重複分は自動削除します。
21. エクセルマクロファイルの結合。
=⇒既に説明済み
22. QXマクロファイルの結合。
=⇒フリーも含め140本ほどありますので、この管理も大変です。これも頭が痛いのです。QXエディタオリジナルのショートカットと小指の思い出でのショートカットがありますので、それを表記しなければなりません。現在は不十分ですが、proc文のあとにコメントとして書き加えようと思っています。すると、procを見出しに設定すれば、その行が一覧表になるので、改めてショートカット対応表を作る必要がないのです。
このマクロを改良して、複数のテクストファイルを結合する機能も追加しています。あらかじめ、結合するファイルのパス名を書いておき、それを指定してから実行します。結合結果のファイルは、処理のつど事前に削除してから、結合処理するように組み込んでいます。
スキャナを使ったOCR変換は、各回ごとに1ファイルとなります。それを、結合させる時にも活用しています。フリーの取れたぬ君は非常に便利。
23. ファイルの履歴取得数拡大。ファイルは400個まで累積する。
=⇒QXエディタでは、60個までの履歴が管理されます。それを拡大したものです。これまでの履歴ファイルに、今回のもの(最大60個)を付け加え、重複するものを削除し、すでに削除されたものは"ファイルなし"の表示を付加しています。ファイル名または更新日付でのソートを可能としています。ファイル数は定数を修正すればもっと拡大可能です。この文書から、該当するファイルを開くことも(一部を除き。対象にできないか研究中)可能です。
24 ファイルのパス名からジャンプ及びそれ以外のことをする
=⇒テキストファイルに、"C:\Documents and Set\pppp\My Docus\xxxx.xls"いうパス名を書き込んだとします。このファイルを開くということです。
QXエディタについているのは、テキストファイル及びそれに類するものにジャンプするのですが、それ以外のエクセル、ワードのファイルは開けません。これに対応する機能です。ワード等でいうリンクを張るということと同じです。
また、"それ以外"のこととは、上のパス名を指定してそのフォルダを開くというものです。上記の例では"C:\Documents and Set\pppp\My Docus"のフォルダがエクスプローラで開かれます。
もう一つは、そのパスに書かれているフォルダ(ファイルでも可能)を暗号化ソフトで暗号化させることです。当然復号化も可能です。パス名を使ったさまざまなことを組み込んでいこうかと思っています。
2007年8月19日日曜日
登録:
コメントの投稿 (Atom)

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