• ベストアンサー

現在時間と、ファイルの作成時間の差分をとる方法

VBAマクロを使用して現在時間と、ファイルの作成時間を比較後、10分前以降に作成したファイルを開かないようにするマクロを作ろうとしています。 下記のような方法で、現在時間と、ファイルの作成時間を取得しましたが、比較する方法(差分を取る方法)がわかりません。 mydateは、2006,02,15,07,16 myfile_dtの方は、2006/1/18 1:11 のような形式で、表示されていますがこのような異なる形式で表示される時間を比較することが出来るのでしょうか。 比較する方法を教えてください。 Dim mydate as integer Dim myfile_dt as integer mydate = Format(Now(), "yyyy,mm,dd,hh,mm") myfile_dt = FileDateTime("aaaa.csv")

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

'バリアントにする Dim mydate Dim myfile_dt mydate = Now() 'そのまま使う myfile_dt = FileDateTime("aaaa.csv") これで比較できるはず

kanon7
質問者

お礼

ご回答ありがとうござました。 早速変数をバイリアントに変更しやってみたところうまくいきました。 ところが、下のようなプログラムを書いたところ、日にちが30日過ぎたファイルでも開いてしまいます。 プログラムに何か不具合があるのでしょうか。教えてください。 Dim mydate As Variant '現在時刻 Dim myfile_dt As Variant 'ファイル作成日 Dim mydiff As Variant '現在時刻-ファイル作成日 Dim t As Variant t = 10  ’10日に設定 mydate = Now() myfile_dt = FileDateTime("aaa.csv") mydiff = mydate - myfile_dt ’ここで10日過ぎたファイルを開く場合終了させたい。 If (mydiff < 0) And (mydiff > t) Then Exit Sub    Workbooks.Open Filename:=("aaa.csv")

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

その他の回答 (3)

  • AlexSuns
  • ベストアンサー率67% (78/115)
回答No.4

#3です 間違えましたorz ×mydiff = DateDiff("d", fileCreatedDate, Date) ↓ ○mydiff = DateDiff("d", myfile_dt, Date)

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

日付/時刻の比較等に関しては「日付/時刻型」を使用するべきでは? あと差分を求めるのであれば、日付関数を使用するべきです 例えば、こんな感じに Dim myfile_dt As Date Dim mydiff As Integer myfile_dt = FileDateTime("aaaa.csv") mydiff = DateDiff("d", fileCreatedDate, Date) If mydiff > 10 Then Exit Sub ※動作検証していないです

kanon7
質問者

お礼

なるほどこんな具合にも出来るんですね。 参考にします。

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

>If (mydiff < 0) And (mydiff > t) Then Exit Sub And 条件を使うと両方の条件が成立する時という条件になり、 0より小さく、かつ、10より大きいは、両方同時には成立しませんので Exit Sub が実行されることはありません。 Or を使ってみてください。

kanon7
質問者

お礼

andではなくorが正解です。間違いです。 お騒がせして申し訳ありませんでした。

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

