• ベストアンサー

増え続ける書類に採番をしてくれるようなソフトウェア

こちらの項目では初めてです。宜しくお願いいたします。 いろいろと電子データが増えてきたのですが、整理が混乱して参りました。 そこで、 *動作させると特定ディレクトリの中のファイルに番号を振る *検索ツールとして、其の番号とファイルが一致し、削除された場合番号が被らず反映する。 ちょっと言い方が正しいか分からないのですが、何か美味い方法が在ればご教授ください。 WindowsXP/2000です。

質問者が選んだベストアンサー

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.6

#01~03です。もう問題が解決しているかも? と思いつつ再度の掲載をお許しください。 先日のEXCELマクロにタイムスタンプ、ファイルサイズ表示機能を追加しましたのでupします。自分でも使っていますが、最低限のファイル管理はできると思います。 もしサブディレクトリまで一括して表示したい場合は、VBAをいじってみてください。では。 Sub ファイル名管理() ' ファイル管理簡易ツール  2006.06.17 by zap35 Dim strFolder, buf As String, idxROW, idxI As Long Dim FSO, pswM Application.ScreenUpdating = False If Range("a1") = "" Then strFolder = InputBox("検索するフォルダ名を" & Chr$(13) & "フルパスで入力してください" _ & Chr$(13) & "例 c:\windows\system32\") If Right(strFolder, 1) <> "\" Then strFolder = strFolder & "\" End If Range("a1:e1") = Array(strFolder, "削除FLG", "ファイル名", "最終更新", "サイズ(Byte)") Else strFolder = Range("a1") End If 'ファイル一覧作成 idxROW = Range("a65536").End(xlUp).Row '最終行取得 buf = Dir(strFolder & "*") Do While buf <> "" pswM = 0 pswM = Application.Match(buf, ActiveSheet.Range("c:c"), 0) If IsError(pswM) Then 'ファイル名追加 idxROW = idxROW + 1 Cells(idxROW, 1) = idxROW - 1 Cells(idxROW, 2) = "" Cells(idxROW, 3) = buf Else Cells(idxROW, 2) = "" '削除フラグクリア End If buf = Dir() Loop '削除ファイル消し込み idxROW = Range("a65536").End(xlUp).Row Set FSO = CreateObject("Scripting.FileSystemObject") 'File情報取得準備 For idxI = 2 To idxROW buf = Dir(strFolder & Cells(idxI, 3)) If buf = "" Then '削除済み Cells(idxI, 2) = "削除" Cells(idxI, 4) = "" Cells(idxI, 5) = "" Else Cells(idxI, 2) = "" Cells(idxI, 4) = FSO.GetFile(strFolder & Cells(idxI, 3)).DateLastModified Cells(idxI, 5) = Format(FSO.GetFile(strFolder & Cells(idxI, 3)).Size, "#,###,###,###,##0") End If Next idxI Application.ScreenUpdating = True End Sub

ggi
質問者

お礼

遅れましたが有り難うございます。 じりじり使ってみたいと思います。 ただ、マクロの有無を聞かれると、間違って採番用書類を開いた上司が首を捻りそうです(笑)

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (5)

  • lawson
  • ベストアンサー率44% (29/65)
回答No.5

