- ベストアンサー
VBAコピー&ペーストの方法とは?
- VBAを使用してブックAからブックBにジャンプし、特定のセルの値をコピーしてブックAにペーストする方法について教えてください。
- ブックBの保存先はサーバーで、ブックBの特定のシートにリンク先があります。リンク先のセルの値がリンク先のシート名となっています。ブックBは複数あり、ハイパーリンクごとにリンク先が異なります。
- また、ブックBを開くたびにマクロ有効無効のメッセージが表示されますが、Excel2003のためのものです。3つの項目をコピペする必要があります。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
一応、適当ですが見本。 見比べてみましょう。 Sub test() Dim i As Long Dim ThisBook As Workbook, LinkBook As Workbook Set ThisBook = ActiveWorkbook For i = 2 To Cells(Rows.Count, 3).End(xlUp).Row If ThisBook.Sheets("シート名").Cells(i, 3) <> "" Then Cells(i, 1).Hyperlinks.Item(1).Follow Set LinkBook = ActiveWorkbook ThisBook.Sheets("シート名").Cells(i, 11).Value = LinkBook.Sheets("シート名").Range("C13").Value ThisBook.Sheets("シート名").Cells(i, 12).Value = LinkBook.Sheets("シート名").Range("H6").Value ThisBook.Sheets("シート名").Cells(i, 13).Value = LinkBook.Sheets("シート名").Range("G13").Value LinkBook.Close SaveChanges:=False End If Next End Sub 必要なところは補完してください。 その上で、まだ必要なら質問ください。 きっと、親切なみなさんが答えてくれますよ。
その他の回答 (4)
- daredakisama
- ベストアンサー率50% (90/177)
何と言うか、添削がどうのこうの以前に基本から。 > 参照が不正となります。 変数を使う前に「どんなデータなのか」を宣言しないといけません。 例えば sFindbook = "" とありますが、この変数は何?ってのがVBAにはわからないので。 > Exit For を使うと、繰り返し処理から抜けてしまいます。 繰り返したいなら、For~Nextの間に処理を書きます。 For i = 1 To LastRow If 条件 Then ~処理~ End IF Next i が基本形です。
お礼
ご指摘もいただきありがとうございます。 つぎはぎで作ったものなので、Exit Forを除いて処理を繋げる部分で苦慮していました。 変数の宣言ももう少し勉強します。
- daredakisama
- ベストアンサー率50% (90/177)
なるほど、そのマクロを「作れ」ってことですね? それは無理な注文ですね。 「マクロの記録」でWEB検索してみましょう。
お礼
ありがとうございます。そうですね、いくら初心者といえ他力本願すぎたと反省してます。 補足にたたき台の構文を載せましたので、アドバイスいただければ幸いです。
- FEX2053
- ベストアンサー率37% (7991/21371)
ブック名やブックのホルダ名、セルの位置が指定されて いないので、コードが書けないんですが、別にブックBは 開かなくていいんじゃないですか? 例えば、ブックAの必要なセルに Selection.Formuta = "='ブックBのパス[ブックBのブック名]ブックBのシート名'!$A$1" とすれば、ブックBのセルA1のデータを引っ張ってこられます。
補足
早速のご回答ありがとうございます。あえてブックBは開く必要はありませんのでSellectionFomulaでもいいのですが、対象が100件超ありブック名もシート名も変動しますので、VBAのほうが効率的かと考えています。 つぎはぎで以下の構文まで作成しています。最後のEnd Ifの次にNext iを加えて、次の空白セル以降も同じ作業をリピートしたいのですが、変数の参照が不正となります。 実行の条件を、Cells(i,3)が空白の場合にリンク先からコピペとしたいのです。 よろしくお願いします。 Sub test() Dim i, LastRow As Long LastRow = Cells(Rows.Count, 3).End(xlUp).Row For i = 2 To LastRow If Cells(i, 3).Value = "" Then Cells(i, 2).Hyperlinks.Item(1).Follow Application.EnableEvents = False Exit For End If Next sFindbook = "" For Each wbk In Workbooks If wbk.Name <> ThisWorkbook.Name Then sFindbook = wbk.Name Exit For End If Next wbk Windows(sFindbook).Activate ThisWorkbook.Sheets("ブックAのシート名").Cells(i, 11) = ActiveWindow.ActiveSheet.Range("C13") ThisWorkbook.Sheets("ブックAのシート名").Cells(i, 12) = ActiveWindow.ActiveSheet.Range("H6") ThisWorkbook.Sheets("ブックAのシート名").Cells(i, 13) = ActiveWindow.ActiveSheet.Range("G13") ActiveWindow.Close End Sub
- masatsan
- ベストアンサー率15% (179/1159)
マクロで記録して編集すればよいですよ。
お礼
早速のご回答ありがとうございます。 マクロで記録できればいいのですが、ブック名やシート名が変わるので単純な記録では対応できませんでした。
お礼
見本を作成いただきありがとうございます!補完して完成しました! もっと勉強が必要ですね。懲りずに頑張ってみます。