Excel VBA質問箱 IV

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

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


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

【72377】Loop処理への変換 杏子 12/7/26(木) 6:34 質問[未読]
【72381】Re:Loop処理への変換 UO3 12/7/26(木) 9:30 発言[未読]
【72382】Re:Loop処理への変換 杏子 12/7/26(木) 11:04 質問[未読]
【72383】Re:Loop処理への変換 UO3 12/7/26(木) 11:57 発言[未読]
【72385】Re:Loop処理への変換 杏子 12/7/26(木) 12:07 発言[未読]
【72386】Re:Loop処理への変換 杏子 12/7/26(木) 12:11 お礼[未読]
【72384】Re:Loop処理への変換 UO3 12/7/26(木) 12:07 発言[未読]

【72377】Loop処理への変換
質問  杏子  - 12/7/26(木) 6:34 -

引用なし
パスワード
   おはようございます、以前にマクロのLoop処理で質問させていただきました杏子です。
今回もLoop処理について質問させてください。

売上A~Dのデータがそれぞれ違うBookにcsvデータとして保存されています。
各データの保存数も違います。
これらのデータを新しいBook"売上"にまとめてexcelデータとして保存するにはどうしたらいいでしょうか。
Loop処理を使ってマクロ登録を行いたいです。
また、これからも使っていくために汎用性を持たせたいです。

※補足:1行目には契約先/売上金額…などの項目が入力されており今回は
    まとめる対象とはしていません。

注文が多くて申し訳ありませんが皆さまのお力を貸してください。


Sub Macro1()
'
' Macro1 Macro
'
   
  Workbooks.Open Filename:="H:\形式変換用\売上A.csv"
  Rows("2:2").Select
  Selection.Copy
  Windows("売上.xlsm").Activate
  Rows("1:1").Select
  ActiveSheet.Paste
  Application.CutCopyMode = False
  
  Workbooks.Open Filename:="H:\形式変換用\売上B.csv"
  Rows("2:515").Select
  Selection.Copy
  Windows("売上.xlsm").Activate
  Rows("3:3").Select
  ActiveSheet.Paste
  Application.CutCopyMode = False
  
  Workbooks.Open Filename:="H:\形式変換用\売上C.csv"
  Rows("2:2").Select
  Selection.Copy
  Windows("売上.xlsm").Activate
  Rows("516:516").Select
  ActiveSheet.Paste
  Application.CutCopyMode = False
  
  
  Workbooks.Open Filename:="H:\形式変換用\売上D.csv"
  Rows("2:2").Select
  Selection.Copy
  Windows("売上.xlsm").Activate
  Rows("517:517").Select
  ActiveSheet.Paste
  Application.CutCopyMode = False
'
  
  
  ChDir "H:\形式変換用\Data"
  ActiveWorkbook.SaveAs Filename:="H:\形式変換用\Data\売上.xlsm", FileFormat:= _
    xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End Sub

【72381】Re:Loop処理への変換
発言  UO3  - 12/7/26(木) 9:30 -

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

おはようございます

CSVファイルが、必ず1行目からデータがあり、その2行目から取り込むという前提です。
最後の、自ブックの保存は割愛しています。


Sub Sample()
  Dim myPath As String
  Dim myCsv As Variant
  Dim sh As Worksheet
  Dim z As Long
  
  Application.ScreenUpdating = False
  
  myPath = "H:\形式変換用\"
  Set sh = ThisWorkbook.Sheets("Sheet1") '集約シート
  sh.Cells.ClearContents
  
  For Each myCsv In Array("売上A.csv", "売上B.csv", "売上C.csv")
    Workbooks.Open Filename:=myPath & myCsv
    If z = 0 Then
      z = 1
    Else
      z = sh.UsedRange.Rows.Count + 1
    End If
    ActiveSheet.UsedRange.Offset(1).Copy sh.Cells(z, "A")
    ActiveWorkbook.Close False
  Next
    
  Application.ScreenUpdating = True
  MsgBox "集約が完了しました"
  
End Sub

【72382】Re:Loop処理への変換
質問  杏子  - 12/7/26(木) 11:04 -

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

    回答ありがとうございます。
   このコードで処理はうまくいったんですが、
   Loopを使っての処理はできないのでしょうか。
   わがままを言って申し訳ありません。。。

【72383】Re:Loop処理への変換
発言  UO3  - 12/7/26(木) 11:57 -

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

>   このコードで処理はうまくいったんですが、
>   Loopを使っての処理はできないのでしょうか。
>   わがままを言って申し訳ありません。。。

あのぉぉ・・・・
ループ処理はしているんですが(For Each で)
Do/Loop ということですか?
Do/Loop処理は(今見えている要件だけを見ると)本件にふさわしくありません。
そのフォルダ内のすべてのcsvファイルを名前順に相手にするということなら
Do/Loopが適していますけど。(でも、きっと 杏子 さんのイメージする Do/Loop ではないと思いますが)

Do/Loop は、何回ループさせるかわからない、なので、【ある条件になるまで】ループさせるという場合に
使います。

どうしても、無理やり Do/Loop でやりたいですか?

【72384】Re:Loop処理への変換
発言  UO3  - 12/7/26(木) 12:07 -

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

一応、指定フォルダ内のCSVファイルをすべて扱うという前提でDo/Loop処理で書きました。

Sub Sample2()
  Dim myPath As String
  Dim myCsv As String
  Dim sh As Worksheet
  Dim z As Long
  
  Application.ScreenUpdating = False
 
  myPath = "H:\形式変換用\"
  
  Set sh = ThisWorkbook.Sheets("Sheet1") '集約シート
  sh.Cells.ClearContents
 
  myCsv = Dir(myPath & "*.csv")

  Do While Len(myCsv) > 0
    Workbooks.Open Filename:=myPath & myCsv
    If z = 0 Then
      z = 1
    Else
      z = sh.UsedRange.Rows.Count + 1
    End If
    ActiveSheet.UsedRange.Offset(1).Copy sh.Cells(z, "A")
    ActiveWorkbook.Close False
    myCsv = Dir()
  Loop
  
  Application.ScreenUpdating = True
  MsgBox "集約が完了しました"
 
End Sub

【72385】Re:Loop処理への変換
発言  杏子  - 12/7/26(木) 12:07 -

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

   あ、申し訳ありませんでした。
   すみませんが、Do/Loop での記入法でも表示していただけませんでしょう    か。
   イメージだけでも見てみたいので。。。

【72386】Re:Loop処理への変換
お礼  杏子  - 12/7/26(木) 12:11 -

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

   ありがとうございます!
   とても参考になりました!!

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