Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5551 / 13646 ツリー ←次へ | 前へ→

【50192】フォルダー内の該当ブックを探し、指定範囲のデータをコピーする Mari 07/7/13(金) 19:45 質問[未読]
【50197】Re:フォルダー内の該当ブックを探し、指定... かみちゃん 07/7/13(金) 19:56 発言[未読]
【50203】Re:フォルダー内の該当ブックを探し、指定... Mari 07/7/13(金) 21:57 質問[未読]
【50204】Re:フォルダー内の該当ブックを探し、指定... かみちゃん 07/7/13(金) 22:21 発言[未読]
【50208】Re:フォルダー内の該当ブックを探し、指定... Mari 07/7/13(金) 23:45 お礼[未読]

【50192】フォルダー内の該当ブックを探し、指定範...
質問  Mari  - 07/7/13(金) 19:45 -

引用なし
パスワード
   今晩は。会計処理の一部ですが、ぜひ教えてください。

毎日、日計処理をしています。
保存の形態はフォルダ「日計表07-05月分」に、ブック名は「残高表05-20」と
いうようなファイルを保存しています。

前月の21日から当月の20日をサイクルに月単位の集計をするとき

例えば5月の20日は日曜、19日は土曜でデータ(保存ファイル)は有りません
このような場合、ファイル(データ)の存在する18日のデータを取得したいので
すが・・・
日にちの宣言をDim i As Integerとして
For〜Nextを使って該当月の20日からファイルがあるところまで遡り
検索したいのですが、その方法を教えてください。
現在、以下のコードまで作成しています。 

Sub 集計 ( )
 
  Dim str1 As String, str2 As String
  Dim i As Integer
  Dim WB As Workbook
  
  Const PFol As String = "F:\" 

  dt1 = DateAdd("m", -2, Date) '2ヶ月前表示 
   
  For i = 20 To 15 Step -1  ’←20〜15日にファイル(データ)
   'があればそれを活用したいのです。
  If・・・ ←ここでファイルがあれば、のコードを入れたいのですが・・・

  str1 = PFol & "日計表" & Format(dt1, "yy-mm") & "月分\" & _
           "残高表" & Format(dt1, "mm-" & i) & ".xls"
  ’MsgBox str1
  
  Set WB = Workbooks.Open(Filename:=str1)
      WB.Worksheets(1).Range("E6:E220").Copy _
         Workbooks("月次集計.xls").Worksheets(3).Range("B6")
      WB.Close False
  Set WB = Nothing
  Next
  
End Sub 

 20日のブックが無いとき、19日のブック→更に18日のブックのデータ(ファイル=ブック)に遡り、ブックがあればそのブックの指定範囲を「月次集計」にコピーすることが目的です。

よろしくお願いします。 

【50197】Re:フォルダー内の該当ブックを探し、指...
発言  かみちゃん E-MAIL  - 07/7/13(金) 19:56 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>毎日、日計処理をしています。
>保存の形態はフォルダ「日計表07-05月分」に、ブック名は「残高表05-20」と
>いうようなファイルを保存しています。
>
>前月の21日から当月の20日をサイクルに月単位の集計をするとき
>
>例えば5月の20日は日曜、19日は土曜でデータ(保存ファイル)は有りません
>このような場合、ファイル(データ)の存在する18日のデータを取得したいので
>すが・・・

私も同様のことを以下のような感じでしています。

Sub 集計2()

  Dim str1 As String, str2 As String
  Dim i As Integer
  Dim WB As Workbook
  Dim dt1 As Date
 
  Const PFol As String = "F:\"

  dt1 = DateAdd("m", -2, Date) '2ヶ月前表示
  
  '←20〜15日にファイル(データ)があればそれを活用したいのです。
  str1 = ""
  For i = 20 To 15 Step -1
   str1 = PFol & "日計表" & Format(dt1, "yy-mm") & "月分\" & _
        "残高表" & Format(dt1, "mm-" & i) & ".xls"
   'ファイルの存在確認
   If Dir(str1) <> "" Then Exit For
   str1 = ""
  Next

  If str1 <> "" Then
   MsgBox "次のファイルを開きます。" & vbCrLf & str1
 
   Set WB = Workbooks.Open(Filename:=str1)
   WB.Worksheets(1).Range("E6:E220").Copy _
    Workbooks("月次集計.xls").Worksheets(3).Range("B6")
   WB.Close False
   Set WB = Nothing
  Else
   MsgBox "ファイルが見つかりませんでした"
  End If
End Sub

