はじめに

多量の行が表示されないように、このブログは1コンテンツしか表示されない。ブログアーカイブから、他の記事を捜してくれ。

環境作れし。
・gawk 3.1.5 for Windows をググッて入手。
・gawk.exeをpathの通ったフォルダにぶち込めし。
 (「windows パスを通す」ググッて)
 (面倒なら、C:\windowsにぶち込む)
・環境変数「awkpath」にスクリプトを保存するフォルダを設定。
 (「環境変数 設定 windows」ググッて)
 (面倒なら、C:\windowsに、紹介されているスクリプトぶち込む)

2014年8月26日火曜日

ExcelVBA : 全シート内太文字の名前作成

開いているブックの全シート中の太文字のセル位置で、そのテキストで「名前」を作成するマクロだ。

何に使うかってーと、簡易目次だ。
ブック内の任意シートで「CTRL+G」を押せば名前を選択して、そのセルにジャンプしてくれる。
ま、同じ内容の太文字テキストが複数あった場合、あきらめてくれ。
その名前のみ、手動で名前作成すればイイんじゃね?

VBAのつぼ
今回のシート内全セルループは印刷範囲とデータ存在範囲のうち小さい行桁でループをまわしてる。
セルループのテンプレにつかえし。

ループ中、DoEventとStatusBar文字変更は、暴走疑惑を和らげる為だ。


2014年8月20日水曜日

ExcelVBA : 色つきセル検索

開いているブックの全シート中の色つき文字のセルを現在位置から検索するマクロだ。

添削や変更箇所の目視確認に使えし。

AWKのつぼ

ブック中、現シート現位置から検索し、一周するループ処理をしている。
このfor文、パクれるんじゃね?
シート内最終セルは、PrintAreaやSpecialCellのラストデータを計算して総合判断したほうがイイかもな。

ExcelVBA : 全シート、ハイパーリンク目次作成

数十枚のシートをブックにして、そのドキュメントを読め、、、とかいうサドがいる。

対策マクロだ。

ついでに、Excelのクイックメニューかリボンに「戻る(web)」ボタンを追加しとけし。
ハイパーリンク先から一瞬で戻れる。

AWKのつぼ



ExcelVBA : 表組みセル自動結合

選択された範囲のセルを、データの有無を見ながら自動的に表組み結合するマクロだ。

自動結合_単行、自動結合_複行を実行してくれ。

AWKのつぼ

なし。


ExcelVBA : フォルダ配下のXLS(XLSX)取得

Excelはbookを複数開くと致命的に遅くなる。

マクロで複数ブックに処理をするならば、一本毎に開き、処理、そして閉じるの繰り返しをするしかない。

こんなときに、フォルダを指定するだけで、配列変数に処理対象excelファイルパス名を入れるマクロだ。

getFileListを呼べば、フォルダ選択ダイアログが表示され、選択すれば、targfile()に一覧が入る。
後は" for each book in targfile ~ nextでopen して、ActiveWorkSheet に処理を行ってくれ。

最大ファイル数は64になってるから、適当に変えろし。

 Application.FileDialogは、.NET FRAMEFORK以降だから、多分Office2003以降で動作すると思う。

AWKのつぼ

なし。


AWK : ファイル自動分類

パラメタで指定したフォルダ中に共通のプレフィクスがあると認識した場合、プレフィクス部をサブフォルダとして、その中にファイルを移動するスクリプトだ。

下記AWKの定数部 "4"はサブフォルダに移動するか判断する最低ファイル数だ。
つまり、4ファイル、プレフィクスが一致しないと分類しない。
また、より長いプレフィクスで一致する場合もあるので、ファイルの出現順によってもプレフィクス一致判断が変わることもある。うまく分類されなかったときは、サブフォルダ側で再実行してみてくれ。

前回の日付プレフィクスと組み合わせて使うと、ファイルの日付分類ができるぞ。

AWKのつぼ

なし。

fnfold.bat

fnfold.awk

2014年8月19日火曜日

BAT : プレフィクス外しバッチ

前回の続きだ。
前回紹介した日付プレフィクスをファイル名から外す方のバッチは若干のバグがあった。

実際のタイムスタンプとプレフィクスを比較して、一致していたら外す…などと、高等な事をしようとしてたが、バッチのみでは機能が追いつかなかったってこった。

今回は、"-"を区切り文字として、先頭の部分を消すという低機能。
ただし、前回のプレフィクス付けバッチは、"-"が入ってないぞ。工夫して、"-"を入れてくれ。


Batchのつぼ

壷はなし。前回と大して変わらん。

fnnotime.bat

2014年8月12日火曜日

