• ベストアンサー

EXCELのブック名を引数(変数)として設定するには

マクロを保存したブック(シート)にデータをコピーしたいブックのウインドウをActiveにしてセルのコピーをしたいのですが、うまくいきません。下記に例を記載しますのでご教示願います。 1 Dim WBK As Workbook 2 Dim stWBK As String 3 Range("A3").Select 'このシートのA3にブック名があります 4 Selection.Copy 5 stWBK = Clipboard 6 Windows(stWBK)Activate 別のやり方で stWBK= Range("A3").Select も試しましたがだめです。

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

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.3

複数のシートやブックを扱う時は、操作対象としているRangeがどのブックのどのシートであるかを明示しておいた方が、間違いが少なくなります。 ブック名、シート名で指定するなら、  Workbooks("book1.xls").Worksheets("sheet1").Range("○○") のようになります。(ブックやシート、Rangeなどは変数でも可) 作業中にかならず対象のブックが開いているという前提であれば、  Windows("ブック名").Activate '/←「.」に注意 で対象のブックをアクティブにできます。 ご質問の例でいえば  stWBK = ActiveSheet.Range("A3").Value (またはText)  Windows(stWBK).Activate で可能ですが、実は、手動での操作と違って、わざわざブックをアクティブにする必要はありません。 セルの値の単純コピーを例にすれば  wb1.sh1.Range("A3") = wb2.sh2.Range("B5") などとすることで、そのままコピーが可能です。 (Wb1,sh1などは、ブック、シートを示す変数です) なお、対象とするブックが開いていない場合は、  Workbooks.Open "○○~~~" などで、ブックを開くところから記述する必要があります。

baru3
質問者

お礼

その後自分なりに試して、うまくいきました。 記述を単純化することで全体が見やすくなりました。 今回のご指摘に感謝しています。ありがとうございました。

baru3
質問者

補足

ありがとうございます。こちらから質問させてください。 wb1.sh1.Range("A3") = wb2.sh2.Range("B5") と変数を使った例を参考に下記作成しましたが Dim Wb1 As Workbook Dim Wb2 As Workbook Dim SH1 As Worksheet Dim SH2 As Worksheet Set Wb1 = "bk1.xls"  ’ここでエラーになります Set Wb2 = "bk2.xls"  ’以降は動作不明 Set SH1 = "sh1" Set SH2 = "sh2" Wb1.SH1.Cells(1, 1).Value = Wb2.SH2.Cells(1, 1).Value のように変数のセットが分かりません。ご教示願います。

その他の回答 (3)

回答No.4

はじめましてぇ。 難しいことは言えませんが、開いているブックをアクティブにするには、以下の通りで出来るはずです。 コピペして試してみてください。 -------------------------------------------------- Sub Test()  Workbooks(Range("A3").Value).Activate End Sub -------------------------------------------------- 参考(Sub Test2)以下のコード:  1.対象のブックをアクティブ  2.決まったセルをコピー  3.自ブックをアクティブに  4.自ブックB3セルに値のみ貼付 -------------------------------------------------- Sub Test2()  Workbooks(Range("A3").Value).Activate  ActiveSheet.Range("A1").Copy  With Me   .Activate   .Range("B3").PasteSpecial xlPasteValues  End With End Sub -------------------------------------------------- ちなみにブックをアクティブにしなくてもコピーは出来ますよ。 どうでしょう?的を射た回答になっていますか?

baru3
質問者

お礼

ありがとうございます。Withプロパティの使用例も教えて頂いて助かります。さらに勉強していきます。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

>3 Range("A3").Select 'このシートのA3にブック名があります 4 Selection.Copy ブック名として必要なのはセルA3に入っている、文字列(だけ)でしょう。だからコピーすることはしない。 そういう場合はRange(”A3").Valueを右辺に書くとか、このまま使絵ば良い。 ブックのコピーはどこでやってますか。Selection.Copy はその役割は出来ません。 ーー 全体に、マクロの記録をとって、その場合は1個別ケースですから 、一般化するには、どこをどうするか考えましたか。 マクロの記録が取れない操作もありますが、それも含めて、マクロの記録ぐらいやってみて質問すべきです。 全体的に質問のコードは、主要なコード部分が無い。コピー貼り付け とかの部分。 あと「エクセル ブック 複写」などでWEB照会も済まして勉強してから質問のこと。

baru3
質問者

お礼

ありがとうございます。 マクロの記録をとり、複数のブック名を作業ブックの特定セルに列記し 順にブック名(4月勤怠xls、5月勤怠.xls~12月勤怠.xls)を取り出しその中の残業時間を順次作業ブックに貼り付けたいと考えてました。 Range(”A3").Valueを使ってみます。

  • DIooggooID
  • ベストアンサー率27% (1730/6405)
回答No.1

データをコピーしたいブックのファイル名は、どのように受け渡したいとお考えでしょうか?

baru3
質問者

お礼

お問い合わせありがとうございました。 また何かの機会にご指導ねがえればと思います。

baru3
質問者

補足

今回は作業ブック(シート)に勤怠表のように月ごとに作成したブック名を特定のセルに記入しておき、順に文字列として取り出し、複数開いたWindowの所定のブックをactiveにし、残業時間等のデータをコピーして月別・人別の表を作成しようとしています。 このときデータコピーのモジュールを一般化し文字列の引数として渡したいと思います。次の段階では月毎のブック内の人別シート名も文字列の引数にしてデータコピーのモジュールをさらに一般化したいと思います。

関連するQ&A