フォルダ内のテキストファイルを書き出し
2022年03月31日
前に似たようなものを作ったんだけど、
流用して作ろうとしたら使い勝手が悪かったので改良してみた。
前から気になってたVBAのFIlter関数も使って
シンプルかつ強力に!
機能は、特定フォルダの中のテキストファイルを開いて中身を全部書き出すこと。
なので、フォルダのパスを入力するとテキストの中身を出力する関数として作った。
通常であれば、エクセルを使って不要行の削除とかをするんだけど、
100万行とかあるので、シートに書き起こす前に
配列のままフィルタリングをする。
昔は、シートありきだったけど成長したなぁ。
いつものように配列のサイズ計算がめんどくさいので、
データの格納段階で無駄にDictionary配列を使う。
重複削除についてもDictionary型のキー格納を使って
エラー無視でぶん回す。
この内容なら、VBScriptに移植もできそうだな。
余談だけど、配列をエクセルファイルに張り付ける際に、
WorksheetFunction.Transpose関数を使うと、
要素数が多すぎると停止するので要注意。
2次元配列に格納しなおして張り付けた方がよさげ。
以下、ソース。
流用して作ろうとしたら使い勝手が悪かったので改良してみた。
前から気になってたVBAのFIlter関数も使って
シンプルかつ強力に!
機能は、特定フォルダの中のテキストファイルを開いて中身を全部書き出すこと。
なので、フォルダのパスを入力するとテキストの中身を出力する関数として作った。
通常であれば、エクセルを使って不要行の削除とかをするんだけど、
100万行とかあるので、シートに書き起こす前に
配列のままフィルタリングをする。
昔は、シートありきだったけど成長したなぁ。
いつものように配列のサイズ計算がめんどくさいので、
データの格納段階で無駄にDictionary配列を使う。
重複削除についてもDictionary型のキー格納を使って
エラー無視でぶん回す。
この内容なら、VBScriptに移植もできそうだな。
余談だけど、配列をエクセルファイルに張り付ける際に、
WorksheetFunction.Transpose関数を使うと、
要素数が多すぎると停止するので要注意。
2次元配列に格納しなおして張り付けた方がよさげ。
以下、ソース。
PR
フォルダがなければ作るスクリプト
2022年03月29日
xcopyコマンドを使ったログ回収について書いたけど、
xcopyってコピー先のフォルダがないとエラーを吐くのがいまいち。
そういえば、前にフォルダがなければ作るマクロを作ったよな。。。
てなわけで、VBAのソースをVBScriptに移植することにした。
元ソースは、マイドキュメントにフォルダがなければ作るマクロ
前に作ったときは、ユーザーフォルダを取得するのにガチャガチャやってたけど、
フォルダがなければ作る処理だけなら20行いかないのね。
VBAとの違いは、変数の型を指定できないこと。
for ~ next の後にループ変数を入力できないこと。
sub ~ end subの記載のない部分が実行されること。
思った以上に簡単に移植できた。
xcopyのコマンドを作る際に、コピー先フォルダをこれで作っておけば便利かも。
以下、ソースを「MakeDirEX.vbs」などの名前で保存。
コマンドプロンプトなら「mkdir -p 」でいいんじゃね?って話はなしで!!
xcopyってコピー先のフォルダがないとエラーを吐くのがいまいち。
そういえば、前にフォルダがなければ作るマクロを作ったよな。。。
てなわけで、VBAのソースをVBScriptに移植することにした。
元ソースは、マイドキュメントにフォルダがなければ作るマクロ
前に作ったときは、ユーザーフォルダを取得するのにガチャガチャやってたけど、
フォルダがなければ作る処理だけなら20行いかないのね。
VBAとの違いは、変数の型を指定できないこと。
for ~ next の後にループ変数を入力できないこと。
sub ~ end subの記載のない部分が実行されること。
思った以上に簡単に移植できた。
xcopyのコマンドを作る際に、コピー先フォルダをこれで作っておけば便利かも。
以下、ソースを「MakeDirEX.vbs」などの名前で保存。
コマンドプロンプトなら「mkdir -p 」でいいんじゃね?って話はなしで!!
【エクセル関数】vlookupやmatch関数で、1つ目じゃない値を引っ張る方法
2022年03月29日
vlookup関数やmatch関数は、検索文字にHITした行を探してくれて便利。
ただ、検索文字が複数行にあって、2つ目以降に登場すると簡単には取ってこれない。
今回は、特定のキーワードのある行以降の検索文字を拾ってくるものを作ってみた。
ただ、検索文字が複数行にあって、2つ目以降に登場すると簡単には取ってこれない。
今回は、特定のキーワードのある行以降の検索文字を拾ってくるものを作ってみた。
Zipファイルと空フォルダを消すクリーナバッチ
2022年03月04日
勤務時間が変わってパソコンを全く触れてなかった。久々の更新。
メールのやり取りをすると、添付ファイルは暗号化する関係で、
ダウンロードフォルダにZipファイルが溜まっていく。
また、解凍したファイルはNASに移したりすると、
空のフォルダが残ったりする。
手作業でやるのめんどいので、バッチファイルにしてみたというお話。
まずは、コマンドの確認。
●Zipファイル削除
フォルダ内のZipファイルを消すには、「del *.zip」でいける。簡単。
●空フォルダ削除
コマンド作法わからんので、グーグル先生。
以下を試したらバッチファイルでもうまくいった。
for /f %%A in ('dir /ad /b') do rd %%A
(https://teratail.com/questions/53463より)
以下は、コマンドプロンプトではうまくいくけど、バッチファイルにしたらうまくいかず。
for /f "delims=" %d in ('dir "C:\Program Files (x86)\Microsoft Office" /ad /b /s') do rd "%d"
(https://rms-099.hatenablog.jp/entry/20130121/1359223420より)
コマンドがわかったので、メモ帳にコマンドを書いて、
拡張子を.batにすればできあがり。
これをダウンロードフォルダに置いて、実行すればOK。
空フォルダか確認する手間がなくなるので結構気に入ってます。
以下、ソース
メールのやり取りをすると、添付ファイルは暗号化する関係で、
ダウンロードフォルダにZipファイルが溜まっていく。
また、解凍したファイルはNASに移したりすると、
空のフォルダが残ったりする。
手作業でやるのめんどいので、バッチファイルにしてみたというお話。
まずは、コマンドの確認。
●Zipファイル削除
フォルダ内のZipファイルを消すには、「del *.zip」でいける。簡単。
●空フォルダ削除
コマンド作法わからんので、グーグル先生。
以下を試したらバッチファイルでもうまくいった。
for /f %%A in ('dir /ad /b') do rd %%A
(https://teratail.com/questions/53463より)
以下は、コマンドプロンプトではうまくいくけど、バッチファイルにしたらうまくいかず。
for /f "delims=" %d in ('dir "C:\Program Files (x86)\Microsoft Office" /ad /b /s') do rd "%d"
(https://rms-099.hatenablog.jp/entry/20130121/1359223420より)
コマンドがわかったので、メモ帳にコマンドを書いて、
拡張子を.batにすればできあがり。
これをダウンロードフォルダに置いて、実行すればOK。
空フォルダか確認する手間がなくなるので結構気に入ってます。
以下、ソース
xcopyコマンドを使ったログ回収
2021年12月15日
久々の更新。
先月からコナミスポーツに通い詰めていて滞ってしまった。
今回は、コマンドプロンプトを使ったコピーコマンドの話。
仕事で定期的にログを回収する作業をやっているのだが、
これがまためんどい。
新しい日付のファイルを回収するんだけど、
フォルダに分かれているし、フォルダの中もでかくて簡単には手を出せない。
やりたいことは、フォルダの中の.logファイルのうち、
m月d日以降のファイルをコピーする。
robocopyでいけるかと思ったら、このコマンド日付指定できないのね。
代わりにxcopy使ったらうまくいった。
先月からコナミスポーツに通い詰めていて滞ってしまった。
今回は、コマンドプロンプトを使ったコピーコマンドの話。
仕事で定期的にログを回収する作業をやっているのだが、
これがまためんどい。
新しい日付のファイルを回収するんだけど、
フォルダに分かれているし、フォルダの中もでかくて簡単には手を出せない。
やりたいことは、フォルダの中の.logファイルのうち、
m月d日以降のファイルをコピーする。
robocopyでいけるかと思ったら、このコマンド日付指定できないのね。
代わりにxcopy使ったらうまくいった。