• ベストアンサー

エクセル(VBA)のブック間でのコピーペーストについて

こんにちは。VBA入門レベルのものですが、質問させてください。 ブックAとブックBを開いた状態にし、 ・ブックA⇒VBAを組む&データ貼付け先 ・ブックB⇒データコピー元 ブックBの特定セル(例:D10)からブックAの特定セル(例:E12)にコピー⇒貼付 する方法を探しています。 なお、ブックBは、ブック名とシート名が都度変わるので、「ブックAではない方の開いているエクセルファイルからデータをコピーし、ブックAに貼付ける」の構文にしたいです。 また、コピペの他に数式(イコール)で飛ぶ方式でもかまいません。 この内容でのVBAの記述方法が分かる方、どなたか教えて頂けますでしょうか。 すみませんがよろしくお願いいたします。 ※エクセル2003です。

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

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

ブックBは開いてあり、目的のシートを選択した状態になっているとの前提でいいですね。 以下にサンプルを示しますので参考にしてください。 内容はソース中のコメントを見てください。 Sub Sample()  Dim wbk As Workbook    '自ブック以外なければ終了  If Workbooks.Count = 1 Then   MsgBox ("ブックBなし")   End  End If    '自ブック(ブックA)以外のブックを探す。  sFindbook = ""  For Each wbk In Workbooks '開いているBook分ループを回す   If wbk.Name <> ThisWorkbook.Name Then '自ブック(ブックA)は除外    sFindbook = wbk.Name '自ブック以外のブック名取得    Exit For  'ブックが1つ見つかったらループを抜ける   End If  Next wbk  Windows(sFindbook).Activate '見つけたブックをアクティブに  '発見ブックのアクティブシートの特定セル(D10)の値を自ブックの1シート目の特定セル(E12)にコピー  ThisWorkbook.Sheets(1).Range("E12") = ActiveWindow.ActiveSheet.Range("D10")   End Sub

raymay0905
質問者

お礼

うまく実行できました! 構文の意味まで丁寧に記述していただき、分かりやすかったです。 ありがとうございました。

その他の回答 (3)

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.4

VBAのコードのあるbookは thisworkbook になります 。 ブックBを開くのもマクロの中でするには 下記のコードで通常の「ファイルを開く」の窓が開いてユーザーが選択できます fname = "" With Application.FileDialog(msoFileDialogFilePicker) .InitialFileName = FLDname .AllowMultiSelect = False If .Show = True Then fname = .SelectedItems(1) End If End With *FLDnameに選ぶファイルの初期フォルダ名を入れます Fnameに選択されたファイル名がフルパスで入ります。 のでFnameを使ってOpenすればその時点でブックBはactiveworkbookになります。 workbooks.open(Fname)

raymay0905
質問者

お礼

ブックを開く操作まで教えていただき、ありがとうございました。 応用編として今後使わせていただきます。

  • myRange
  • ベストアンサー率71% (339/472)
回答No.3

コードの書き方はいくつもありますが、 VBA入門レベルということなのでオーソドックスなのをひとつ。。 '--------------------------------------------------- Sub Test()  Dim N As Integer  'コピー元ブックのINDEX  N = 1  If Workbooks(1).Name = "ブックA.xls" Then    N = 2  End If  Workbooks("ブックA.xls").Sheets("Sheet1").Range("E12").Value = _  Workbooks(N).Sheets("Sheet1").Range("D10").Value End Sub '--------------------------------------------------- 見ればわかると思いますが、 ブックAでないのがコピー元のブックと判断してます。 また、ブックAはThisWorkbookでも表わすことができます。 以上です。

raymay0905
質問者

お礼

実行できました! ありがとうございました。 ちなみにブックAの名前も変わる場合は、 どのように変更すればよいですか?  Workbooks("ブックA.xls") は Thisworkbook でうまくいきましたが、  N = 1  If Workbooks(1).Name = "ブックA.xls" Then    N = 2 の方がわかりません。 申し訳ありませんが、お時間あるときにでも教えていただけますでしょうか。

回答No.1

ブックBを開くのもブックAにマクロを組んでブックBの名前を変数に格納しておく必要があるのではないかと思います。 間違ってたらごめんなさい。

raymay0905
質問者

お礼

ご回答ありがとうございました。 今回のケースはAもBも既に開いていることが前提ですので、開く操作は無くとも大丈夫です。 お忙しい中申し訳ございませんでした。

関連するQ&A