Excel VBA質問箱 IV

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

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


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

【40993】別ファイルへのコピー&ペーストの仕方 ゆき太 06/7/27(木) 14:38 質問[未読]
【40995】Re:別ファイルへのコピー&ペーストの仕方 Kein 06/7/27(木) 15:05 回答[未読]
【41000】Re:別ファイルへのコピー&ペーストの仕方 ゆき太 06/7/27(木) 15:42 お礼[未読]

【40993】別ファイルへのコピー&ペーストの仕方
質問  ゆき太  - 06/7/27(木) 14:38 -

引用なし
パスワード
   VBA初心者で知識が乏しく、色々なコードを参考に作っているですが
行き詰ってしまいました。
お力をお貸しいただけたら、大変ありがたいです。

フォルダー(DATA)の中に入っている、
ファイル名「時間外」で始まるすべてのファイルに処理をします。
ファイルの中身はシートで分かれていて、すべて同じフォーマットの表
が入っています。

ファイルごとに入っている表のデータを別ファイル「表題.xls」に
貼り付け、1つの表のデータにしたいと思っています。
(下にどんどん貼り付けていく)
その際、シート名「サンプル」とA5にデータのないシートに関しては
シートを削除しています。


Sub MyWorkbooks()
  
  Dim sFolderName As String
  Dim sFileName As String
  
  '対象フォルダの設定
  sFolderName = ThisWorkbook.Path & "\DATA\"

  '"時間外"で始まるファイル名を取得
  sFileName = Dir$(sFolderName & "時間外*.xls")

  'ファイル名の列挙が終わるまで実行します
  Do Until sFileName = ""

  'ブックを開きます
  Workbooks.Open sFolderName & sFileName

   'ブックに対する処理
  Proc
  
  '次のファイル名を取得
  sFileName = Dir$()
 Loop

End Sub

'ブックに対する処理
Sub Proc()
  Dim intLoop As Integer
  Dim LastRow As Integer
  Dim myfile As String
  Dim HLastRow As Integer
 
  myfile = ActiveWorkbook.Name
  For intLoop = 1 To Worksheets.Count
    If Worksheets(intLoop).Range("A5").Value = "" _
      Or Worksheets(intLoop).Name = "サンプル" Then
    If Worksheets.Count > 1 Then Worksheets(intLoop).Delete
    Else
      Range("A65536").End(xlUp).Select
      LastRow = ActiveCell.Row
      Range("A5:T" & LastRow).Copy
      Windows("表題.xls").Activate
      Cells(65536, 1).End(xlUp).Offset(1).Select
      HLastRow = ActiveCell.Row
      Range("A" & HLastRow).Select
      ActiveSheet.Paste
      Workbooks("myfile.xls").Activate
    End If
  Next intLoop
End Sub

「表題.xls」に貼り付けるまでは、なんとか動いたのですが
「表題.xls」からコピー元のファイルに戻って、
次のシートも同じ処理をさせるところが、分かりません。
どうか、ご指導お願い致します。

【40995】Re:別ファイルへのコピー&ペーストの仕方
回答  Kein  - 06/7/27(木) 15:05 -

引用なし
パスワード
   Sub MyWorkbooks()
  Dim sFolderName As String, sFileName As String
  Dim WB As Workbook, Sh As Worksheet
  Dim i As Integer
  
  sFolderName = ThisWorkbook.Path & "\DATA\"
  sFileName = Dir$(sFolderName & "時間外*.xls"
  Set Sh = Workbooks("表題.xls").Worksheets(1)
  With Application
    .ScreenUpdating = False
    .DisplayAlerts = False
  End With
  Do Until sFileName = ""
    Set WB = Workbooks.Open(sFolderName & sFileName)
    For i = WB.Worksheets.Count To 1 Step -1
     With WB.Worksheets(i)
       If IsEmpty(.Range("A5").Value) Or _
       .Name = "サンプル" then
        .Delete
       Else 
        .Range("A5", .Range("A65536").End(xlUp)) _
        .Resize(, 20).Copy Sh.Range("A65536") _
        .End(xlUp).Offset(1)
       End If
     End With
    Next i
    WB.Close True: Set WB = Nothing
    sFileName = Dir$()
  Loop
  With Application
   .ScreenUpdating = True
   .DisplayAlerts = True
  End With
  Set Sh = Nothing: MsgBox "処理を終了しました", 64
End Sub

で、どうでしょーか ?

【41000】Re:別ファイルへのコピー&ペーストの仕方
お礼  ゆき太  - 06/7/27(木) 15:42 -

引用なし
パスワード
   希望通りのものができあがりました。
教えていただいたコードの意味を1つ1つ理解して、
これからの勉強に役立てていきたいと思います。
本当にありがとうございました。

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