Excel VBA質問箱 IV

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

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


3941 / 13644 ツリー ←次へ | 前へ→

【59088】Excelファイルの結合をするには???? 夜勤担当 08/11/27(木) 13:05 質問[未読]
【59089】Re:Excelファイルの結合をするには???? Jaka 08/11/27(木) 13:23 発言[未読]
【59091】Re:Excelファイルの結合をするには???? 夜勤担当 08/11/28(金) 7:27 質問[未読]
【59094】Re:Excelファイルの結合をするには???? Jaka 08/11/28(金) 10:28 発言[未読]
【59128】Re:Excelファイルの結合をするには???? 夜勤担当 08/11/29(土) 22:33 質問[未読]
【59129】Re:Excelファイルの結合をするには???? ponpon 08/11/29(土) 22:50 発言[未読]
【59138】Re:Excelファイルの結合をするには???? 夜勤担当 08/11/30(日) 12:54 質問[未読]
【59150】Re:Excelファイルの結合をするには???? ponpon 08/11/30(日) 18:43 発言[未読]
【59345】Re:Excelファイルの結合をするには???? 夜勤担当 08/12/7(日) 16:18 質問[未読]
【59353】Re:Excelファイルの結合をするには???? ponpon 08/12/7(日) 23:14 発言[未読]
【59181】Re:Excelファイルの結合をするには???? Jaka 08/12/1(月) 15:06 発言[未読]
【59346】Re:Excelファイルの結合をするには???? 夜勤担当 08/12/7(日) 16:24 質問[未読]
【59358】Re:Excelファイルの結合をするには???? Jaka 08/12/8(月) 14:02 発言[未読]
【59185】Re:Excelファイルの結合をするには???? Yuki 08/12/1(月) 17:14 発言[未読]

【59088】Excelファイルの結合をするには????
質問  夜勤担当  - 08/11/27(木) 13:05 -

引用なし
パスワード
   こんにちは。。

 複数のExcelファイル(タイトル同じ)をひとつのファイルに丸めることは
可能でしょうか?

ファイル数:15
レコード数:1500明細/ファイル

ファイル1
  A     B       C    D    ・・・・・・Z
1 エリア区分 製品コード  製品名  入庫日       評価 
2 00-011   SD001    アイウオ  20081126      AA



ファイル2
  A     B       C    D    ・・・・・・Z
1 エリア区分 製品コード  製品名  入庫日       評価 
2 00-022   SD001    アイウオ  20081126      AA


ファイル15

【59089】Re:Excelファイルの結合をするには???...
発言  Jaka  - 08/11/27(木) 13:23 -

引用なし
パスワード
   データ → 統合 かな?

統合で検索してみると色々あるようです。
過去に1度だけかかわった所。

▼【24845】「統合」の「統合元」を変数で指定するとエラーが?
ht tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=24845;id=excel

【59091】Re:Excelファイルの結合をするには???...
質問  夜勤担当  - 08/11/28(金) 7:27 -

引用なし
パスワード
   おはようございます!

 複数のExcelファイル(タイトル同じ)をひとつのファイルに丸める
(追加の意味です)ことは可能でしょうか?
以下の例にしますと、

結果ファイル
=15ファイル×1500明細/ファイル
=22500明細

ファイル数:15
レコード数:1500明細/ファイル

ファイル1
  A     B       C    D    ・・・・・・Z
1 エリア区分 製品コード  製品名  入庫日       評価 
2 00-011   SD001    アイウオ  20081126      AA



ファイル2
  A     B       C    D    ・・・・・・Z
1 エリア区分 製品コード  製品名  入庫日       評価 
2 00-022   SD001    アイウオ  20081126      AA


ファイル15

【59094】Re:Excelファイルの結合をするには???...
発言  Jaka  - 08/11/28(金) 10:28 -

引用なし
パスワード
   実際のファイル構成がどうなっているのかわからないので、
大体で。
1つのフォルダに集めてDir関数でフルパスファイル名を取得してやっても
良いのだろうけど、基本操作っぽく。
Dir関数やその他のフォルダ単位で処理したい場合は、ヘルプやここを
検索すれば見つかると思います。


Dim Fnm(1 To 15) As String
Dim PPBk As Workbook
Dim SSBk As Workbook
Fnm(1) = "ファイル1のフルパス"
Fnm(2) = "ファイル2のフルパス"
Fnm(3) = "ファイル3のフルパス"
Fnm(4) = "ファイル4のフルパス"
Fnm(5) = "ファイル5のフルパス"
Fnm(6) = "ファイル6のフルパス"
Fnm(7) = "ファイル7のフルパス"
Fnm(8) = "ファイル8のフルパス"
Fnm(9) = "ファイル9のフルパス"
Fnm(10) = "ファイル10のフルパス"
Fnm(11) = "ファイル11のフルパス"
Fnm(12) = "ファイル12のフルパス"
Fnm(13) = "ファイル13のフルパス"
Fnm(14) = "ファイル14のフルパス"
Fnm(15) = "ファイル15のフルパス"
Set PPBk = Workbook.Open ("コピー先ブックのフルパス")
For i = 1 To 15
  Set SSBk = Workbook.Open(Fnm(i))
  DoEvents
  SSBk.Sheets("Sheet1").UsedRange.Copy
  PPBk.Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Offset(1).PasteSpecial
  DoEvents
  SSBk.Close (False)