【50203】Re:フォルダー内の該当ブックを探し、指...
質問  Mari  - 07/7/13(金) 21:57 -

引用なし
パスワード
   ▼かみちゃん さん:
早速ご回答ありがとうございます。
悩んでいましたのです。本当にうれしい回答を頂き感謝しています。
ファイルが無いとき、つまり日曜日や休日などのとき5日も遡れば
十分かと思いコードを書きましたが、

ファイルが無いときにFlagを立てるのか?SelectCaseのようなもので
対応するとできるか・・・など色々試して見たのですが、数字の低いファイルへ
遡れず困っていたのです。早速3日後会社でテストしてみます(Moを
自宅でつないでいないものですので)。

このファイルの存在の確認の仕方を覚えたく思います。
で・・・一つ質問ですが、今このコードを動作させるとこのファイルの確認の
この部分でエラー(実行時エラー52 ファイル名または番号が不正です)が
でました。Moを入れていないからでしょうか、入れていない場合でも
Exitするのでは?っと思ったりしているのですが・・・如何でしょう?

>   'ファイルの存在確認
>   If Dir(str1) <> "" Then Exit For
>   str1 = ""
>  Next
>
>  If str1 <> "" Then
>   MsgBox "次のファイルを開きます。" & vbCrLf & str1

それから後1点教えていただきたいのですが・・・
実は21日から20がサイクルの1ヶ月の単位として
前月の20日締めから、今月の20日の締めが一サイクルですので、
更に、今月の20日分を
dt2 = DateAdd("m", -1, Date)として、更に同じようなコードを
書けば良いのですね。これはまた会社でテストした結果を報告させて
いただきます。
つまり日報以外に、一ヶ月の差(変動)を「集計」しているのです。

分かりづらい表現で申しわけありませんです。

でも、丁寧に見ていただき、回答頂き本当に感謝しています。
後日また報告させていただきます。何とか物にしたいと
意気込んでいます。
ではよろしくお願いします。

【50204】Re:フォルダー内の該当ブックを探し、指...
発言  かみちゃん E-MAIL  - 07/7/13(金) 22:21 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>今このコードを動作させるとこのファイルの確認の
>この部分でエラー(実行時エラー52 ファイル名または番号が不正です)が
>でました。Moを入れていないからでしょうか、入れていない場合でも
>Exitするのでは?っと思ったりしているのですが・・・如何でしょう?

まず、MOなど、外部媒体からブックのOpen/Closeをしようとしていますか?
それであれば、根本的に考え直したほうがいいです。
その理由は、以下を参照してください。
http://support.microsoft.com/kb/411154/ja
この例は、フロッピーディスクですが、MOディスクも抜き差しできる媒体
であることでは同じだと思います。

「ファイル名または番号が不正です」は特に関係ないように思います。
MsgBox str1
でファイル名を確認したほうがいいと思います。

>実は21日から20がサイクルの1ヶ月の単位として
>前月の20日締めから、今月の20日の締めが一サイクルですので、
>更に、今月の20日分を
>dt2 = DateAdd("m", -1, Date)として、更に同じようなコードを
>書けば良いのですね。これはまた会社でテストした結果を報告させて
>いただきます。
>つまり日報以外に、一ヶ月の差(変動)を「集計」しているのです。

よくわかりませんが、
今月の20日から前月の21日までのファイルが存在する限り、順番に開いてはシ閉じて
を繰り返せばいいのではないでしょうか?
繰り返す数は、31日分さかのぼる形で、前月の21日に到達したら終わりという
感じにします。

> 早速3日後会社でテストしてみます(Moを自宅でつないでいないものですので)。

MOをつないでいるとかつないでいないとかは、関係ありません。
MOの代わりに、ハードディスク内に適当にファイルを用意して、OPEN/COLSEするくらい
のテストはできると思います。
自宅で仕事はしない主義なら別ですけど・・・

【50208】Re:フォルダー内の該当ブックを探し、指...
お礼  Mari  - 07/7/13(金) 23:45 -

引用なし
パスワード
   かみちゃん さん
全て完了しました。

>MOをつないでいるとかつないでいないとかは、関係ありません。
>MOの代わりに、ハードディスク内に適当にファイルを用意して、OPEN/COLSEするくらい
>のテストはできると思います。

そうですね、このアイディアが出てきませんでした。
それとパスをいじると、戻すときに整合性が取れずMsgBoxでパスのチェックに
時間を取って・・・この考えが間違っていたことをきずきました。
アドバイスありがとうございました。
全ての動作が完璧に終わりました。
またよろしくお願いします。

5551 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free