- ベストアンサー
Excel VBAでエクセルファイル間の列のコピーがうまくいかない
- 2つのエクセルファイルの特定の列を別のエクセルファイルの行にコピーするプログラムを作成していますが、うまく動作しません。1つのファイルは正常に貼り付けされますが、もう1つのファイルの特定の列が正しく選択されません。
- 現在、5つのシートでテストしており、各シートには12列あります。ただし、実際のファイルには255シートあります。一時的に列Cのみを使用しています。
- 作成したプログラムの一部分を以下に示します。2つのエクセルファイルの特定の列をコピーし、新しいファイルの特定の行に貼り付ける処理があります。問題は3つ目のファイルの2番目のシートからの選択方法です。正しく指定されているはずの範囲が、意図しない範囲になってしまいます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
No2の余計なお世話の追加です。 No2はデータのコピペのイメージを残したコード(実際はコピペではありませんが)ですが、それを省いて直接代入するようにしてもいいと思います。 Sub Test() Dim i As Long Dim N As Long i = 1 N = 1 With Workbooks(1).Worksheets(1) Do While i <= 5 ''C列''' .Range("C" & N).Resize(1, 18).Value = WorksheetFunction.Transpose(Workbooks(2).Worksheets(i).Range("C8:C25").Value) .Range("U" & N).Resize(1, 57).Value = WorksheetFunction.Transpose(Workbooks(3).Worksheets(i).Range("C9:C65").Value) i = i + 1 N = N + 1 Loop End With End Sub
その他の回答 (2)
- kkkkkm
- ベストアンサー率66% (1719/2589)
> 開いた順のWorksheets(1)でファイル名は指定していません。 質問のコードの部分だけで見るとちょっと怖い気もします(私の場合Workbooks(1)はPERSONAL.XLSBになります) Selectがおかしいのは、連続でコピペすると環境によっては変なエラーになったりしますのでその影響かもしれません(Selectではありませんが過去に変なエラーになるという事例がありましたその時はDoEvents()を入れて良くなったみたいでした) 余計なお世話だと思いますが、改善されない場合以下のようにしてみてはいかがでしょう。 Sub Test() Dim i As Long Dim N As Long Dim TmpData1 As Variant, TmpData2 As Variant i = 1 N = 1 With Workbooks(1).Worksheets(1) Do While i <= 5 ''C列''' TmpData1 = Workbooks(2).Worksheets(i).Range("C8:C25").Value 'もってくるところ .Range("C" & N).Resize(1, 18).Value = WorksheetFunction.Transpose(TmpData1) '貼り付けるところ TmpData2 = Workbooks(3).Worksheets(i).Range("C9:C65").Value '★もってくるところ .Range("U" & N).Resize(1, 57).Value = WorksheetFunction.Transpose(TmpData2) '貼り付けるところ i = i + 1 N = N + 1 Loop End With End Sub
お礼
ありがとうございました。
- kkkkkm
- ベストアンサー率66% (1719/2589)
こちらでテストしたところ正常にコピペできました。 コードは標準モジュールにあるとして、Workbooks(1)などは本来のブック名にしてるんですよね。 Workbooks(3).Worksheets(i).Range("C9:C65").Select で止めて選択された範囲がB9からQ65だったということでしょうか。 たとえば Worksheets(i).Range("C8:C25").Select 'もってくるところ Selection.Copy を Worksheets(i).Range("C8:C25").Copy のように.PasteSpecialの所も含めて全て変更してみてはいかがでしょう。
お礼
ありがとうございました。
補足
回答ありがとうございます。 「Workbooks(1)などは本来のブック名にしてるんですよ」 は開いた順のWorksheets(1)でファイル名は指定していません。 「Range("C9:C65").Select」の指定を止めてみると ("B9:Q65")が SELECTされているのです。 2ファイル目はうまくコピーできてまして3ファイル目のRange("C9:C65").Select がおかしいのでご指摘のようにCOPYで試してます。
お礼
.selectをやめて.copyにしましたら正常に 動きました。ありがとうございます。 とても助かりました。