BAT : タイムスタンプをファイル名プレフィクスにつけるバッチ

今回から何回かに分けて、多量ファイルの整理に役立つスクリプトを紹介する。

例えば、ハードディスククラッシュ後、復旧ソフト等でぶっこ抜きした、多量のフォルダ所在不明ファイルだ。
分類する情報としては、フォルダが飛んでいるので、ファイル名、タイムスタンプしかない。
このファイルを整理するため、ファイル名先頭に日時文字を付けたり外したりするバッチだ。

Batchのつぼ

XP以降のBatchでは、Batch内である程度の文字列加工ができる。
しかも、工夫次第でワークファイルの出力も必要なくなる。
echo xxxx | findstr /C:"yyyyy"
の実行後、errorlevelを見ることでsearch代わりになるし、
摩訶不思議構文のfor文で指定文字列の部分削除ができる。

又、バッチ内サブルーチンコールでは、%1~%nのパラメタがスタックされるので、%~f1(パラメタ%1をフルパスファイル名に変換)等もサブルーチンパラメタと呼び出し元の双方で個々に保持される。


下記バッチは、例えば "qaz.txt" 2014/08/08 12:34 のファイルを"201408081234qaz.txt"に変換/逆変換してくれる。
バッチ内で使用している"dir /tc"を"dir /tw"にすれば作成日ではなく更新日をプレフィクスにすることもできる。
安全のため、ダイレクトに変更せず、変更するためのバッチをカレントに出力している。
作成されたファイル名変更バッチをエディター等で目視確認してから実行しろし。


fnctime.bat (パラメタで指定したフォルダ配下階層ファイルにプレフィクスとして作成日を付加する)



fnnctime.bat (パラメタで指定したフォルダ配下階層ファイルから,作成日プレフィクスを外す)
bug:元のファイル名先頭が数字だと、消しすぎるバグあり。

2014年5月18日日曜日

シート内図形のセルグリッド位置調整 Excel Macro

Excel方眼紙で図面を書いてるヤシに朗報だ。

複数の選択された図形オブジェクトを近傍点セルグリッドに合わせてくれるマクロだ。
・図形の左上基点グリッド合わせ(サイズ変更なし)
・図形の右下基点グリッド合わせ(サイズ変更なし)
・図形の左右上下すべてのグリッド合わせ(サイズ変更)
上記3つのどれかを選んで位置調整。
調整方向は縦/横/縦横が選べる。コネクタの除外指定もアリ。
ただし、コネクタはExcelのバージョンによって挙動が違うので期待するな。

Macroのつぼ

VBAのウィンドでフォームの追加をしろし。
フォーム名は"AdjustObject"
フォーム内に何のコントロールを貼るかは、上の画面とフォームのInitialロジックを見て
考えてくれ。フォームをロードするエントリ関数は”図位置調整()”。これを呼び出せば動く。

化石言語BASIC固有の文法で、EndiFを書かないIf文や行番号ジャンプが書かれている。
また、"If CONTROL Then ・・・"は、"If CONTROL.value = True Then・・・"と同じだ。
両方ともコードをシンプルにする為に、ベストな方法だ。
goto文は必要な箇所に充分つかえし。

AdjustObject(コード)


標準モジュール

2014年5月2日金曜日

正規表現検索ワークシート関数 excel macro

クソみたいなexcelのfind関数の代わりにつかってくれ。
他マクロからの呼び出しやワークシート関数として使える。

ただし、検索できるのはソース文字列(orセル)中で最初にマッチした1件のみ。複数検索したいヤシは、For Eachループ内のmatchオブジェクトをナンとかしてくれ。ワークシート関数の体をなしたままだと何かとメンドーそーだ。

使い方

=RegExp(<検索対象>,<正規表現パターン>,<"S" or "P" or "L">)

ex.
=RegExp(C4,"「.*」","S")
   C4セルの中からかぎ括弧で囲まれた文字列を探す。

=RegExp("日月火水木金土",C4,"P")
 C4セルに書かれた文字を曜日並びから検索し、何個目の曜日なのか、文字位置を返す。

=RegExp(C4,"(YES|NO)","L")
 C4セルに書かれた文字が"YES"なら"3"、"NO"なら"2"のようにマッチした文字数を返す。

Macroのつぼ

WSH等で使われるComモジュールのRegExpをExcelから呼び出している。
残念な事に、"L","P"を指定したときに返ってくる数値は文字型だ。

まっとうに使いたいヤシは、改造して、直接マクロから呼びだすべし。
マクロ作るのメンドーで、ワークシート関数でナントカしたいヤシ、そのまま使ってくれ。アドイン(.xla)で作った方がイイと思う。