- ベストアンサー
エクセル(VBA)のブック間でのコピーペーストについて
こんにちは。VBA入門レベルのものですが、質問させてください。 ブックAとブックBを開いた状態にし、 ・ブックA⇒VBAを組む&データ貼付け先 ・ブックB⇒データコピー元 ブックBの特定セル(例:D10)からブックAの特定セル(例:E12)にコピー⇒貼付 する方法を探しています。 なお、ブックBは、ブック名とシート名が都度変わるので、「ブックAではない方の開いているエクセルファイルからデータをコピーし、ブックAに貼付ける」の構文にしたいです。 また、コピペの他に数式(イコール)で飛ぶ方式でもかまいません。 この内容でのVBAの記述方法が分かる方、どなたか教えて頂けますでしょうか。 すみませんがよろしくお願いいたします。 ※エクセル2003です。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ブック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
その他の回答 (3)
- rivoisu
- ベストアンサー率36% (97/264)
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)
お礼
ブックを開く操作まで教えていただき、ありがとうございました。 応用編として今後使わせていただきます。
- myRange
- ベストアンサー率71% (339/472)
コードの書き方はいくつもありますが、 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でも表わすことができます。 以上です。
お礼
実行できました! ありがとうございました。 ちなみにブックAの名前も変わる場合は、 どのように変更すればよいですか? Workbooks("ブックA.xls") は Thisworkbook でうまくいきましたが、 N = 1 If Workbooks(1).Name = "ブックA.xls" Then N = 2 の方がわかりません。 申し訳ありませんが、お時間あるときにでも教えていただけますでしょうか。
- bluestreak
- ベストアンサー率27% (3/11)
ブックBを開くのもブックAにマクロを組んでブックBの名前を変数に格納しておく必要があるのではないかと思います。 間違ってたらごめんなさい。
お礼
ご回答ありがとうございました。 今回のケースはAもBも既に開いていることが前提ですので、開く操作は無くとも大丈夫です。 お忙しい中申し訳ございませんでした。
お礼
うまく実行できました! 構文の意味まで丁寧に記述していただき、分かりやすかったです。 ありがとうございました。