No4で記載したやり方は、そのつど、ファイルの変化するたびに、管理情報を作成するやり方です。 図書館に例えるなら、受付で、本の貸し出し返却や、会員登録を行うたびに、 システム内の管理情報を逐次変更するやり方です。 このやり方の弱点は、既にある未管理状態のデータを管理する形に一括でもっていく手段がない。 都度更新する時に、なにかの原因で、漏れが発生すると、現実と管理情報で不整合がおきる。 逐次更新をとるかは、一括更新をとるかは、 トリガーの形態に関するお話です。 「いろいろと電子データが増えてきたのですが」とありますが、 既に、未管理の状態のデータがあるわけで、それらを管理済み状態にもっていくために、 一括更新のトリガーも用意すべきでしょう。 トリガーの形態がどうあろうが、 ひとつひとつのデータをあらわすオブジェクトが自身に 管理情報を登録・更新するためのロジックを持っていれば、 管理情報を登録・更新するためのロジックは再利用可能です。 なので、逐次更新をとるかは、一括更新をとるかに 関係なく、 1データオブジェクト単位で、正しく、管理情報の登録・更新が行われるように 作るのがよいかもしれない。 そして、 「既に、己自身が管理済みになっている場合に、最後に管理状態になったときから、 データの状態に変化がない場合はなにもしない」 などのチェックロジックをいれておくことで、 一括更新をした時に、同じデータについて、重複管理されることがなくなり、 いつでも、手軽に一括更新のトリガーを引いて、 不整合が起きてない状態を保障するアクションが手軽におこなえるでしょう。 一括更新のトリガーを引いたら、毎回、毎回、すべの管理情報の更新をする 仕様にしてもいいのであれば、特に必要ないですが、 その際、「データが最後に変更されたのがいつかで、検索したい」などの要求に 影響がでるかもしれません。 また、逐次更新の運用中に一括更新を行うユースケースに対応するために、 自身を管理状態にするロジックを走らす前に自身をロックしてから、処理を 行うようにすることで、不整合もなくなります。 このように、制御の鍵を握る部分を個々に分散するように考えると いいと思います。 各データオブジェクトの自身を管理状態にならしめる部分の開発とは、別に、 トリガー部分を用意する必要があります。 逐次更新も必要であると感じるならば、 No4を参考にすればよいとおもいます。 一括更新のトリガーとするなら、 コンソールアプリでコマンドを用意したり。 簡単なパラメータを入力できるダイアログをもったアプリを用意してもいい。 >*検索ツールとして、其の番号とファイルが一致し、削除された場合番号が被らず反映する データを整理する目的として、 1) 検索や、発見を容易にしたいから 2) データを削除したい時に、どのデータが古くて、いらないのかを判別したいから。 3) どのユーザがいつ、どのように作成した。 4) 最後に作成したユーザで検索したい。 5) 最後に変更したユーザで検索したい。 6) データの中にある情報によって、検索および、整理したい。 など、いろいろな目的があるとおもいます。 「いろいろと電子データが」とありますが、 どのような電子データを管理しているのかは、わかりませんが。 どのような目的で整理したいかがはっきりしないと、作りようがないのでは? 単に、ファイル名に連番をつけたい。削除時の歯抜けた番号を整理して、連番を 振りなおしたいだけなら、 http://www.woodensoldier.info/computer/CSharp.htm#66 ここのURLのやり方などを参考にして、ファイル名の一覧を リストに保管、片っ端からリネームしていくような一括バッチのプログラムを 組めばよいだけの話だとおもいます。 No4は、もちろん、これまで、いろいろ私が書いてきた記述は全部忘れてかまわないです。 そこまで、する必要もないからです。 上記(1)~(6)のようないろいろな管理情報があるのであれば、 電子データのファイル名を直接いじらずに、 ふぁいるのフルパスまたは、ドキュメントルートからの相対パスと、 各種管理情報との対応づけの関係について、データベース設計をしてみて、 No4で説明した ########################################################################### 管理したいデータが複雑であれば、 Access MDBファイル、または、 フリーのDBサーバをたてて、先ほどの 「データの種類を抽象化したオブジェクトの振る舞い」から、DB層のモジュールを使用する形を とればよいとおもいます。 ########################################################################### のようなことをすればよいでしょう。 なので、プログラムを実際に組む以前に、何をしたいかがはっきりしないと、 方向性や難易度がまったくよめません。 ところが、不思議なことに、 トリガー部分のフレームワークとか、 データオブジェクトの更新部分の抽象概念などは、 管理情報の詳細には、関係なく、独立的に再利用可能な概念だと思います。 そのあたりがおもしろいですね。 以上です。

