Excel VBA質問箱 IV

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

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


12472 / 13645 ツリー ←次へ | 前へ→

【10205】ファイルを開いたときに YOSHI 04/1/12(月) 2:47 質問
【10206】Re:ファイルを開いたときに かみちゃん 04/1/12(月) 8:15 回答
【10211】Re:ファイルを開いたときに YOSHI 04/1/12(月) 18:25 発言
【10214】Re:ファイルを開いたときに kein 04/1/12(月) 19:42 回答
【10218】Re:ファイルを開いたときに YOSHI 04/1/13(火) 0:22 質問
【10220】Re:ファイルを開いたときに kein 04/1/13(火) 12:15 回答
【10221】Re:ファイルを開いたときに kein 04/1/13(火) 12:22 発言
【10233】Re:ファイルを開いたときに YOSHI 04/1/13(火) 23:32 お礼
【10234】Re:ファイルを開いたときに kein 04/1/13(火) 23:59 回答
【10238】Re:ファイルを開いたときに YOSHI 04/1/14(水) 0:34 質問
【10240】Re:ファイルを開いたときに かみちゃん 04/1/14(水) 7:44 回答
【10269】Re:ファイルを開いたときに YOSHI 04/1/15(木) 0:45 質問
【10289】Re:ファイルを開いたときに かみちゃん 04/1/16(金) 0:11 回答
【10290】Re:ファイルを開いたときに YOSHI 04/1/16(金) 1:11 質問
【10307】Re:ファイルを開いたときに かみちゃん 04/1/17(土) 0:16 回答
【10327】Re:ファイルを開いたときに YOSHI 04/1/19(月) 2:04 質問
【10334】Re:ファイルを開いたときに Seraph 04/1/19(月) 13:28 回答
【10346】Re:ファイルを開いたときに YOSHI 04/1/20(火) 0:12 お礼

【10205】ファイルを開いたときに
質問  YOSHI  - 04/1/12(月) 2:47 -

引用なし
パスワード
   初めて投稿させて頂きます。教えて下さい。

ファイルを開いたときに月が翌月に替わっていたら、ある一定の処理(データの移動)を行いたいと思っています。ですが、なにぶん初心者なもので、わかりませんので教えてください。お願いします。

【10206】Re:ファイルを開いたときに
回答  かみちゃん  - 04/1/12(月) 8:15 -

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

>ファイルを開いたときに月が翌月に替わっていたら、ある一定の処理(データの移動)を行いたいと思っています。

現在の日付と、何かを比較すればいいかと思うのですが・・・
何と比較するのですか?
ファイルの最終更新日付ですか?それとも、どこかのセルの値なのでしょうか?
それによって、違ってきますので、教えてください。

【10211】Re:ファイルを開いたときに
発言  YOSHI  - 04/1/12(月) 18:25 -

引用なし
パスワード
   ▼かみちゃん さん:
返信ありがとうございます。言葉足らずですみません。
毎日、データ処理を行っていて、シート1に日ごとに整理しているのですが、月が翌月に変わったときに先月分のデータを他のシート2に移動して今月分のデータをまたシート1に貼り付けたいと思っています。

比較したいのはファイルと開いたときの現在の日付と、データの最終更新の日付
です。よろしくお願いします。

>現在の日付と、何かを比較すればいいかと思うのですが・・・
>何と比較するのですか?
>ファイルの最終更新日付ですか?それとも、どこかのセルの値なのでしょうか?
>それによって、違ってきますので、教えてください。

【10214】Re:ファイルを開いたときに
回答  kein  - 04/1/12(月) 19:42 -

引用なし
パスワード
   最終保存日の月が1ヶ月前なら、シート1をコピーしてシート2に貼りつける。
というコードは

Sub Auto_Open()
  Dim x As Integer, y As Integer

  x = Month(FileDateTime(ThisWorkbook.FullName))
  y = Month(Date)
  If x = 12 Then
   If y = 1 Then
     Sheets("Sheet1").Cells.Copy Sheets("Sheet2").Range("A1")
   End If
  Else
   If y - x = 1 Then
     Sheets("Sheet1").Cells.Copy Sheets("Sheet2").Range("A1")
   End If
  End If
End Sub

Sub Auto_Close()
  ThisWorkbook.Save
End Sub

こんな感じですね。標準モジュールに入れて下さい。

【10218】Re:ファイルを開いたときに
質問  YOSHI  - 04/1/13(火) 0:22 -

引用なし
パスワード
   ▼kein さん:
返信ありがとうございます。また、質問なんですが、データを判別して月によって貼り付けるセルの位置を指定することは出来ますでしょうか?
たとえば1月分のデータはA1,2月分はA2という風に。
よろしくお願いします。

