質問: エクセルマクロ コピー元と貼り付け先を指定してコピー&ペーストを実行するマクロ 単刀直入にやりたいことを述べます。 cドライブと仮定します。3つのbookがあります。 それぞれ ----- book1.xls「○○sheet」・・・(実行するファイル) a 1 book2.xls「△△sheet」・・・(コピーするファイル名の指定です) 2 a2:e2・・・(コピーするセル範囲の指定) 3 book3.xls「□□sheet」・・・(貼り付け先のファイル名の指定です) 4 a5・・・(貼り付け先のセルの指定) ----- book2.xls「△△sheet」・・・(コピー元ファイル) abcde 1 あいうえお 2 かきくけこ 3 ・・・・・ ----- book3.xls「□□sheet」・・・(貼り付け先のファイル) abcde 1 ・・・・・ 2 かきくけこ・・・(貼り付け) 3 ・・・・・ ----- >やりたいこと book1.xls「○○sheet」のa1のセルの値とa2セルの値を参照し、 その該当bookのセル範囲(book2.xls「△△sheet」のa2:e2)をコピーして、 book1.xls「○○sheet」のa3のセルの値と、a4セルの値を参照し、 その該当bookのセル範囲(book3.xls「□□sheet」のa5)へペーストする。 別のブックの指定したセルの値を別のブックの指定したセルへ貼り付けるだけなんですが、 以前関数を使って似たような事をしようとしたのですが、うまくいかなかったので、マクロならできるのでしょうか。 よろしくお願いします。(ちなみにエクセル2000又は2003です)
回答: 思われていることと違っていたらすみませんが、参考までに下記のコードをbook1.xlsのマクロに貼り付けて実行してみてください。 コピー先のbookを壊してはいけないので必ず、コピーしたbook等でテストしてみてください。 3つのbookがcドライブ直下にあり、book1.xlsの参照するシートのシート名が○○sheetであることが前提です。 メニューバーの「ツール」→「マクロ」→「マクロ」をクリック ↓ マクロのダイアログが表示されたらマクロ名に自由に名前を入力してください。(例:コピーペースト) ↓ 名前を入力しましたら、「作成」をクリック ↓ microsoft visual basicの画面が開きますのでsub コピーペースト()の下に次のコードをコピーして貼り付けてください。 dim inファイル名 as string dim inシート名 as string dim in範囲 as string dim outファイル名 as string dim outシート名 as string dim out範囲 as string dim 文字列 as string dim 検索文字 as string dim 文字カウント as integer dim 文字数 as integer '○○sheetのa1にあるファイル名とシート名を取得する 文字列 = sheets("○○sheet").range("a1") 検索文字 = "「" 文字カウント = application.worksheetfunction.find(検索文字, 文字列, 1) 文字カウント = 文字カウント - 1 'ファイル名の文字数を取得 inファイル名 = left(文字列, 文字カウント) 'inファイル名の取得 文字数 = len(文字列) 文字カウント = 文字数 - (文字カウント + 1) 'シート名の文字数を取得 文字列 = right(文字列, 文字カウント) 文字カウント = len(文字列) - 1 inシート名 = left(文字列, 文字カウント) 'inシート名の取得 in範囲 = sheets("○○sheet").range("a2") 'コピーの範囲 '○○sheetのa3にあるファイル名とシート名を取得する 文字列 = sheets("○○sheet").range("a3") 検索文字 = "「" 文字カウント = application.worksheetfunction.find(検索文字, 文字列, 1) 文字カウント = 文字カウント - 1 'ファイル名の文字数を取得 outファイル名 = left(文字列, 文字カウント) 'outファイル名の取得 文字数 = len(文字列) 文字カウント = 文字数 - (文字カウント + 1) 'シート名の文字数を取得 文字列 = right(文字列, 文字カウント) 文字カウント = len(文字列) - 1 outシート名 = left(文字列, 文字カウント) 'outシート名の取得 out範囲 = sheets("○○sheet").range("a4") '貼り付ける位置 'a1のセルの値とa2セルの値を参照しコピー workbooks.open filename:="c:\" & inファイル名 'inファイルのopen workbooks(inファイル名).worksheets(inシート名).activate worksheets(inシート名).range(in範囲).select selection.copy 'コピー application.displayalerts = false activeworkbook.close savechanges:=false 'inファイルのclose application.displayalerts = true 'a3のセルの値と、a4セルの値を参照しペースト workbooks.open filename:="c:\" & outファイル名 'outファイルのopen workbooks(outファイル名).worksheets(outシート名).activate worksheets(outシート名).range(out範囲).select application.displayalerts = false activesheet.paste '貼り付け application.displayalerts = true application.cutcopymode = false application.displayalerts = false activeworkbook.close savechanges:=true 'outファイルのclose application.displayalerts = true msgbox "コピー&ペーストが終了しました。 " '****コピー貼り付けはここまで **** microsoft visual basicの画面を×で閉じます ↓ excel画面のメニューバーの「ツール」→「マクロ」→「マクロ」をクリック ↓ 先ほど名前を付けたマクロを選択して「実行」をクリック book1.xlsの参照するシート名が○○sheetでない場合は上記のコードの○○sheetのところを修正してください。 また、各book*.xlsがcドライブ直下に無い場合は、上記コードの"c:\"のところを修正してください。