全文を見る
すると、全ての回答が全文表示されます。
  • lawson
  • ベストアンサー率44% (29/65)
回答No.4

>*動作させると特定ディレクトリの中のファイルに番号を振る >*検索ツールとして、其の番号とファイルが一致し、削除された場合番号が被らず反映する。 この機能を持つソフトウェアを探しているのでしょうか? それとも、この機能をプログラミングする方法を 知りたいのでしょうか? プログラミング方法であれば、すぐ思いつく方法として、.NETアプリケーションですが・・・。 FileSystemWatcherというコンポーネントがあります。 http://dobon.net/vb/dotnet/file/filesystemwatcher.html 特定のディレクトリを監視して、そこにファイルが作られたり、ファイルの内容が変更されたり、削除されたり、したイベントを発生してくれるオブジェクトです。 常駐のWindowsサービスがこのFileSystemWatcher を生成して、初期化処理等を行い、 常駐サービス自体は、CPUを使用しない サスペンドロックで、そのまま休止してしまえば よいと思います。 私がもしやるとしたら、以下のようにすると思います。 扱いたいデータの種類ごとに、クラス設計を効率よくして、データに対する処理は、そのデータの種類を抽象化したオブジェクトの振る舞いとするような方向性で、実装していき。 それらのオブジェクトの振る舞いを FileSystemWatcher クラスのイベント変数にデリゲート登録するような 実装をすれば良いと思います。 管理したいデータが複雑であれば、 Access MDBファイル、または、 フリーのDBサーバをたてて、先ほどの 「データの種類を抽象化したオブジェクトの振る舞い」から、DB層のモジュールを使用する形を とればよいとおもいます。 ただし、上記URLのサイトでも書いてますが、 FileSystemWatcherクラスはWindows NT系のOSでしか使えません。 FileSystemWatcherは、監視しているディレクトリについて再帰的に下の階層も監視するかどうかを現すBoolean型のプロパティがあった記憶があります。 以上です。

参考URL:
http://dobon.net/vb/dotnet/file/filesystemwatcher.html
ggi
質問者

補足

まとめてコメントさせていただくという事で。やはり組んでみるとか言うのが早そうですか。 環境はWindowsXPですのでまずはやってみます。ただ、正直プログラム関係では素人+実際使えないと意味が無いので、じりじり行ってみます。

全文を見る
すると、全ての回答が全文表示されます。
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

#01です。もう一箇所不具合がありましたので再掲いたします。WinXP+EXCEL2003では動作確認済みですがMacでは確認していません Option Explicit Sub ファイル名管理() Dim strFolder, buf As String, idxROW, idxI As Long Dim idxM Application.ScreenUpdating = False If Range("a1") = "" Then strFolder = InputBox("検索するフォルダ名を" & Chr$(13) & "フルパスで入力してください" _ & Chr$(13) & "例 c:\windows\system32\") If Right(strFolder, 1) <> "\" Then strFolder = strFolder & "\" End If Range("a1") = strFolder Else strFolder = Range("a1") End If idxROW = Range("a65536").End(xlUp).Row '最終行 'ファイル一覧作成 buf = Dir(strFolder & "*") Do While buf <> "" idxM = 0 idxM = Application.Match(buf, ActiveSheet.Range("c:c"), 0) If IsError(idxM) Then 'ファイル名追加 idxROW = idxROW + 1 Cells(idxROW, 1) = idxROW - 1 Cells(idxROW, 2) = "" Cells(idxROW, 3) = buf Else Cells(idxROW, 2) = "" '削除フラグクリア End If buf = Dir() Loop '削除ファイル消し込み idxROW = Range("a65536").End(xlUp).Row For idxI = 2 To idxROW buf = Dir(strFolder & Cells(idxI, 3)) If buf = "" Then '削除済み Cells(idxI, 2) = "削除" Else Cells(idxI, 2) = "" End If Next idxI Application.ScreenUpdating = True End Sub

全文を見る
すると、全ての回答が全文表示されます。
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