>最終保存日の月が1ヶ月前なら、シート1をコピーしてシート2に貼りつける。
>というコードは
>
>Sub Auto_Open()
>  Dim x As Integer, y As Integer
>
>  x = Month(FileDateTime(ThisWorkbook.FullName))
>  y = Month(Date)
>  If x = 12 Then
>   If y = 1 Then
>     Sheets("Sheet1").Cells.Copy Sheets("Sheet2").Range("A1")
>   End If
>  Else
>   If y - x = 1 Then
>     Sheets("Sheet1").Cells.Copy Sheets("Sheet2").Range("A1")
>   End If
>  End If
>End Sub
>
>Sub Auto_Close()
>  ThisWorkbook.Save
>End Sub
>
>こんな感じですね。標準モジュールに入れて下さい。

【10220】Re:ファイルを開いたときに
回答  kein  - 04/1/13(火) 12:15 -

引用なし
パスワード
   >1月分のデータはA1,2月分はA2
つまり、月 = 行番号 ということになるのだから・・
>Sheets("Sheet1").Cells.Copy Sheets("Sheet2").Range("A1")


Sheets("Sheet1").Cells.Copy Sheets("Sheet2").Cells(x, 1)

とすればいいのでは ?
2箇所とも同じように修正して下さい。

【10221】Re:ファイルを開いたときに
発言  kein  - 04/1/13(火) 12:22 -

引用なし
パスワード
   いや、それではダメですね。コピー元が全セルになっているので、貼りつけ先は
A1 以外では出来ませんね。それより A1,A2・・と貼りつけるということは、
コピー元の範囲が一行だけなんですか ? それが曖昧だから回答できなくなります。
コピー元の範囲を正しく書いて下さい。例えば 2行目全体ということなら

Sheets("Sheet1").Range("2:2").Copy Sheets("Sheet2").Cells(x, 1)

で、良いわけですが・・。

【10233】Re:ファイルを開いたときに
お礼  YOSHI  - 04/1/13(火) 23:32 -

引用なし
パスワード
   ▼kein さん:
返信遅くがなってしまってたいへん申し訳ありません。
たびたび私の説明不足のためにご迷惑をおかけしてすみませんでした。
kein さんが書いてくださったもの使用してうまくいくことが出来ました。
本当にありがとうございました。

>いや、それではダメですね。コピー元が全セルになっているので、貼りつけ先は
>A1 以外では出来ませんね。それより A1,A2・・と貼りつけるということは、
>コピー元の範囲が一行だけなんですか ? それが曖昧だから回答できなくなります。
>コピー元の範囲を正しく書いて下さい。例えば 2行目全体ということなら
>
>Sheets("Sheet1").Range("2:2").Copy Sheets("Sheet2").Cells(x, 1)
>
>で、良いわけですが・・。


ご迷惑ついでにもうひとつ質問よろしいでしょうか?
データ処理を行う際に、指定フォルダのテキストファイル開いてデータを抽出しているのですが、その指定フォルダ内には日ごとのファイルがあり、データを開く際にたびたび同じテキストファイルを開いてしまうので、区別するために、フォルダの更新日時の最新のテキストファイルを選択することは出来ないでしょうか?
よろしくお願いします。

【10234】Re:ファイルを開いたときに
回答  kein  - 04/1/13(火) 23:59 -

引用なし
パスワード
   >データを抽出している
の処理が分からないので、いちおう C:\My Documents で、最新のテキストの名前と
更新日時を取得するコードを書いておきます。

Sub MyNewText()
  Dim x As Integer

  With Application.FileSearch
   .NewSearch
   .LookIn = "C:\My Documents"
   .filename = "*.txt"
   .LastModified = msoLastModifiedAnyTime
   .FileType = msoFileTypeAllFiles
   If .Execute() > 0 Then
     x = .FoundFiles.Count
     MsgBox .FoundFiles(x) & _
     vbLf & "更新日時 = " & _
     FileDateTime(.FoundFiles(x))
   End If
  End With
End Sub

【10238】Re:ファイルを開いたときに
質問  YOSHI  - 04/1/14(水) 0:34 -

引用なし
パスワード
   ▼kein さん:

本当に申し訳ございません。私はこのようにファイルを開いています。
この中にどのようにしたらフォルダの更新日時の最新のファイルが開きますでしょうか?
なにとぞよろしくお願いします。

 Dim DataFileName As String
  Dim Path As String
  Dim ext_Name As String
  Dim OpenFileName As String
  Dim Process_Name As String
  Dim Name As String
 
  Dim i As Integer
  Dim j As Integer
  Dim k As Integer
  Dim RowsCount As Integer
 
  DataFileName = "倉庫管理.xls"
  
