Excel VBA質問箱 IV

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

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


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

【39147】シートを連続して結合するには つか 06/6/19(月) 11:08 質問[未読]
【39149】Re:シートを連続して結合するには Blue 06/6/19(月) 11:15 発言[未読]
【39150】Re:シートを連続して結合するには つか 06/6/19(月) 11:35 お礼[未読]
【39154】Re:シートを連続して結合するには Blue 06/6/19(月) 11:41 発言[未読]
【39156】Re:シートを連続して結合するには つか 06/6/19(月) 11:52 お礼[未読]
【39159】Re:シートを連続して結合するには Blue 06/6/19(月) 13:22 発言[未読]
【39163】Re:シートを連続して結合するには つか 06/6/19(月) 14:32 お礼[未読]
【39164】Re:シートを連続して結合するには Blue 06/6/19(月) 14:37 質問[未読]
【39169】Re:シートを連続して結合するには つか 06/6/19(月) 15:03 発言[未読]
【39171】Re:シートを連続して結合するには Blue 06/6/19(月) 15:28 発言[未読]
【39172】Re:シートを連続して結合するには つか 06/6/19(月) 15:37 お礼[未読]
【39178】Re:シートを連続して結合するには Blue 06/6/19(月) 15:53 発言[未読]
【39189】Re:シートを連続して結合するには つか 06/6/19(月) 16:39 お礼[未読]
【39190】Re:シートを連続して結合するには Blue 06/6/19(月) 16:42 質問[未読]
【39193】Re:シートを連続して結合するには Blue 06/6/19(月) 16:57 発言[未読]
【39194】Re:シートを連続して結合するには つか 06/6/19(月) 17:01 お礼[未読]
【39199】Re:シートを連続して結合するには Blue 06/6/19(月) 17:29 発言[未読]
【39200】Re:シートを連続して結合するには Blue 06/6/19(月) 17:33 発言[未読]
【39204】Re:シートを連続して結合するには つか 06/6/19(月) 18:29 お礼[未読]
【39195】Re:シートを連続して結合するには Kein 06/6/19(月) 17:01 発言[未読]
【39291】Re:シートを連続して結合するには つか 06/6/21(水) 16:23 お礼[未読]

【39147】シートを連続して結合するには
質問  つか E-MAIL  - 06/6/19(月) 11:08 -

引用なし
パスワード
   はじめての質問です。
複数あるエクセルのファイル(シートはひとつ)をひとつのファイルに
まとめる処理を行いたいのですが、うまくいきません。
実際の作業はフォルダーの中にあるエクセルファイル(100ファイル程度)
を次々と開いてそれらのファイルを一つのファイルにまとめて名前をつけて
保存するという作業です。
よろしくお願いします。

【39149】Re:シートを連続して結合するには
発言  Blue  - 06/6/19(月) 11:15 -

引用なし
パスワード
   ▼つか さん:
>うまくいきません。
どのようなコードを書いて、どううまくいかないのか説明してくださると、
アドバイスしやすいと思います。

>実際の作業はフォルダーの中にあるエクセルファイル(100ファイル程度)
>を次々と開いてそれらのファイルを一つのファイルにまとめて名前をつけて
>保存するという作業です。
100ファイルの中にあるシート名は一意でしょうか?
ならば、Dir関数でExcelファイルを列挙し、開いて、保存したいファイルに追加
していく流れになります。
この処理でどこが具体的にわからないのでしょうか?
(全部ワカリマセンはやめてください。ここまではわかるのですがという感じで)

【39150】Re:シートを連続して結合するには
お礼  つか E-MAIL  - 06/6/19(月) 11:35 -

引用なし
パスワード
   ▼Blue さん:
早速のご回答ありがとうございます。
実は全くの初心者ですので、WEBにあった下記のプログラムを実行
しましたが、次々とファイル開くのみで、結合させていく
ことが出来ません。ちなみにファイル名もシート名も一意ではありません。