関連するQ&A

  • FSOでエクセルファイルを作成したい

    FSOでエクセルファイルを作成したいのですが、 ファイルの作成はできますが、作成したファイルが開けません。 Sub 新規Excelファイルを作成する() Dim MyFile As String Dim myFSO As Object MyFile = "管理簿.xlsx" Set myFSO = CreateObject("Scripting.FileSystemObject") With myFSO.CreateTextFile("C:\" & MyFile) .Close End With Set myFSO = Nothing End Sub で、エラーにならずうまくいっています。 が、その出来上がったファイルを開こうとすると 「ファイル形式またはファイル拡張子が正しくありません」 と言う旨のメッセージが表示されます。 何が間違ってますか? よろしくお願いします。

  • EXCELにテキストファイルを読込むマクロ作成

    EXCELにテキストファイルを「カンマ区切り」で読み込みしたいのですが、 下記マクロの内容ではカンマ区切りで正しくインポートされないのですが 作成方法ご伝授お願いいたします。 sub macro1()  dim myFile as string  myfile = application.getopenfilename(filefilter:="テキストファイル(*.txt),*.txt")  if myfile = "False" then exit sub  workbooks.opentext _   filename:=myfile, _   datatype:=xldelimited, _   textqualifier:=xltextqualifierdoublequote, _   tab:=true, _   comma:=true, _   space:=true ’予備  activeworkbook.worksheets(1).move before:=thisworkbook.worksheets(1) end sub

  • 10分おきに自動でバックアップファイルを作成する

    エクセルファイルで 「10分おきに自動でバックアップファイルを作成する」 ということは可能ですか? Sub バックアップ作成() Dim myFSO As Object Dim MyFile As Object Dim WSH As Variant Dim strdate As String Set myFSO = CreateObject("Scripting.FileSystemObject") Set WSH = CreateObject("Wscript.Shell") strdate = Format(Now, "yyyy年mm月dd日hh時mm分") myFSO.CopyFile ActiveWorkbook.FullName, "D:\backup\" & strdate & ".xlsm" Set MyFile = Nothing Set myFSO = Nothing Set WSH = Nothing End Sub これでバックアップは作成できるのですが 「10おきに」というのはどうすればいいのでしょうか?

  • EXCELでテキストファイルを取込むマクロの作成

    EXCELにテキストファイルを「カンマ区切り」で読み込みしたいのですが、 下記マクロの内容でデータはインポートされるのですが、 元のデータが悪いのか「読影日」と「検査日」の区切りが項目が別れてしまい 項目が二つほどずれてしまい正しくインポートされないのですが サンプル画面を添付いたします。 作成方法ご伝授お願いいたします。 sub macro1()  dim myFile as string  myfile = application.getopenfilename(filefilter:="テキストファイル(*.txt),*.txt")  if myfile = "False" then exit sub  workbooks.opentext _   filename:=myfile, _   datatype:=xldelimited, _   textqualifier:=xltextqualifierdoublequote, _   tab:=true, _   comma:=true, _   space:=true ’予備  activeworkbook.worksheets(1).move before:=thisworkbook.worksheets(1) end sub

  • マクロ処理後のファイル名変更について

    マクロでいくつかの処理を行った後、もとのファイル名に 「済+ファイル名」としてファイル名を変更して終了をしたいのですが、 どのようにすればできるのかわかりません。 どなたか教えていただけますか? イメージ) 処理前のファイル名:サラダ.xls、お肉.xls・・・ 処理後のファイル名:済サラダ.xls、済お肉.xls・・・ Dim myPath As String Dim myFile As String Dim w As Workbook Dim s As Worksheet myPath = ThisWorkbook.Path & "\" myFile = Dir(myPath & "*.xls") Do Until myFile = "" If myFile <> ThisWorkbook.Name Then Set w = Workbooks.Open(myPath & myFile) For Each s In w.Worksheets s.Range・・・・・     ・・・・・・・・     ・・・・・・・・ Next w.Close savechanges:=True End If myFile = Dir() Loop MsgBox "完了しました。" End Sub

  • VBA フォルダ内のファイル名一覧

    下のようなコードですが、Dir("C:\見積\*.xls")の部分を このコードを書いてあるブックのあるフォルダの名前をもっと簡単に取得してコードにできないでしょうか。 もうひとつ付け加えたいこともあります。ファイル名一覧にする際、このブックと「XXX.xls」という名前のブック名以外の一覧にしたいのですが、これもお手上げですので、あわせてお願いします。 Sub test() Dim myFile As String Dim fl As Integer myFile = Dir("C:\見積\*.xls") fl = 9 Do While myFile <> "" fl = fl + 1 Cells(fl, 3).Value = myFile myFile = Dir() Loop End sub

  • ファイルのタイムスタンプのPUT(エクセルVBA)

    エクセルのVBAでファイルのタイムスタンプを任意の数字で更新したいと考えています。 現在のタイムスタンプは、 Dim strFILENAME As String Dim strMSG As String strFILENAME = ThisWorkbook.FullName strMSG = FileDateTime(strFILENAME) で、ゲットできたのですが? プットが出来ません。単純に、 FileDateTime(strFILENAME) = strMSG としたら怒られました。 どなたか?詳しい方教えて頂けませんでしょうか? 宜しくお願い致します。 あと、自己努力で解決しようとヘルプで検索すると、FileDateTimeが出てきません。どのようにすれば、FileDateTimeの関連事項で書き込み方法が解るのでしょうか?宜しくお願い致します。

  • ACCESS97で作成したmdbファイルに書き込む為の記述

     ADOを使用してExcelで作成したデータをACCESS97で作成したmdbファイルに書き込む処理を行いたいと思います。 書籍を見ながらコードを記述しているのですが、1,2,の項目については問題なく処理ができるのですが、最後のmdbファイルへの書き込み処理がどうしてもうまくいきません。 主に出力されるエラーは「現在のプロバイダはIndex機能に必要なインターフェイスをサポートしていません。」というものです。いろいろ試行錯誤したのですが解決できませんでした。 やはりACCESS97で作成したmdbファイルだからダメなのでしょうか? 原因と対処方法を教えていただければ幸いです。よろしくお願いします。以下はmdbファイルへの書き込みのサンプルコードです。 Dim myFile As String Dim myTbl As String Dim myRng As Range Dim myCon As New ADODB.Connection Dim myRS As New ADODB.Recordset Dim i As Integer myFile = ThisWorkbook.Path & "\sampleDB.mdb" myTbl = "社員" Set myRng = ThisWorkbook.Worksheets(1).Range("A1").CurrentRegion With myCon .Provider = "Microsoft.Jet.OLEDB.4.0" 'Access(Jet)用のOLE DBプロバイダを使用 .Open myFile End With myRS.Open myTbl, myCon, adOpenStatic, adLockPessimistic, adCmdTableDirect myRS.Index = "社員ID" For i = 2 To myRng.Rows.Count myRS.Seek myRng(i, 1).Value If myRS.EOF Then myRS.AddNew For j = 1 To myRng.Columns.Count myRS.Fields(myRng(1, j).Value).Value = myRng(i, j).Value Next Next myRS.Update myRS.Close Set myRS = Nothing myCon.Close Set myCon = Nothing

  • Excel vbaファイル指定先に保存されない

    マクロをかけたエクセルファイルを、特定の名前を指定(年月を足す)して 「修正後」フォルダを作り、そこへ保存させたいのですが ファイル名の変数設定に「修正後」を入れてもだめなのでしょうか? ****** Sub NEM_Macroループ() ' ' フォント変更、記号変換、テキストボックス、全シート ' Dim myFile As String Dim myPath As String Dim myBook As Workbook Dim mySheet As Worksheet Dim myRange As Range Application.ScreenUpdating = False 'Cドライブに修正後というフォルダを作成します。 MkDir "C:\Users\XXXXXX\Desktop\NEM_macro\修正後" 'フォントを変更するファイルが保存されているフォルダのパスを指定します。 myPath = "C:\Users\XXXXXX\Desktop\NEM_macro" '指定したフォルダ内の全てのExcelファイルに対してループを実行します。 myFile = Dir(myPath & "\*.xlsx") Do While myFile <> "" '各ファイルを開きます。 Set myBook = Workbooks.Open(myPath & "\" & myFile) '全てのワークシートに対してループを実行します。 For Each mySheet In myBook.Sheets 'シート内の全てのセルに対してループを実行します。 Set myRange = mySheet.UsedRange Cells.Font.Name = "MS Pゴシック" Cells.Font.Name = "Arial" Dim 年月 Dim ThisName, NewName Dim MojiCoA As Integer, MojiCoB As Integer 'Format,Year,Month関数を利用します 年月 = Year(Date) & "_" & Month(Date) '拡張子なしのファイル名を取得します MojiCoA = InStrRev(ActiveWorkbook.Name, ".") ThisName = Left(ActiveWorkbook.Name, MojiCoA - 1) 'ファイル名を変数へ設定します NewName = ActiveWorkbook.Path & 修正後 & "\" & ThisName & 年月 & ".xlsx" '作成したWorkbookを名前を付けて、移動先フォルダに保存します ActiveWorkbook.SaveAs Filename:=NewName '次のファイルに移動します。 Next myFile = Dir() Loop End Sub

  • テキストファイルをエクセルに移すマクロのことで?

    以前、複数のテキストファイルをエクセルに移すマクロを教えてもらったのですが、 以下マクロですと、フォルダのパスを指定しないといけません。 今回教えてもらいたいのは、フォルダのパスを指定しなくてもよい方法です。 どういう事かと言うと、仮にディスクトップにフォルダがあるとします。 そのフォルダの中には、マクロが入っているエクセルシートとテキストが入っているフォルダです。 つまり、そのフォルダ内だけで、処理をしたいと考えています。 また、フォルダ名は、その時によって異なります。 今までは、以下の方法を使っていたのですが、ちょっと使いにくいと感じています。 申し訳ありませんが、どなたか教えていただけないでしょうか? Sub Macro() Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") Dim FolderPath As String 'ここのアドレスをファイルが格納されているフォルダのパスに変えてください FolderPath = "C:\Users\・・・" Dim myFile As Object Dim i As Long i = 2 Dim myFolder As Object For Each myFolder In fso.GetFolder(FolderPath).SubFolders For Each myFile In fso.GetFolder(myFolder).Files Cells(i, 4).Value = myFolder Cells(i, 1).Value = myFile.Name Cells(i, 7).Value = fso.OpenTextFile(myFile.Path).ReadAll() i = i + 1 Next Next End Sub Private Sub CommandButton1_Click() End Sub