'データファイル = "C:\My Documents\*.f01"
  Path = "C:\My Documents"
  ext_Name = "\*.f01"
  OpenFileName = Dir(Path & ext_Name)
  
'データファイルを開き、コピーする
  Workbooks.Open FileName:=Path & "\" & OpenFileName
  Cells.Select
  Selection.Copy
  
'ストックファイルの "sheet1" に貼り付ける
  Windows(DataFileName).Activate
  Sheets("sheet1").Select
  Cells.Select
  ActiveSheet.Paste


>>データを抽出している
>の処理が分からないので、いちおう C:\My Documents で、最新のテキストの名前と
>更新日時を取得するコードを書いておきます。
>
>Sub MyNewText()
>  Dim x As Integer
>
>  With Application.FileSearch
>   .NewSearch
>   .LookIn = "C:\My Documents"
>   .filename = "*.txt"
>   .LastModified = msoLastModifiedAnyTime
>   .FileType = msoFileTypeAllFiles
>   If .Execute() > 0 Then
>     x = .FoundFiles.Count
>     MsgBox .FoundFiles(x) & _
>     vbLf & "更新日時 = " & _
>     FileDateTime(.FoundFiles(x))
>   End If
>  End With
>End Sub

【10240】Re:ファイルを開いたときに
回答  かみちゃん  - 04/1/14(水) 7:44 -

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

keinさん、フォローありがとうございます。

> この中にどのようにしたらフォルダの更新日時の最新のファイルが開きますでしょうか?

keinさんのコードは、FileSearchオブジェクトを使っていますので、詳しくは、下記のURLでも参照して調べていただきたいのですが、具体的には次のようにします。
http://www2.moug.net/cgi-bin/technic.cgi?exvba+TI06010051
http://www.asahi-net.or.jp/~zn3y-ngi/YNxv9192.html

以下の部分を書き換えます。

>   DataFileName = "倉庫管理.xls"
>   
> 'データファイル = "C:\My Documents\*.f01"
>   Path = "C:\My Documents"
>   ext_Name = "\*.f01"
>   OpenFileName = Dir(Path & ext_Name)
>   
> 'データファイルを開き、コピーする
>   Workbooks.Open FileName:=Path & "\" & OpenFileName

'最新のテキストファイルを取得する。
  With Application.FileSearch
   .NewSearch
   .LookIn = "C:\My Documents" ' 検索対象フォルダ
   .filename = "*.f01" ' 検索対象ファイル
   .LastModified = msoLastModifiedAnyTime
   .FileType = msoFileTypeAllFiles
   If .Execute() > 0 Then
     x = .FoundFiles.Count
     OpenFileName = .FoundFiles(x)
   Else
     MsgBox "ファイルは見つかりませんでした。"
     Exit Sub ' 処理を終了する
   End If
  End With
'データファイルを開き、コピーする
 Workbooks.Open FileName:=OpenFileName

【10269】Re:ファイルを開いたときに
質問  YOSHI  - 04/1/15(木) 0:45 -

引用なし
パスワード
   ▼かみちゃん さん keinさん :
返信本当にありがとうございます。とても勉強になりました。
教えていただいたものを使ってテキストファイルを開く事が出来ました。

ですが、今度は最後に使い終わったデータファイルを閉じようとしたのですが、
どうしても閉じてくれません。いろいろ調べたのですが、どうしても
わかりません。これが最後の質問になると思います。 
最後まで私にお力をお貸し下さい。よろしくお願いします。


>'最新のテキストファイルを取得する。
>  With Application.FileSearch
>   .NewSearch
>   .LookIn = "C:\My Documents" ' 検索対象フォルダ
>   .filename = "*.f01" ' 検索対象ファイル
>   .LastModified = msoLastModifiedAnyTime
>   .FileType = msoFileTypeAllFiles
>   If .Execute() > 0 Then
>     x = .FoundFiles.Count
>     OpenFileName = .FoundFiles(x)
>   Else
>     MsgBox "ファイルは見つかりませんでした。"
>     Exit Sub ' 処理を終了する
>   End If
>  End With
>'データファイルを開き、コピーする
> Workbooks.Open FileName:=OpenFileName

【10289】Re:ファイルを開いたときに
回答  かみちゃん  - 04/1/16(金) 0:11 -

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

>ですが、今度は最後に使い終わったデータファイルを閉じようとしたのですが、
>どうしても閉じてくれません。いろいろ調べたのですが、どうしても