Dim wb As Workbook
 Dim ws As Worksheet
 Dim i As Long
 With Application.FileSearch
   .LookIn = "C:"       'フォルダーのパス
   .Filename = "*.xls"
   If .Execute > 0 Then
     For i = 1 To .FoundFiles.Count
       Set wb = Workbooks.Open(Filename:=.FoundFiles(i))
        For Each ws In wb.Worksheets
             
          'ここでファイルを結合させるコーディング

        Next ws
        wb.Close False
     Next i
   Else
     MsgBox "指定されたフォルダには、Excelファイルなし"
   End If
 End With

End Sub

【39154】Re:シートを連続して結合するには
発言  Blue  - 06/6/19(月) 11:41 -

引用なし
パスワード
   > ちなみにファイル名もシート名も一意ではありません
ファイル名が一意でないというのはありえないようですけど。
同じフォルダ内に同じ名前のファイルはWindowsではつくれません。
で、シート名が一意でないと、追加していく上で 「Sheet1(2)」という風に
なってしまうかもしれませんがそれはそれでOKでしょうか?

ちなみに、シートをコピーする方法は、「新しいマクロを記録」で
コピーする作業をやってみると参考になります。

【39156】Re:シートを連続して結合するには
お礼  つか E-MAIL  - 06/6/19(月) 11:52 -

引用なし
パスワード
   ▼Blue さん:
すいません間違っていました。ファイル名とシート名に
同じ名前はありませんでした。
たびたびすいません。

>> ちなみにファイル名もシート名も一意ではありません
>ファイル名が一意でないというのはありえないようですけど。
すいません。

【39159】Re:シートを連続して結合するには
発言  Blue  - 06/6/19(月) 13:22 -

引用なし
パスワード
   一応解決のヒントは載せたつもりなんですけど。
> ちなみに、シートをコピーする方法は、「新しいマクロを記録」で
> コピーする作業をやってみると参考になります。

ところで、マクロのあるBookにシートを追加していくということでいいのでしょうか?
それとも、新しいBookを作るのでしょうか?(ってことはマクロはどこにある?)

【39163】Re:シートを連続して結合するには
お礼  つか E-MAIL  - 06/6/19(月) 14:32 -

引用なし
パスワード
   ▼Blue さん:
>一応解決のヒントは載せたつもりなんですけど。
ありがとうございます。やってみます。

>ところで、マクロのあるBookにシートを追加していくということでいいのでしょうか?
>それとも、新しいBookを作るのでしょうか?(ってことはマクロはどこにある?)

マクロのあるシートではなく。開いたファイルに追加していく予定です。

【39164】Re:シートを連続して結合するには
質問  Blue  - 06/6/19(月) 14:37 -

引用なし
パスワード
   ▼つか さん:
>マクロのあるシートではなく。開いたファイルに追加していく予定です。
開いたファイルとは?
100あるExcelファイル全部でしょうか?
それともある特定のファイルでしょうか?

【39169】Re:シートを連続して結合するには
発言  つか E-MAIL  - 06/6/19(月) 15:03 -

引用なし
パスワード
   ▼Blue さん:
>▼つか さん:
>>マクロのあるシートではなく。開いたファイルに追加していく予定です。
>開いたファイルとは?
>100あるExcelファイル全部でしょうか?
>それともある特定のファイルでしょうか?
100あるファイルです。先ほどBlueさんに教えられたように
マクロの記録で行いました。これを100回繰り返して作成するのは
あまりスマートではないと思ったので・・・


