• 締切済み

エクセルの名前を自動で変更

20分おきに自動的にデスクトップ上にexcelシートが たまっていくセンサを使っております。 そこで質問ですが、何もせずに放置しておくと自動的に上書き保存 されていくので、デスクトップ上にexcelシートがきたら自動で 名前を変更してくれるようにしたいです。 どのようにすればよいでしょうか? よろしくお願いします。

みんなの回答

  • argument
  • ベストアンサー率63% (21/33)
回答No.7

はじめまして s0570063 さん 問題は解決しましたか?貴方のためにより良いスクリプトを作成しました。 以下のファイルひとつを作成すれば問題は解決します。 ただし前回同様 ファイル名を指定してください originalfilename = "元のファイル名.xls" 監視時間を指定してください。単位はミリ秒です(1000=1秒)。 sleeptime = 10000 もしも監視場所がデスクトップ以外になりそうなら変更してください directory = CreateObject("WScript.Shell").SpecialFolders("desktop") ↓このようにダブルコーテーションで囲んだパスにする directory = "C:\Documents and Settings\user\デスクトップ" [check2.vbs] If LCase(Right(WScript.FullName,11))="wscript.exe" then CreateObject("WScript.Shell").Run "cmd.exe /c start cscript """ & wscript.scriptfullname & """" ,,false else directory = CreateObject("WScript.Shell").SpecialFolders("desktop") originalfilename = "元のファイル名.xls" sleeptime = 10000 wscript.echo "Ctrlキー&Cキーを押すと停止します" On Error Resume Next do while 1 wscript.sleep sleeptime wscript.echo date & time & "監視中" For Each fl In CreateObject("Scripting.FileSystemObject").GetFolder(directory).Files if instr(fl.Name,originalfilename) > 0 then wscript.echo "新しいファイルを検知しました。DateTimeをつけリネームします" de = split(date,"/"):te=split(time,":") fl.Name = left(fl.Name,len(fl.Name)-4) & de(0) & de(1) & de(2) & "_" & te(0) & te(1) & ".xls" end if Next loop end if 実行してみましたか?vbs単品で前回と全く等価の処理となりました。 回答してから思い出しましたが何もbatでCscriptで起動せずともスクリプト自身から自分を判定させてCscriptじゃなければ自身をCscriptで起動すればよいですね。 それからデスクトップパスはfsoで取れましたね。ハードコーディングする意味は無かったですね(まぁハードコーディングの方が何が変数に格納されているかわかりやすいですが)。 処理違い・補足・追加処理等必要でしたらいってください。

s0570063
質問者

お礼

ありがとうございます! 大変助かりました。

全文を見る
すると、全ての回答が全文表示されます。
  • argument
  • ベストアンサー率63% (21/33)
回答No.6

はじめまして s0570063 さん 問題は解決しましたか?締め切っていないということはまだ解決していないのでしょう。貴方のためにスクリプトを作成しました。 必要なのは以下の二つをそれぞれの名前をつけデスクトップに保存し batを起動するだけです。 これはタスクを使ったりしません。また起動すれば任意にとめない限りきちんと動き続けるでしょう(もちろんPCが落ちたらとまりますが)。 以下を回答として提示します。 VBSの中身のみ変更が必要です 貴方のデスクトップパスを指定してください directory = "C:\Documents and Settings\user\デスクトップ" ファイル名を指定してください originalfilename = "元のファイル名.xls" 監視時間を指定してください。単位はミリ秒です(1000=1秒)。 sleeptime = 10000 [監視.bat] cscript check.vbs [check.vbs] if not Right(WScript.FullName,11) = "cscript.exe" then msgbox("バッチから起動してください"):wscript.quit directory = "C:\Documents and Settings\user\デスクトップ" originalfilename = "元のファイル名.xls" sleeptime = 10000 wscript.echo "Ctrlキー&Cキーを押すと停止します" On Error Resume Next do while 1 wscript.sleep sleeptime wscript.echo date & time & "監視中" For Each fl In CreateObject("Scripting.FileSystemObject").GetFolder(directory).Files if instr(fl.Name,originalfilename) > 0 then wscript.echo "新しいファイルを検知しました。DateTimeをつけリネームします" de = split(date,"/"):te=split(time,":") fl.Name = left(fl.Name,len(fl.Name)-4) & de(0) & de(1) & de(2) & "_" & te(0) & te(1) & ".xls" end if Next loop 「監視.bat」を実行してください。 「元のファイル名.xls」という名前のファイルををデスクトップにおきます。すると上記のデフォルト設定ならば10秒後勝手にリネームされましたね? これで貴方は任意の名前のファイルを自動で監視しファイルが来れば自動でリネームするスクリプトを得ました。 処理違い・補足・追加処理等必要でしたらいってください。

s0570063
質問者

お礼

大変遅くなりましたすいません ありがとうございます! さっそく実行してみます

全文を見る
すると、全ての回答が全文表示されます。
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.5

#4の続報です。他アプリが生成するファイルを、実行時の年月時分の名前に付け替えて複写します。ウィルス対策ソフトのスクリプトに対するプロテクトを無効にできるなら、1日以上は動くと思います。日をまたぐ部分は未確認です。 Dim objWMIService Dim strComputer Dim errJobCreated, JobId Dim objNewJob Dim timeSettingString Dim myTask Dim objFSO dim strDestFile dim strPath strPath = "C:\Documents and Settings\?????\デスクトップ\" Set objFSO = CreateObject("Scripting.FileSystemObject") strDestFile = Right("0" & Month(Now), 2) & Right("0" & Day(Now), 2) & Right("0" & Hour(Now), 2) & Right("0" & minute(Now), 2) & ".xls" objFSO.CopyFile strPath & "他アプリが生成するファイル.xls",strPath & strDestFile myTask = "taskTest.vbs" 'このスクリプトの名前、System32に置く timeSettingString = "********" & Right("0" & Hour(Now), 2) & Right("0" & minute(Now), 2) & "00.000000+560" strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set objNewJob = objWMIService.Get("Win32_ScheduledJob") errJobCreated = objNewJob.Create(myTask, timeSettingString, False, , , , JobId) Set objNewJob = Nothing Set objWMIService = Nothing

s0570063
質問者

お礼

遅くなり本当に申し訳ありません。 ありがとうございます!!

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

実用的かどうか大変疑問ですが、ファイルを複写して、自分自身の実行をタスクスケジューラで20分後に設定するスクリプトです。Windows2000での試行です。 (問題点) 1.FSOがウィルス対策ソフトにひっかかる 2.タスクの番号がどんどん増えていくので、どこかでエラーになるかも 3.日をまたぐ対策を取ってない 'タスクスケジューラで、詳細設定/ATサービスのアカウント/システムに設定しておく必要がある Dim objWMIService Dim strComputer Dim errJobCreated, JobId Dim objNewJob Dim timeSettingString Dim myTask Dim fso Set fso = CreateObject("Scripting.FileSystemObject") fso.CopyFile "C:\Documents and Settings\?????\デスクトップ\src.xls","C:\Documents and Settings\?????\デスクトップ\dest.xls" myTask = "taskTest.vbs" 'このスクリプトの名前、Windows2000の場合、System32に置く 'local timeへの変換のための540 + 実行間隔20 -> 560 timeSettingString = "********" & Right("0" & Hour(Now), 2) & Right("0" & minute(Now), 2) & "00.000000+560" strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set objNewJob = objWMIService.Get("Win32_ScheduledJob") errJobCreated = objNewJob.Create(myTask, timeSettingString, False, , , , JobId) 'for Debug 'If errJobCreated = 0 Then ' wscript.echo "登録しました。" & vbCrLf & "ジョブID:" & JobId 'Else ' wscript.echo "登録に失敗しました。" 'End If Set objNewJob = Nothing Set objWMIService = Nothing

全文を見る
すると、全ての回答が全文表示されます。
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.3

ANo.2です。 >マクロで出来れば1番よいと考えていましたが >ありませんでしたのでC++の利用を考えました。 一番はデスクトップにファイルを書き出す際に、ファイル名に日付と時間を利用して 重複しないファイル名をつけていけば上書きされないです。 そのファイルに手を加えられないのであれば、別の方法で同じ事をするしかないかと。 と言ってもC++はわからないんです。

全文を見る
すると、全ての回答が全文表示されます。
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

ANo.1です。 >visual C++を利用しようと考えております。 Excelについての質問ではないようですね。 C++は未経験ですが、20分おきにExcelファイルが出来上がるのなら、 20分おきにファイルの有無を確認してもしファイルがあれば、どこかのフォルダに 移動してリネーム(日付と時間を利用)していけばいいのでは? と思いますけど。

s0570063
質問者

補足

マクロで出来れば1番よいと考えていましたが ありませんでしたのでC++の利用を考えました。 利用目的の関係上、24時間の記録が必要ですので 自動でリネームをする必要があるのです・・・。

全文を見る
すると、全ての回答が全文表示されます。
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

>20分おきに自動的にデスクトップ上にexcelシートが >たまっていくセンサを使っております。 この制御はExcelで行なっているのですか? それとも別のソフトで行なっているのですか? もし別のソフトで行なっているのであれば、そのソフトを改良すればいいように思いますけど。

s0570063
質問者

補足

visual C++を利用しようと考えております。 よろしくお願いします。

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

関連するQ&A

  • 名前を変えて保存

    windows XPでC++を利用しています。 24時間の活動を記録をするため、センサを利用しています。 今使っているセンサはSTARTを押してSTOPを押すと full01.xls とデスクトップ上に記録されます。 しかし、20分たつと自動的にSTOPしてしまい、再度STARTを クリックしないと記録ができないようになっています。 (このことはマクロの自動クリックで解決できました。) そこで質問ですが、このときfull01.xls の名前を変えなければ 上書き保存されてしまい、以前に記録したデータが消えてしまいます。 なので、デスクトップ上にfull01.xls が来た場合に自動で名前を 変換できるようして、変換した後にfull01を削除したいのですが (20分おきに記録されていくので連番にできるようにしたい。  full02,full03・・・・・・full100) C++はまったくの初心者ですので どなたかよろしくお願いします。

  • Excelマクロでpdfを自動作成したい

    複数のExcelシートからなるブックを、pdfとして出力しています。 現在はJustSystemのJustpdf2ドライバを使っているのですが、これだとマクロで完全自動化できないことが判明しました。 ・PDFのフアイル名と保存場所 ・上書きかどうか をいちいち聞いてきます。 Excelマクロで完全自動化するには、 ・ファイル名、保存場所をマクロで指定できる。もしくはExcelファイルと同じ場所に同じファイル名で作成する ・1シート目は上書き、2シート目からは現存のpdf (前シートのpdf)に続けて保存できるように、マクロで「上書き」か「続けて保存」かを指定できる ことが必要なのですが、JustSystemに問い合わせたところ、Justpdf2では無理とのことでした。 上記のように、複数シートからなるExcelブックを、マクロで完全自動でPDF化できるドライバ、方法がありましたら、お教えください。

  • エクセル:マクロ:保存時に連番をつける

    3シートついたエクセルファイル(雛形)をいつも使うのですが、2シート目のみをデスクトップにある「新しいフィオルダ」に保存したいのですが、マクロで「2シートに行って移動、名前をつけて保存」という過程を記憶させたのですが、いつも同じ名前でしか保存を記憶してないため、「上書きしますか」と出てきてしまいます。自動的に連番かなにかがついて上書きしないで全部ためときたいのですがどうしたらいいでしょうか。 よろしくお願いします。

  • Excelシートの自動更新

    Excel2013ブックAでシートの内容変更したのちリンクしている別のExcel2013ブックB~Dを開き更新をするボタンを押し更新して上書き保存しているが更新Excelブックが数部ありいちいちExcelブックを開き更新するのが面倒でなんとかExcel2013ブックA内変更後リンクExcel2013ブックB~Dの更新をボタン一括で自動更新したいのですがボタンにマクロ登録(VBAコード入力)とかでできますか。宜しくお願いします。

  • エクセル2010 シート数変更

    エクセル2010使用しています。新規作成後のシート数が3シートで変わりません。 ファイル ⇒ オプション ⇒ ブックのシート数 【X】枚。【X】枚にならず3枚。 あるサイトに象:Excel シート枚数の変更方法は、あちこちに情報があるので設定されている方は多いと思うのですが、設定したにも関わらず1枚にならない場合があって気持ち悪い思いをしたことはありませんか? デスクトップやフォルダウィンドウで右クリックして表示されるショートカットメニューから、[新規作成]-[Microsoft Excelワークシート]を選択して作成した場合です。 この場合、作成されたシートの枚数は初期設定のまま3枚なのです。せっかく[オプション]ダイアログで変更したのにかかわらず。 これは、Excelを起動しておいてから新規作成するのと、デスクトップなどで新規作成するのとでは、処理の方法が異なっているために発生する現象です。 以下の操作を行っておけば、フォルダウィンドウで右クリック-新規作成を行った場合のシート枚数も変更することができます。 ▼操作手順 :右クリック-新規作成からのシート枚数変更 「ShellNew」フォルダを探す  (OSのインストールされているフォルダ下にあります)  ↓ 「ShellNew」フォルダにあるExcelファイルを開く  (Excel 2002の場合「Excel9.xls」というファイル)  ↓ シートの枚数を変更  ↓ 上書き保存を行ってからExcelを終了 つまりデスクトップなどフォルダウィンドウでの、右クリック-新規作成で作られるExcelファイルは、「ShellNew」フォルダにあるファイルをコピーして作成しているということです。 Cドライブ ⇒ windows ⇒ ShellNew ⇒ EXCEL12 ⇒ 開く ⇒ ファイル ⇒ オプション ⇒ ブックのシート数 【X】枚 ⇒ 上書き保存 ⇒ 読み取り専用です・・・OKをおして・・。⇒ アクセス許可がありません。代わりに【ドキュメント】ホルダに保存しますか? この先が不安で実施していませんが、手順が合っているのでしょうか。違う方法があるのでしょうか。 ※OKWAVEより補足:「ひかりTVのサービスやISPぷらら」についての質問です。

  • Excel 2007 名前定義の変更

    Excel2007で名前の定義のあるシートを同じブック内でコピーして、 コピーした側の名前を「名前の管理」から編集をしたいのですが、 範囲がシートになってしまっていて、ブックに変更したいのですができません。 何か方法ありますでしょうか?

  • 名前をつけてエクセルで自動で保存

    質問させていただきます。  エクセルで名前をつけて自動で保存するマクロか、もしくは他のやり方でも構いませんが、以下を作りたいと思います。  (1)スキャナーで10枚読み込んだとします。  (2)そのうちの1枚の画像を画面の左上ピッタシに合わせて他のエクセルのシートのA1の入力値を名前にして、保存します。  (3)(2)を2枚目以降同じ要領で二枚目はA2を名前に、3枚目はA3の・・・と繰り返し、図がなくなったら止まることをしたいのですが・・・  どのようにしたらよろしいでしょうか? :補足:  素人ですので、質問文がわけのわからないものになっています;よろしくお願いいたします。

  • ExcelXPでの自動保存

    自動保存について質問です。 Excel2000の時は自動保存の設定をすると、開いているファイルに上書きで保存してたと思うのですが ExcelXPになってから、自動保存はファイルが破損した時に回避するというような物になってると思うのですが、ExcelXPでもExcel2000の時のように自動的に上書きの保存が出来るような方法は無いでしょうか? 簡単な質問かもしれませんが宜しくお願いいたします。

  • エクセル ファイルの名前の変更

    エクセルのファイルをMy documentに保存しています。 名前を変更しようとすると 「拡張子を変更すると、ファイルが使えなく可能性があります。変更しますか?」 と警告が出ます。 ちなみに、ファイルの一つをコピーしてその名前を変更してみたら、通常、名前の前に表示されるエクセルの記号?(緑のX)が別のものになります。でも、そのファイルは開くことができるし、上書き保存もできます。 保存ファイル全てについて上記の警告がでます。ファイルは「○○.xls」の状態で保存されており、プロパティは「アーカイブ」にクリックしてあります。 自分では何も変えたつもりはないのですが、いつを境にこうなってしまったのか…以前の名前を普通に変更できる状態に戻したいです。 どなたか教えて下さい。お願いします。

  • Excelについて

    Excel2003を使用しています。 質問(1) 例えば“A”というシートのA1セルに“A”以外のシートのシート名を 表示させることは可能でしょうか? 質問(2) あるセルに[=TODAY]で日付を表示させています。 このファイルは毎月更新→上書き保存しているのですが 客先から毎月のデータも保存するよう依頼があったので 元々のファイル名に『○月分』と書き加えて、上書き保存のものとは 別のMOに保存しています。 この保存用のMOを『○月分』とは違う×月に開くと、セルの表示は 『×月』になってしまいますが、これを保存したときと同じように 表示させる方法はあるのでしょうか? また、こういう場合は[=TODAY]は使わないほうがいいのでしょうか? 以上、よろしくお願いします。

専門家に質問してみよう