Next
Set PPBk = Nothing
Set SSBk = Nothing
Erase Fnm

【59128】Re:Excelファイルの結合をするには???...
質問  夜勤担当  - 08/11/29(土) 22:33 -

引用なし
パスワード
   Jakaさん
 まず二つのファイルでやってみましたが、実行時にエラー421がでました、
その内容はオブジェクト・・・。
問題の所在はどこにあるのかは分からなくて、ご指導下さい。

Sub TEST00001()
Dim Fnm(1 To 2) As String  ・・・・>二つのファイルのため、2にした
Dim PPBk As Workbook
Dim SSBk As Workbook
Fnm(1) = "C:\ABC\000001.XLS"
Fnm(2) = "C:\ABC\000002.XLS"
Set PPBk = Workbook.Open("C:\ABC\結果.XLS") ・・・・>二つのファイルを
                            結果に収めるための
                            ファイル結果.XLS

For i = 1 To 2
  Set SSBk = Workbook.Open(Fnm(i))
  DoEvents
  SSBk.Sheets("Sheet1").UsedRange.Copy
  PPBk.Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Offset(1).PasteSpecial
  DoEvents
  SSBk.Close (False)
Next
Set PPBk = Nothing
Set SSBk = Nothing
Erase Fnm
End Sub

【59129】Re:Excelファイルの結合をするには???...
発言  ponpon  - 08/11/29(土) 22:50 -

引用なし
パスワード
   ▼夜勤担当 さん:
>Jakaさん
> まず二つのファイルでやってみましたが、実行時にエラー421がでました、
>その内容はオブジェクト・・・。
>問題の所在はどこにあるのかは分からなくて、ご指導下さい。
>
>Sub TEST00001()
>Dim Fnm(1 To 2) As String  ・・・・>二つのファイルのため、2にした
>Dim PPBk As Workbook
>Dim SSBk As Workbook
>Fnm(1) = "C:\ABC\000001.XLS"
>Fnm(2) = "C:\ABC\000002.XLS"
>Set PPBk = Workbook.Open("C:\ABC\結果.XLS") ・・・・>二つのファイルを
      ' ↑ Workbooks.Openにしたら?
>                            結果に収めるための
>                            ファイル結果.XLS
>
>For i = 1 To 2
>  Set SSBk = Workbook.Open(Fnm(i))
       ' ↑ Workbooks.Openにしたら? 
>  DoEvents
>  SSBk.Sheets("Sheet1").UsedRange.Copy
>  PPBk.Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Offset(1).PasteSpecial
>  DoEvents
>  SSBk.Close (False)
>Next
>Set PPBk = Nothing
>Set SSBk = Nothing
>Erase Fnm
>End Sub

【59138】Re:Excelファイルの結合をするには???...
質問  夜勤担当  - 08/11/30(日) 12:54 -

引用なし
パスワード
   ご指摘した点を修正しました。
やっと動き出しましたが、以下のメッセージがでました。
----------------------------------------------------------
クリップボードに大きな情報があります。
この情報をほかのクリップに貼り付けられるようにしますか?
・後で貼りつけるためにクリップボードに保存する場合は
 「はい」をクリックします。
・クリップボードにある情報を削除する場合は
 「いいえ」をクリックします。
----------------------------------------------------------
「はい」でクリックして、結果がでるまで二つのファイルで
15分ほどかかりました。

質問一
このような結合作業時間はもっと早くなれないか?
質問二
二つ目以降のファイルの結合時にタイトルの一行は除外する方法は
あるのでしょうか?

【59150】Re:Excelファイルの結合をするには???...
発言  ponpon  - 08/11/30(日) 18:43 -

引用なし
パスワード
   こんな感じにすると少しは早くなるかも。
結果.xlsを開いて、そこにコードを記述しています。

Sub TEST00001()
  Dim Fnm(1 To 2) As String
  Dim PPBk As Workbook
  Dim SSBk As Workbook
  
  Application.ScreenUpdating = False   '画面更新の停止
  Fnm(1) = ThisWorkbook.Path & "\1.xls" '結果.xlsと同じフォルダにある
  Fnm(2) = ThisWorkbook.Path & "\2.xls" '結果.xlsと同じフォルダにある
  Set PPBk = ThisWorkbook  ’開いているファイル(結果.xls)
  
  For i = 1 To 2
    Set SSBk = Workbooks.Open(Fnm(i))
    DoEvents
    SSBk.Sheets("Sheet1").UsedRange.Offset(1).Copy
    PPBk.Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Offset(1).PasteSpecial
    Application.CutCopyMode = False 'クリップボードをクリア
    DoEvents
    SSBk.Close (False)
  Next
  Set PPBk = Nothing
  Set SSBk = Nothing
  Erase Fnm
  Application.ScreenUpdating = True  '画面更新の再開

End Sub

【59181】Re:Excelファイルの結合をするには???...
発言  Jaka  - 08/12/1(月) 15:06 -