Workbooks.Open Filename:="C:\##\##N002_0604###.xls"
  Workbooks.Open Filename:="C:\##\##N003_0604##.xls"
  Windows.Arrange ArrangeStyle:=xlTiled
  Sheets("N003").Select
  Sheets("N003").Copy After:=Workbooks("##N002_0604###.xls").Sheets(1)
  Windows("##N003_0604##.xls").Activate
  ActiveWindow.Close
  Workbooks.Open Filename:="C:\##\##N004_0604##.xls"
  Sheets("N004").Select
  Sheets("N004").Copy After:=Workbooks("##N002_0604###.xls").Sheets(2)
  Windows("##N004_0604##.xls").Activate
  ActiveWindow.Close
  Workbooks.Open Filename:="C:\##\##N005_0604##(###).xls"
  Sheets("N005").Select
  Sheets("N005").Copy After:=Workbooks("##N002_0604###.xls").Sheets(3)
  Windows("##N005_0604##(###).xls").Activate
  ActiveWindow.Close
  Workbooks.Open Filename:="C:\##\##N006_0604##.xls"
  Sheets("N006").Select
  Sheets("N006").Copy After:=Workbooks("##N002_0604###.xls").Sheets(4)
  Windows("##N006_0604##.xls").Activate
  ActiveWindow.Close
  Workbooks.Open Filename:="C:\##\##N007_0604##.xls"
  Sheets("N007").Select
  Sheets("N007").Copy After:=Workbooks("##N002_0604###.xls").Sheets(5)
  Windows("##N007_0604##.xls").Activate
  ActiveWindow.Close
  Workbooks.Open Filename:="C:\##\##N010_0604###.xls"
  Sheets("N010").Select
  Sheets("N010").Copy After:=Workbooks("##002_0604###.xls").Sheets(6)
  Windows("##N010_0604###.xls").Activate
  ActiveWindow.Close
  Workbooks.Open Filename:="C:\##\##N011_0604##.xls"
  Sheets("N011").Select
  Sheets("N011").Copy Before:=Workbooks("##N002_0604###.xls").Sheets(1)
  Windows("##N011_0604##.xls").Activate
  ActiveWindow.Close

    ・
    ・
    ・
 以下繰り返しです

【39171】Re:シートを連続して結合するには
発言  Blue  - 06/6/19(月) 15:28 -

引用なし
パスワード
   > 100あるファイルです。
全部にやるのは厳しいですね。
最終的に
100あるファイルの中のシートは全部同じものがあるという状態でよいのでしょうか
(違うのはファイル名だけという状態?)

もしそうであれば、

1.100のファイルのシートを収集する一時的なBookを用意
2.1のファイルを100のファイルの名前にして保存する

としたほうが効率が良いのではないでしょうか。

【39172】Re:シートを連続して結合するには
お礼  つか E-MAIL  - 06/6/19(月) 15:37 -

引用なし
パスワード
   ▼Blue さん:
ありがとうございます。

>最終的に
>100あるファイルの中のシートは全部同じものがあるという状態でよいのでしょうか

フォーマットは同じですが、個々のデータの数値が異なっています。

>もしそうであれば、
>
>1.100のファイルのシートを収集する一時的なBookを用意
>2.1のファイルを100のファイルの名前にして保存する
>
>としたほうが効率が良いのではないでしょうか。

了解しました。なんとかやってみます。

【39178】Re:シートを連続して結合するには
発言  Blue  - 06/6/19(月) 15:53 -

引用なし
パスワード
   ▼つか さん:
>フォーマットは同じですが、個々のデータの数値が異なっています。


・あるフォルダ配下に100ファイルほど Book がある。
・その中のシート(1ファイル1シート)を抽出したい。
・抽出したシートはどこにコピーするのか
 →
> >100あるExcelファイル全部でしょうか?
> >それともある特定のファイルでしょうか?
> 100あるファイルです。

 ということは、全部のファイルに全部のファイルのシートがある状態?

ではないのでしょうか?
┌BookX  ┐
│マクロ有│
└────┘

┌あるフォルダ───────────────────────────┐
│┌Book1  ┐┌Book2  ┐┌Book3  ┐┌Book4  ┐   ┌Book100 ┐│
││Sheet1 ││Sheet2 ││Sheet3 ││Sheet4 │・・・│Sheet100││
│└────┘└────┘└────┘└────┘   └────┘│
└─────────────────────────────────┘

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

┌BookX  ┐
│マクロ有│
└────┘

┌あるフォルダ───────────────────────────┐
│┌Book1  ┐┌Book2  ┐┌Book3  ┐┌Book4  ┐   ┌Book100 ┐│
││Sheet1 ││Sheet1 ││Sheet1 ││Sheet1 │・・・│Sheet1 ││
││Sheet2 ││Sheet2 ││Sheet2 ││Sheet2 │   │Sheet2 ││
│  ・     ・     ・     ・        ・   │
│  ・     ・     ・     ・        ・   │
│  ・     ・     ・     ・        ・   │
││Sheet100││Sheet100││Sheet100││Sheet100│   │Sheet100││ 
│└────┘└────┘└────┘└────┘   └────┘│
└─────────────────────────────────┘