どのようなコードを書いて、閉じようとしているのでしょうか?
ブックを閉じるには、Closeメソッドを使います。
アクティブブックを閉じる場合
ActiveWorkbook.Close
全てのブックを閉じる」場合はWorkbooksコレクションオブジェクトを使います。
Workbooks.Close

【10290】Re:ファイルを開いたときに
質問  YOSHI  - 04/1/16(金) 1:11 -

引用なし
パスワード
   ▼かみちゃん さん:
返信ありがとうございます。いろいろ調べて下記のようにしようと思って
やってみたんですが、うまくいきません。
よろしくお願いします。

'データファイルを閉じる
  Workbooks(OpenFileName).Close SaveChanges:=False
  OpenFileName =


>どのようなコードを書いて、閉じようとしているのでしょうか?
>ブックを閉じるには、Closeメソッドを使います。
>アクティブブックを閉じる場合
>ActiveWorkbook.Close
>全てのブックを閉じる」場合はWorkbooksコレクションオブジェクトを使います。
>Workbooks.Close

【10307】Re:ファイルを開いたときに
回答  かみちゃん  - 04/1/17(土) 0:16 -

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

「うまくいかない」のは、どううまくいかないのでしょうか?
何かエラーが出ますか?
変数OpenFileNameは、どのような値になっているのでしょうか?

次のURLに参考になると思いますが、いかがでしょうか?
http://www.officetanaka.net/excel/vba/file/file03.htm

【10327】Re:ファイルを開いたときに
質問  YOSHI  - 04/1/19(月) 2:04 -

引用なし
パスワード
   ▼かみちゃん さん:
返信ありがとうございます。いろいろ調べたのですが、わかりません。

以前、かみちゃん さんから教えていただいたものを使ってデータファイルを
開いてデータを抽出し、Closeを使ってデータファイルを閉じようとしても
閉じてくれません。どうしたらいいですか?

'最新のテキストファイルを取得する。
  With Application.FileSearch
   .NewSearch
   .LookIn = "C:\My Documents" ' 検索対象フォルダ
   .filename = "*.f01" ' 検索対象ファイル
   .LastModified = msoLastModifiedAnyTime
   .FileType = msoFileTypeAllFiles
   If .Execute() > 0 Then
     x = .FoundFiles.Count
     OpenFileName = .FoundFiles(x)
   Else
     MsgBox "ファイルは見つかりませんでした。"
     Exit Sub ' 処理を終了する
   End If
  End With
'データファイルを開き、コピーする
 Workbooks.Open FileName:=OpenFileName


>何かエラーが出ますか?
>変数OpenFileNameは、どのような値になっているのでしょうか?

【10334】Re:ファイルを開いたときに
回答  Seraph  - 04/1/19(月) 13:28 -

引用なし
パスワード
   ▼YOSHI さん:

試しに開いたらすぐに閉じてみては?

>'データファイルを開き、コピーする
> Workbooks.Open FileName:=OpenFileName

上記のコードを、↓こんな感じにしてみる

  Dim wb As Workbook

  'データファイルを開き、コピーする
  Set wb = Workbooks.Open(Filename:=OpenFileName)
  '閉じる
  wb.Close SaveChanges:=False
  Set wb = Nothing

これは私の想像ですが、、、

上記コードで閉じる事が出来た場合は、おそらくどこかでこのWorkbookへの参照を
開放していないのではないかという疑いがあると思います。

もし、Workbookをグローバル変数により参照しているようでしたらその辺を確認し
てみてはいかがでしょうか?

【10346】Re:ファイルを開いたときに
お礼  YOSHI  - 04/1/20(火) 0:12 -

引用なし
パスワード
   ▼かみちゃん さん:
▼kein さん:
▼Seraph さん:
今まで返信本当にありがとうございました。やっと完成することが出来ました。
初心者の私に今までお付き合いいただきましてありがとうございました。

>試しに開いたらすぐに閉じてみては?
>
>>'データファイルを開き、コピーする
>> Workbooks.Open FileName:=OpenFileName
>
>上記のコードを、↓こんな感じにしてみる
>
>  Dim wb As Workbook
>
>  'データファイルを開き、コピーする
>  Set wb = Workbooks.Open(Filename:=OpenFileName)
>  '閉じる
>  wb.Close SaveChanges:=False
>  Set wb = Nothing
>
>これは私の想像ですが、、、
>
>上記コードで閉じる事が出来た場合は、おそらくどこかでこのWorkbookへの参照を
>開放していないのではないかという疑いがあると思います。
>
>もし、Workbookをグローバル変数により参照しているようでしたらその辺を確認し
>てみてはいかがでしょうか?

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