Excel VBA質問箱 IV

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

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


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

【14134】複数のEXCELファィルのデータをひとつに... fryday 04/5/21(金) 17:54 質問[未読]
【14140】Re:複数のEXCELファィルのデータをひとつに... IROC 04/5/21(金) 18:21 回答[未読]
【14141】Re:複数のEXCELファィルのデータをひとつに... IROC 04/5/21(金) 18:26 回答[未読]
【14311】Re:複数のEXCELファィルのデータをひとつに... fryday 04/5/25(火) 18:19 お礼[未読]

【14134】複数のEXCELファィルのデータをひとつに...
質問  fryday  - 04/5/21(金) 17:54 -

引用なし
パスワード
   質問投稿2回目です、
前回は大変丁寧にご指導頂きまして有難う御座いました。

さてマクロの自動記録を使って簡単なマクロなら作れるのですが・・
たぶんその方法だと難しいと思い投稿致しました
宜しくご指導お願い致します。

あるフォルダに定型化した原本EXCELファィルから作成した
複数(1000ぐらい)のEXCELファィルが保存してあります
またこのEXCELファィルは複数シートで構成されています。
さらに別の計算データ用EXCELファィルとリンクもしています。

この複数EXCELファィル指定シートの指定セルから値を取得したいのです、
値取得したいセルの数はは30ぐらいです。
そして取得したセル値を新しいEXCELファィル(CSVでも可)
にまとめたいのですが。
尚、取得セルは計算式を設定しており、その計算の結果でほしいのです。
最終目的は、まとめたデータで統計を取りたいためです。

まとめると・・・
1.新規ファィルを作成し、一行目に項目名A,B,C,D,E・・・設定する
2.ファィルを開く・・開かなくて可能でしょうか?
3.指定セルの値を、新規ファィルの指定項目の2行目に送る、これを30回繰り返す
4.ファィルを閉じる
5.2.と3.をフォルダにある保存されたファィル分繰り返す、但し行はずれていく。
6.新規ファィルに名前を付けて保存する

私の頭に浮かぶのはfile openとfornextぐらいなので宜しくご指導お願い致します。


お願いしておいて大変勝手なのですが、
私22日と23日が出張のため閲覧できません、
ご解答いただいた場合に、お礼のコメントが24日になると思います
申し訳ありませんが、お礼が遅れることを何卒ご容赦願います。m(_ _)m

【14140】Re:複数のEXCELファィルのデータをひとつ...
回答  IROC  - 04/5/21(金) 18:21 -

引用なし
パスワード
   >1.新規ファィルを作成し、一行目に項目名A,B,C,D,E・・・設定する
マクロの自動記録でできます。

>2.ファィルを開く・・開かなくて可能でしょうか?
開く必要がありますが、開いた後に非表示にすることができます。
開く処理は、マクロの自動記録でできます。

しかし、指定したフォルダのファイル名をdir関数で取得し、
そのファイルを開く。
これを、そのフォルダ内のxlsファイル数だけ、
Do〜Loop等によりループ処理する事になります。

>3.指定セルの値を、新規ファィルの指定項目の2行目に送る、これを30回繰り返す
「指定セル」の範囲は、どこになりますか?シート名は?


最下行は、Range("A65536").End(xlup).Offset(1).Row で取得できます。
(セルA65536 で ctrl + ↑ して、ジャンプしたセルの1個下)


>4.ファィルを閉じる
マクロの自動記録でできます。

>6.新規ファィルに名前を付けて保存する
マクロの自動記録でできます。

【14141】Re:複数のEXCELファィルのデータをひとつ...
回答  IROC  - 04/5/21(金) 18:26 -

引用なし
パスワード
   フォルダを指定して、ファイル名、シート名を取得。のサンプルです。

非常に似ている処理なので、参考になると思います。

フォルダの中に、xlsファイルを何個か用意してお試し下さい。

'Application.ScreenUpdating = False
のコメントを解除すると画面表示の更新が停止して
ちらつかなくなります。

Sub Sample()
Dim myObj As Object
Dim myFileName As String
Dim myDir As String
Dim mySheet As Worksheet
    
'Application.ScreenUpdating = False
    
With ThisWorkbook.ActiveSheet
    
Set myObj = CreateObject("Shell.Application"). _
BrowseForFolder(0, "フォルダを選択してください", 0)
If myObj Is Nothing Then Exit Sub
  
  
  myDir = myObj.Items.Item.Path & "\"
  myFileName = Dir(myDir & "*", vbHidden + vbSystem)
  
  
  Do
    Workbooks.Open myDir & myFileName
    

    For Each mySheet In ActiveWorkbook.Worksheets
      .Cells(Rows.Count, 1).End(xlUp).Offset(1).Value = myFileName
      .Cells(Rows.Count, 2).End(xlUp).Offset(1).Value = mySheet.Name
    Next mySheet
    
    Workbooks(myFileName).Close False
    myFileName = Dir()
    
  Loop Until myFileName = vbNullString
  
  
  .Range("A1").Value = "ファイル名"
  .Range("B1").Value = "シート名"
  .Columns("A:B").AutoFit
  
'Application.ScreenUpdating = True
End With

End Sub

【14311】Re:複数のEXCELファィルのデータをひとつ...
お礼  fryday  - 04/5/25(火) 18:19 -

引用なし
パスワード
   IROCさん有難う御座いました〜

出張が伸びておりまして本日帰社いたしました。
早速質問箱を覗いたところ2回もレスを頂いたのに
書き込みが遅れて大変申し訳ありませんでした。

サンプル拝見いたしましたぁ
確かに私の希望の処理とよく似ています。

For・・・Nextの部分を
必要データのセル情報に置き換えて
.Range("A1").Value = "ファイル名"
.Range("B1").Value = "シート名"
の部分を私の指定したい項目名に書き換えれば
何とか私の低いスキルでも旨くいきそうな感じがします。

まずは早速動作させてみます
本当に(^人^)感謝です♪
結果報告か質問になるか分りませんが、
必ずまた書き込みさせて頂きますので宜しくお願い致します。

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