【39189】Re:シートを連続して結合するには
お礼  つか E-MAIL  - 06/6/19(月) 16:39 -

引用なし
パスワード
   ▼Blue さん:
色々とご足労をおかけしております。

あるフォルダ配下に100ファイルほど Book があり、その中
のシート(1ファイル1シート)を抽出してそのシートを
最初に開いたBOOK1に100のシートとして1つにまとめたいです。

イメージ的には

┌BookX  ┐
│マクロ有│
└────┘

―あるフォルダ───────────────────────────┐
│┌Book1  ┐┌Book2  ┐┌Book3  ┐┌Book4  ┐   ┌Book100 ┐│
││Sheet1 ││Sheet2 ││Sheet3 ││Sheet4 │・・・│Sheet100││
│└────┘└────┘└────┘└────┘   └────┘│
└─────────────────────────────────┘
これらのBOOK1からBOOK100を下記のように1つのBOOKにしたいです

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

┌BookX  ┐
│マクロ有│
└────┘

┌あるフォルダ─┐
│┌Book1  ┐ |
││Sheet1 │ |
││Sheet2 │ |
│  ・    |
│  ・    |
│  ・    |
││Sheet100│ |
│└────┘ |
└───────┘

よろしくお願いします。

【39190】Re:シートを連続して結合するには
質問  Blue  - 06/6/19(月) 16:42 -

引用なし
パスワード
   >下記のように1つのBOOKにしたいです
ファイルはBook1でよいのですか?
Book1は100あるなかの1つのファイルを指しています。

それと、他のBook2〜Book100は削除しちゃっていいんでしょうか?

※ちなみに、登校時に右下の

 □等幅

にチェックを入れるときれいに表示されます。

【39193】Re:シートを連続して結合するには
発言  Blue  - 06/6/19(月) 16:57 -

引用なし
パスワード
   まとめてみた。この仕様でOKかな。

┌BookX  ┐
│マクロ有│→まとめるファイル名を指定できるようにする・・・【1】
└────┘

┌あるフォルダ───────────────────────────┐
│┌Book1  ┐┌Book2  ┐┌Book3  ┐┌Book4  ┐   ┌Book100 ┐│
││Sheet1 ││Sheet2 ││Sheet3 ││Sheet4 │・・・│Sheet100││
│└────┘└────┘└────┘└────┘   └────┘│
└─────────────────────────────────┘

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

┌BookX  ┐ ┌※BookY ┐ ※【1】で指定したファイル名のファイル
│マクロ有│ │Sheet1 │ 
└────┘ │Sheet2 │
       │Sheet3 │
       │  ・  │
       │  ・  │
       │  ・  │
       │Sheet100│
       └────┘

┌あるフォルダ───────────────────────────┐
│┌Book1  ┐┌Book2  ┐┌Book3  ┐┌Book4  ┐   ┌Book100 ┐│
││Sheet1 ││Sheet2 ││Sheet3 ││Sheet4 │・・・│Sheet100││
│└────┘└────┘└────┘└────┘   └────┘│
└─────────────────────────────────┘
○一応バックアップとしてファイルを取っておく。

【39194】Re:シートを連続して結合するには
お礼  つか E-MAIL  - 06/6/19(月) 17:01 -

引用なし
パスワード
   ▼Blue さん:
その通りです。ありがとうございます。m(__)m