引用なし
パスワード
   時間はデータの状態などで長くはなるだろうし、
もしかしたら余計なところまでコピーしている可能性もないわけでもないですね。
あまり考えずにUsedRangeを使っちゃったけど、この辺かも?

1度、コピー元のブックを開いて
Activesheet.UsedRange.select
とやってみて、どれだけの範囲が選択されているか確認して見てください。
使い方によっては、どえらい範囲になっている可能性もあるので。

他、関数とか書いてあると再計算にどえらい時間がかかります。
その場合は、再計算を自動から手動に変えてみてください。

【59185】Re:Excelファイルの結合をするには???...
発言  Yuki  - 08/12/1(月) 17:14 -

引用なし
パスワード
   ▼夜勤担当 さん:
こんにちは。。
>
> 複数のExcelファイル(タイトル同じ)をひとつのファイルに丸めることは
>可能でしょうか?
>
>ファイル数:15
>レコード数:1500明細/ファイル

ADOを使ってやってみました。
Microsoft ActiveX Data Object X.X Library
へ参照設定

シート名は全て Sheet1 でタイトルも全部同じとして
保存ディレクトリの中のエクセルを全部読込みます。

Sub Temp3()
  Dim cn   As ADODB.Connection
  Dim strFnm As String
  Dim strDir As String
  Dim strSnm As String
  Dim strSQL As String
  
  'ブックをデータベースとして接続書込みするエクセルファイル
  strFnm = ThisWorkbook.FullName
  Set cn = New ADODB.Connection
  With cn
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    .Properties("Data Source").Value = strFnm
    .Properties("Extended Properties").Value = "Excel 8.0"
  End With
  cn.Open
  
  ' 読込みするエクセルのディレクトリ
  strDir = ThisWorkbook.Path & "\AAA\"
  ' 読込みするエクセルのファイル名に * を付ける(Loopする為)
  strSnm = strDir & "*Sample*.xls"
  ' Dir のお決まり
  strSnm = Dir(strSnm)
  
  Do While strSnm <> ""
    '追加クエリー実行
    strSQL = "INSERT INTO [Sheet1$] " & _
         "SELECT * FROM [Sheet1$] " & _
              "IN '" & strDir & strSnm & "' " & _
                "'Excel 8.0;HDR=YES'"
    cn.Execute CommandText:=strSQL
    strSnm = Dir()
  Loop
  'オブジェクト変数の解放
  cn.Close
  Set cn = Nothing
End Sub

【59345】Re:Excelファイルの結合をするには???...
質問  夜勤担当  - 08/12/7(日) 16:18 -

引用なし
パスワード
   ▼ponpon さん:
>こんな感じにすると少しは早くなるかも。
>結果.xlsを開いて、そこにコードを記述しています。
>

ありがとうございます。実施結果を報告します。

10個のファイルを対象に実行しましたが、警告がでました。
--------------------------------
Microsoft Visual Basic
× 400
--------------------------------
結果を確認したところ、五個のファイルまで、完了した。

問題はどこにあるのでしょうか?
よろしくお願いします。

【59346】Re:Excelファイルの結合をするには???...
質問  夜勤担当  - 08/12/7(日) 16:24 -

引用なし
パスワード
   ▼Jaka さん:
>時間はデータの状態などで長くはなるだろうし、
>もしかしたら余計なところまでコピーしている可能性もないわけでもないですね。
ご回答いただき、ありがとうございます。
確認しましたところ、特に余計なデータはありませんでした。
でもデータが多い(1500〜3700程度)ので、もしかしたら、明細数のせい
かもしれません・・・?

【59353】Re:Excelファイルの結合をするには???...
発言  ponpon  - 08/12/7(日) 23:14 -

引用なし
パスワード
   ▼夜勤担当 さん:

>10個のファイルを対象に実行しましたが、警告がでました。
>--------------------------------
>Microsoft Visual Basic
>× 400
>--------------------------------
>結果を確認したところ、五個のファイルまで、完了した。
>
>問題はどこにあるのでしょうか?
>よろしくお願いします。

と言われても初心者の私には見当もつきません。
こちらでは、簡単なファイルでテストしています。
目盛りの問題か?UsedRangeの悪さか?再計算か?・・・

明日Jakaさんの回答を待つか?YukiさんがADO接続での
方法を提示しているのでそちらでやってみたらいかがでしょう?

【59358】Re:Excelファイルの結合をするには???...
発言  Jaka  - 08/12/8(月) 14:02 -

引用なし
パスワード
   >特に余計なデータはありませんでした。
データのある無しでなく、UsedRangeは、使用している(罫線とかもろもろ)セルの範囲ですから、それにより莫大な範囲に及ぶこともあります。

今のところ原因がわかりません。
PCの性能にもよるだろうし、ウイルスソフトのせいかもしれないですし、
Tempフォルダに余計なファイルがたまりすぎて遅くなっているのかもしれませんし、
あまり関係ないかもしれませんが、インターネット1時ファイルにファイルがたまりすぎているとか。

また、日本語ばっかりだと遅いかもしれません。

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