Excel VBA質問箱 IV

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

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


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

【72851】Excel VBA 連続貼り付け処理について momotoki 12/9/25(火) 12:56 質問[未読]
【72852】Re:Excel VBA 連続貼り付け処理について UO3 12/9/25(火) 13:58 発言[未読]
【72855】Re:Excel VBA 連続貼り付け処理について momotoki 12/9/25(火) 15:21 回答[未読]
【72856】Re:Excel VBA 連続貼り付け処理について UO3 12/9/25(火) 15:28 発言[未読]
【72857】Re:Excel VBA 連続貼り付け処理について UO3 12/9/25(火) 15:37 発言[未読]
【72861】Re:Excel VBA 連続貼り付け処理について momotoki 12/9/26(水) 1:05 回答[未読]
【72862】Re:Excel VBA 連続貼り付け処理について UO3 12/9/26(水) 5:51 発言[未読]
【72871】Re:Excel VBA 連続貼り付け処理について momotoki 12/9/27(木) 1:44 回答[未読]

【72851】Excel VBA 連続貼り付け処理について
質問  momotoki  - 12/9/25(火) 12:56 -

引用なし
パスワード
   ExcelVBAで複数のExcelファイルデータをコピーし、特定のExcelファイルに貼り付けを行う処理に関し、貼り付け先の行数が65536行を越えた場合、エラーが発生するのですが解決策をご教示頂きたく。

(以下構文です。コピー元のファイル数が150ファイルぐらいあり、貼り付け処理を行っていくと、65536行を越えた場合、エラーが発生します。コピー元はExcel2003、貼り付け先はExcel2007です。)

Sub macro1()

Dim myPath As String
Dim myFile As String
Dim w As Workbook

myPath = "C:\COPY\"
myFile = Dir(myPath & "*.xls*")
Set w = Workbooks.Open("C:\PASTE\test.xlsx")

Do Until myFile = ""

Workbooks.Open myPath & myFile
ActiveSheet.Select
Range("A2:F1010").Copy w.Worksheets("Sheet1").Range("F1000000").End(xlUp).Offset(1, -5)
ActiveWorkbook.Close False
myFile = Dir()

Loop

End Sub

【72852】Re:Excel VBA 連続貼り付け処理について
発言  UO3  - 12/9/25(火) 13:58 -

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

▼momotoki さん:

こんにちは

今、貼り付け先で結果的に20万行になるような環境を作って実行しましたが、
問題なく処理終了します。
(もっとも、1000行程度ずつの転記の場合、転記元ブックとして準備すべき数が膨大になりますので
 1回の転記を20000行程度にしましたが)

実際にエラーになった時のコードがどこか、その時のエラーメッセージはどういうものだったか
教えていただけますか?

いずれにしても、本当に 1048576行を超えればエラーですが)

【72855】Re:Excel VBA 連続貼り付け処理について
回答  momotoki  - 12/9/25(火) 15:21 -

引用なし
パスワード
   コメントありがとうございます。

エラー箇所は下記になります。

Range("A2:F1010").Copy w.Worksheets("Sheet1").Range("F1000000").End(xlUp).Offset(1, -5)

エラーメッセージは

「実行時エラー1004

アプリケーション定義エラーまたはオブジェクト定義のエラーです」


コピー基がExcel2003、貼り付け先がExcel2007で、別のExcel2007(マクロ有効)のコマンドボタンにて処理しております。

どうぞよろしくお願いいたします。

【72856】Re:Excel VBA 連続貼り付け処理について
発言  UO3  - 12/9/25(火) 15:28 -

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

こんにちは

w は 2007純正ブックでしょうから、ここで1004のエラーは?? なんですが、
だめもとで

With w.Worksheets("Sheet1")
  Range("A2:F1010").Copy .Range("F" & .Rows.COunt).End(xlUp).Offset(1, -5)
End With

こうすると、どうなるでしょうか?

【72857】Re:Excel VBA 連続貼り付け処理について
発言  UO3  - 12/9/25(火) 15:37 -

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

↑でレスしましたが、そもそもが、前にコメントしましたように、こちらでは
元のコードで問題なく処理できています。

エラーになった時の Text.xlsx ブックのSheet1の「本当の最終行」が
1048576 なのかどうか、また、コピーしようとしているコピー元ブックの
アクティブシートが、本当にワークシートなのか(グラフシートではない)
確認されましたか?

【72861】Re:Excel VBA 連続貼り付け処理について
回答  momotoki  - 12/9/26(水) 1:05 -

引用なし
パスワード
   こんばんわ。

原因がわかりました。

PC端末のOfficeが2007で、コピー元の複数のExcelがver2003のため、
VBA実行中にコピー元のExcel ver2003を開くと互換モードになり、
発生するものと思われます。

コピー元のExcelファイルをver2007に変換し、コピー&貼り付け処理を実行したところ問題は解決しました。

このたびはありがとうございました。

【72862】Re:Excel VBA 連続貼り付け処理について
発言  UO3  - 12/9/26(水) 5:51 -

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

>PC端末のOfficeが2007で、コピー元の複数のExcelがver2003のため、
>VBA実行中にコピー元のExcel ver2003を開くと互換モードになり、
>発生するものと思われます。

いやぁ・・・・
こちらでは「その状況」をつくって動かしてみましたけどエラーにはなりません。

F1000000 を指定しているのは ws に対してであり、ws は2007ブックなのでOKなんです。
もし、ここで ws.SHeets("Sheet1") ではなく Sheets("Sheet1") と書いてあればエラーですが。

ただし、こちらは 2010。 2007では状況が異なるのでしょうかね・・・

【72871】Re:Excel VBA 連続貼り付け処理について
回答  momotoki  - 12/9/27(木) 1:44 -

引用なし
パスワード
   こんばんわ。

なるほどですね。

確かに、自宅のPCは2010ですが、互換モードにはならずに、いけました。

つまりは、2007の場合に発生しうる原因ってことですね。

勉強になりました。

ありがとうございます。

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