>まとめてみた。この仕様でOKかな。
>
>┌BookX  ┐
>│マクロ有│→まとめるファイル名を指定できるようにする・・・【1】
>└────┘
>
>┌あるフォルダ───────────────────────────┐
>│┌Book1  ┐┌Book2  ┐┌Book3  ┐┌Book4  ┐   ┌Book100 ┐│
>││Sheet1 ││Sheet2 ││Sheet3 ││Sheet4 │・・・│Sheet100││
>│└────┘└────┘└────┘└────┘   └────┘│
>└─────────────────────────────────┘
>
>↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
>
>┌BookX  ┐ ┌※BookY ┐ ※【1】で指定したファイル名のファイル
>│マクロ有│ │Sheet1 │ 
>└────┘ │Sheet2 │
>       │Sheet3 │
>       │  ・  │
>       │  ・  │
>       │  ・  │
>       │Sheet100│
>       └────┘
>
>┌あるフォルダ───────────────────────────┐
>│┌Book1  ┐┌Book2  ┐┌Book3  ┐┌Book4  ┐   ┌Book100 ┐│
>││Sheet1 ││Sheet2 ││Sheet3 ││Sheet4 │・・・│Sheet100││
>│└────┘└────┘└────┘└────┘   └────┘│
>└─────────────────────────────────┘
>○一応バックアップとしてファイルを取っておく。

【39195】Re:シートを連続して結合するには
発言  Kein  - 06/6/19(月) 17:01 -

引用なし
パスワード
   100シートを一つのブックにまとめると、ファイルの大きさはどうでしょーか ?
シートあたりのデータ量が少ないなら問題ないと思いますが、データの保存が
目的なら CSVファイルにまとめていく方が無難だと思いますが・・。

【39199】Re:シートを連続して結合するには
発言  Blue  - 06/6/19(月) 17:29 -

引用なし
パスワード
   一応考えてみた。
100もファイルがあると予想以上に時間がかかると思うので、
テストするときはファイルが少ない状態にしてからやってみてください。
それと、ケインさんから指摘がありますけど、100シートもあるとファイルサイズがとんでもないようなファイルができます。

Sub 抽出()
  Dim NewBook   As Workbook
  Dim SubBook   As Workbook
  Dim NewBookPath As String
  Dim FolderPath As String
  Dim BookPath  As String
  
  ' 保存するファイル名を取得
  NewBookPath = Application.GetSaveAsFilename(fileFilter:="Excel ファイル (*.xls), *.xls")
  If NewBookPath <> "False" Then
  
    ' 対象ファイルがあるフォルダ(このフォルダもプログラムから指定可能)
    FolderPath = "C:\任意のフォルダ名"
    
    Application.ScreenUpdating = False
    
    ' すべての xls ファイルに対してループ
    BookPath = Dir(FolderPath & "\*.xls")
    Do While BookPath <> ""
      Set SubBook = Workbooks.Open(FolderPath & "\" & BookPath)
      If NewBook Is Nothing Then
        SubBook.Worksheets(1).Copy
        Set NewBook = ActiveWorkbook
      Else
        SubBook.Worksheets(1).Copy After:=NewBook.Sheets(NewBook.Sheets.Count)
      End If
      SubBook.Close
      BookPath = Dir
    Loop
    
    ' ファイルの保存
    If Not NewBook Is Nothing Then
      NewBook.SaveAs NewBookPath
      NewBook.Close
    End If
    
    Application.ScreenUpdating = True
  End If

End Sub

【39200】Re:シートを連続して結合するには
発言  Blue  - 06/6/19(月) 17:33 -

引用なし
パスワード
   追記

Dir関数で列挙していますので、Sheetの順番が意図したとおりにならないかも知れません。
保存する前に並び替えなおすか、シートのコピー時に指定の位置に入れるか等の工夫が必要かも。

【39204】Re:シートを連続して結合するには
お礼  つか E-MAIL  - 06/6/19(月) 18:29 -

引用なし
パスワード
   ▼Blue さん:
すばらしいです!!ありがとうございましたm(__)m
思ったようなものができました。
これからはもっと勉強していきたいと思います。

【39291】Re:シートを連続して結合するには
お礼  つか E-MAIL  - 06/6/21(水) 16:23 -

引用なし
パスワード
   ▼Kein さん:
>100シートを一つのブックにまとめると、ファイルの大きさはどうでしょーか ?
>シートあたりのデータ量が少ないなら問題ないと思いますが、データの保存が
>目的なら CSVファイルにまとめていく方が無難だと思いますが・・。

ご指摘ありがとうございます。
ひとつ当たりのファイルサイズが50KB程度ですので、大丈夫でした。
ありがとうございました!!

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