• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルVBA ブック間のコピー)

エクセルVBA ブック間のコピー

このQ&Aのポイント
  • エクセルVBAでブック間のコピーを行う方法を学んでいますが、コンパイルエラーが発生してしまいます。
  • Opentxtマクロは正常に動作していますが、Copyマクロで問題が発生しています。
  • 変数の型などを確認してもエラーの原因がわかりません。Excel 2007を使用しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

変数「wb1」「wb2」は文字列型として宣言していますので、wb2.Sheets("一覧表") こんな使い方は出来ません。この様に使うためにはWorkbookオブジェクトにする必要があります。 次に、質問文が正しいとすると、Copy関数の使い方が逆です。 例:Worksheets("Sheet1").Range("A1").Copy Worksheets("Sheet2").Range("B2") Sheet1のセルA1からSheet2のセルB2にコピー また、開いたテキストファイルのシート名を「Sheet1」としていますが、テキストファイルはファイル名がシート名になります。 シート名を指定するよりはSheets(1)の様にして1番目のシートと指定した方が良いと思います。 また、悪いわけではありませんがCopyの様に他でも良く使う名前をプロシージャ名に使うのは混乱の元です(以下の例ではDataCopyに改名しました)。なるべく使わない方が良いです。 Dim wb1 As String Dim wb2 As String Dim wWb1 As Workbook Dim wWb2 As Workbook Sub Opentxt()   wb1 = Application.GetOpenFilename("テキストファイル,*.txt")   If wb1 <> "False" Then     Workbooks.OpenText Filename:=wb1, DataType:=xlDelimited, comma:=True     Set wWb1 = ActiveWorkbook   End If End Sub Sub DataCopy()   Dim LastRow As Long   wb2 = Application.GetOpenFilename("Microsoft Excelブック,*.xls?")   If wb2 <> "False" Then     Workbooks.Open wb2     Set wWb2 = ActiveWorkbook     LastRow = wWb2.Sheets("一覧表").Range("A" & Rows.Count).End(xlUp).Row     wWb1.Sheets(1).Range("B33").Copy wWb2.Sheets("一覧表").Range("A" & LastRow + 1)   End If End Sub

garigarisama
質問者

お礼

とても分かりやすくご説明いただきまして、無事解決できました。 質問以外にもご指摘をいただき、ありがとうございました。

その他の回答 (1)

  • qualheart
  • ベストアンサー率41% (1451/3486)
回答No.2

前の方の回答でOKだと思いますが、敢えて言うならCopyはあまり使わない方が良いと思います。 クリップボードを使うのは重くなるだけなので。 セルの値を他のセルに入力したい場合は、単純に.valueで値を参照すればできます。 コピーを実行している部分を、 wWb2.Sheets("一覧表").Range("A" & LastRow + 1).Value = wWb1.Sheets(1).Range("B33") のように、 値を入れるセル.Value=値の参照元セル とすればOKです。 ご参考まで。

garigarisama
質問者

お礼

ありがとうございます。 どちらも試してみて、具合の良い方を選択したいと思います。

関連するQ&A