#01です。最終行-1は Application.ScreenUpdating = True の誤りでした

全文を見る
すると、全ての回答が全文表示されます。
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

EXCELのこんなお手軽マクロはいかがですか 以下のVBAを標準モジュールシートにペースとして実行してみて下さい a1にフォルダ名を書き込みますから、最初はまっさらなシートで実行してください Option Explicit Sub ファイル名管理() Dim strFolder, buf As String, idxROW, idxI As Long Dim idxM Application.ScreenUpdating = False If Range("a1") = "" Then strFolder = InputBox("検索するフォルダ名を" & Chr$(13) & "フルパスで入力してください" _ & Chr$(13) & "例 c:\windows\system32\") If Right(strFolder, 1) = "\" Then Range("a1") = strFolder Else Range("a1") = strFolder & "\" End If Else strFolder = Range("a1") End If idxROW = Range("a65536").End(xlUp).Row '最終行 'ファイル一覧作成 buf = Dir(strFolder & "*") Do While buf <> "" idxM = 0 idxM = Application.Match(buf, ActiveSheet.Range("c:c"), 0) If IsError(idxM) Then 'ファイル名追加 idxROW = idxROW + 1 Cells(idxROW, 1) = idxROW - 1 Cells(idxROW, 2) = "" Cells(idxROW, 3) = buf Else Cells(idxROW, 2) = "" '削除フラグクリア End If buf = Dir() Loop '削除ファイル消し込み idxROW = Range("a65536").End(xlUp).Row For idxI = 2 To idxROW buf = Dir(strFolder & Cells(idxI, 3)) If buf = "" Then '削除済み Cells(idxI, 2) = "削除" Else Cells(idxI, 2) = "" End If Next idxI Application.ScreenUpdating = False End Sub

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 特定フォルダのファイルを復元できないようにしたい

    windowsXPで、特定フォルダのファイルを、復元ツールを使っても復元できないようにしたいのですが、削除ツールを使う以外に方法はないのでしょうか? 削除した直後に復元ツールを使ったとしても、復元できるファイルの一覧に出ないようにしたいのですが・・・ そのような設定を、ある特定のフォルダにだけ設定するのは可能でしょうか? 何かコマンドを実行すれば可能と聞いた事があるのですが

  • 重複するディレクトリを検索して削除

    複数のHDDから重複するディレクトリを検索して削除出来るアプリはありませんか? 重複するファイルでは無く、ディレクトリが対象です。 文献ファイルを複数のHDDに保存していますが、  同じディレクトリ名のフォルダーが複数あるようで整理(削除)が必要です。 重複ファイルを検索して削除するのでは項目が多くて時間が必要で   フォルダー毎の削除の方が効率が良くなります。 ディレクトリの重複検索については、フォルダー名とサイズが同一を基本とします。

  • JSでの特定ディレクトリでのファイル数の取得

    ご覧いただきありがとうございます。 主題の件にてご質問させていただきます。 JSで特定ディレクトリ内のファイル数を取得を現在試みております。 目的としては、特定ディレクトリ内のファイル名と現在のファイル数が一致しており、 デイレクトリ内のファイルを呼び出すための前提条件を達成することです。 JSでの相対pathの指定はできましたが、 ディレクトリ内のファイル数を調査する関数など、 使わなければいけないものが皆目見当がつきません。 有識者の方、ご教授いただければと思います。

  • WindowsXPバッチファイル作成方法

    WindowsXPで下記の条件のバッチファイルを作成したいと思っています。 バッチファイルはタスクで動作させ日次で実行する予定です。 ・特定フォルダ内の3日前のファイルを全て削除 ・特定フォルダ内に1日あたり50ファイル程度が新規に作成されていく。 ・ファイル名称はyyyymmdd….txt お手数ですがどなたかご教授頂けますと助かります。 よろしくお願い致します。

  • ファイルが削除できません。

    初心者ですがご教授お願いいたします。 本日、ハードディスクを整理していたところ心当たりのないファイル(ファイルの名前がとても長い)が見つかりました。おかしいと思いファイルを削除しようと右クリックした所、「開く・WMPに追加する・送る」という3つの項目しか出てきません。その他のファイルは普通に「削除」の項目が出てきます。DELキーでも反応せず。ドラッグ&ドロップでも無理。 そこで、IEで調べたところ「コマンドプロンプトから消す」という方法(8.3形式で削除する方法)を見つけ実行するも削除できず。 このような場合どのように削除すればよろしいのでしょうか?? ちなみに、デスクトップタイプ・windowsXP・pentium4・メモリ1Gです。 よろしくお願いいたします。

  • アプリケーションの削除において、消されなかったファイルについて

    WindowsXPプロフェッショナルを使っています。アプリケーションの追加と削除を使用して(アンインストーラーを使用しないで)、アプリケーションを削除した場合、消されなかったディレクトリやファイル、などが残り、Windowsの起動が遅くなったり、ハードディスクの容量の無駄になるという事を聞いたのですが、使われないファイル、または、消しても害の無いファイルを特定する方法はあるのでしょうか?教えてください。お願いします。

  • MS-DOSコマンドでディレクトリの中身を一括削除する方法

    MS-DOSコマンドでディレクトリの中身を一括削除する方法を教えてください。MS-DOSのみで動作するPCのHDDがDATAでいっぱいになってしまったので整理しています。複雑なディレクトリ構造になっていてdel、copy、rd、moveだけでは膨大な手間がかかってしまいます。xcopyで一括バックアップは取ったのですがそのdataを削除するのに苦労しています。ディレクトリの中身(ファイル及びサブディレクトリ)を丸ごと削除もしくは移動するコマンドは無いのでしょうか?有れば是非教えてください。もしくはそれに代わるMS-DOS上で動作する便利なファイラなどが有れば教えてください。よろしくお願いいたします。

  • ファイル名の表示

    ファイルの整理や確認をしたいのですが、 ディレクトリ内のファイルと、その中の複数のサブディレクトリ内の ファイルを同時に表示することが可能なファイル管理ソフトはないでしょうか。 階層が増えると混乱してしまう自分がわるいのですが・・・。 よろしくお願いします。

  • ファイル名の特定文字だけ削除(トリミング)

    先日、大量のファイルを整理したのですが、重要と思われるファイルのファイル名の末尾に、後で検索しやすいようにと思い、適当な英数半角の目印をつけました。 ところが後で不都合が出てきまして、この部分だけを削除したいのですが、そのようなことが可能なフリーウェアはございませんでしょうか。拡張子や空白部分の削除が可能なツールはかなりあるようなのですが。 ディレクトリをまたいで、該当ファイルをまとめてドラッグ&ドロップできるものがいいです。 宜しくお願いします。

  • JScriptでファイル一覧

    こんにちは。Windows2000で、HTAを使っての簡単なツールを作っています。 JavaScriptのカテゴリに投稿するのもどうかと思いましたが、JScriptのカテゴリがなかったもので。 さて、あるディレクトリ内にある、ファイルの一覧を、サブディレクトリを含めて全て取得するにはどうしたらいいでしょうか? .GetFileSystemInfosとか使えばいいようですが、いかんせんJScriptは初心者で、具体的な使いかたがわかりません。 ファイル一覧を取得したら、そこから特定のファイル名にマッチしたものだけをコピーしたいと思っています。 ご教授、おねがいします...

このQ&Aのポイント
  • 購入したDCPシリーズのプリンタドライバをインストールしてもプリントできない問題について相談
  • 子供が高校から支給されたレノボ端末にプリンタドライバをインストールしてもプリントできない問題が発生。ブラザーオンラインの停止との関係性を疑問に思っている
  • Windows11環境での無線/有線LAN接続において、購入したDCPシリーズのプリンタドライバをインストールしてもプリントできない問題が発生している
回答を見る