[[20160730085653]] 『複数ブックのテーブルをひとつのシートに結合』(ほたて) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『複数ブックのテーブルをひとつのシートに結合』(ほたて)

ひとつのフォルダに集約した複数のブックを、指定のひとつのシートに集約する方法を考えているのですが、なかなかうまくいきません。

**********************************************************

Sub test1()

  Dim sFile As String
  Dim sWB As Workbook
  Dim dWS As Worksheets
  
  Dim sh As Worksheet
  Dim lr As Long, tlr As Long
  
  Const SOURCE_DIR As String = "C:\Users\admin\Desktop\アンケート\アンケート集約場所\"
  Const DEST_FILE As String = "C:\Users\admin\Desktop\アンケート\集約.xlsm"
  
  '指定したフォルダ内にあるブックのファイル名を取得
  sFile = Dir(SOURCE_DIR & "*.xls")
 
 
  'フォルダ内にブックがなければ終了
  If sFile = "" Then Exit Sub
    '集約先のブック
    Set sh = DEST_FILE
  
    'コピー元のブックを開く
    Set sWB = Workbooks.Open(Filename:=SOURCE_DIR & sFile)

    'コピー元の「Table」シートをsWSとする
    Set sWS = sWB.Worksheets("Table")
    
    For Each sWS In Worksheets
      
      If sWS.Name <> "集約" Then
      
        lr = sWS.Cells(sWS.Rows.Count, 1).End(xlUp).Row
        sWS.Rows("1:" & lr).Copy
        tlr = sh.Sheets("集約").Cells(sh.Rows.Count, 1).End(xlUp).Row
        sh.Sheets("集約").Range("A" & tlr + 1).PasteSpecial
        Applocation.CutCopyMode = False
    
      End If

  
  Next

End Sub

*******************************************************

sh.Sheets("集約")のところでコンパイルエラーで「メソッドかデータメンバーが見つかりません」と出てします。

よろしくお願いします。

< 使用 Excel:Excel2013、使用 OS:Windows8 >


 >sh.Rows.Count

 shブックの行数となってますよ。
(とおりすがり) 2016/07/30(土) 09:00

 ↑は勘違いでした。

 ↓がおかしいですね。

 >sh.Sheets("集約")
(とおりすがり) 2016/07/30(土) 09:07

 > Dim sh As Worksheet

 としてるのに、

 > '集約先のブック 
 > Set sh = DEST_FILE

 となってますね。
 一度落ち着いてコード全体の整合性を確認したら
 いいと思います。
(とおりすがり) 2016/07/30(土) 09:17

 Q&Aサロンとマルチポスト
(マルチーズ) 2016/07/30(土) 09:27

 >Applocation.CutCopyMode = False

 ↑もおかしい。

 ×Applocation

 ○Application
(とおりすがり) 2016/07/30(土) 09:40

とおりすがりさん

 '集約先のブック
 > Set sh = DEST_FILE


 '集約先のブック
 > sh = Dir(DEST_FILE,0)

としてみました。この処理をすれば大丈夫でしょうか?

ただ、

sh.Sheets("集約") のコンパイルエラーは変わらずです...。
(ほたて) 2016/07/30(土) 10:24

全体の流れはこんな感じでしょうか

まずは、3)がおかしいです。
4)も、いまのままだと、ひとつのファイルを処理して終わり?
>For Each sWS In Worksheets
でなく、Do…Loopを使います。

1)'指定したフォルダ内にあるブックのファイル名を取得
2)'フォルダ内にブックがなければ終了
3)'集約先のブックを開き、その集約シートを変数shにセット
4)xlsがなくなるまで、Do…Loopで以下を繰り返し
5)'コピー元のブックを開く
6)'コピー元の「Table」シートをsWSとする
7)sWSからshにコピペ
8)sWBを閉じる

(マナ) 2016/07/30(土) 10:29


 横から失礼。

 集約先に関したことに限定してコメントします。

 >  '集約先のブック 
 >  > Set sh = DEST_FILE
 > を 
 > '集約先のブック 
 > >sh = Dir(DEST_FILE,0)
 > としてみました。この処理をすれば大丈夫でしょうか? 

 No good.
 それだと shは何なる文字列ですよ。
 まず集約先のブックは開かれているのですか?

 必要なのは集約先のブックの"集約"シートなんですから、

 ・ブックを開いて、
 ・その"集約"シートを Setキーワードで指定する
 必要があります。

 順を追っていけば、そう難しいことではないです。
 単に慣れていないだけです。

(γ) 2016/07/30(土) 10:48


みなさん、回答ありがとうございました。
しっかりと順を追い直して修正した結果できました。
(ほたて) 2016/07/30(土) 23:12

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.