• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【エクセルVBA】別のファイルに名前の定義もコピーして貼り付け)

【エクセルVBA】別のファイルに名前の定義もコピーして貼り付け

このQ&Aのポイント
  • エクセルファイル、book1,book2があります。book1のA1-A10には日付という名前の定義がしてあります。book1にあるコマンドボタンを押すとこのA1-A10をコピーして、book2を開き、book2のA1セルに貼り付けるようにします。このあとbook2のA1-A10をドラッグしたとき日付という名前の定義がしてあるようにしたいです。
  • 普通に貼り付けたら名前の定義はされてないと思いますが、形式を選択して貼り付けのXMLスプレッドシートで貼り付けると名前の定義もコピーして貼り付けられたので、それを取り入れてコードを入力したのですがうまくいきません。
  • 実行時エラー1004 WorksheetクラスのPasteSpecialメソッドが失敗しました。どこをどう訂正したらよいか、あるいは他のうまくいくコードをご存知でしたら教えてください。

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

>形式を選択して貼り付けのXMLスプレッドシートで貼り付けると >名前の定義もコピーして貼り付けられた... なるほど、これは知りませんでした。ありがとうございます。 例えばCドライブtempフォルダにtemp.xlsというテスト用ファイルを作って以下試してみてください。 Sub test1()   Const fName = "c:\temp\temp.xls"   Range("A1:A10").Copy   With CreateObject("excel.application")     '.Visible = True     With .Workbooks.Open(fName)       With .Sheets(1)         .Activate         .Range("A1").Select         .PasteSpecial Format:="XML スプレッドシート"       End With       .Close True     End With     .Quit   End With   Application.CutCopyMode = False   Workbooks.Open fName End Sub このような感じで、別インスタンスのExcel(Excelをもう1コ起動する)で処理すれば、 ご提示の方法で出来なくはないです。 (もしかしたらクリップボードを弄ればこんな面倒な事しなくて可能なのかも。この辺パス) 他に、シートを一旦コピーした後に切り取り-貼り付けする事でもできます。 Sub test2()   Const fName = "c:\temp\temp.xls"   Dim ws As Worksheet      Set ws = ActiveSheet   With Workbooks.Open(fName)     ws.Copy before:=.Sheets(1)     Set ws = .Sheets(2)     With .Sheets(1)       .Range("A1:A10").Cut ws.Range("A1")       Application.DisplayAlerts = False       .Delete       Application.DisplayAlerts = True     End With   End With      Set ws = Nothing End Sub でも、最初から名前定義がある事がわかっていて、コピーと同時に設定したいケースであれば、 どうせマクロで処理するのですから、普通にコピーして、名前の定義も設定すれば良いような気もします。 Sub test3()   Const fName = "c:\temp\temp.xls"   Dim r As Range      Set r = Range("A1:A10")   With Workbooks.Open(fName)     r.Copy .Sheets(1).Range("A1")     .Sheets(1).Range(r.Address).Name = "日付"   End With      Set r = Nothing End Sub いずれもActiveSheetのA1:A10に名前定義があるとして、 "c:\temp\temp.xls"の最左SheetのA1:A10にコピー&名前定義するコードです。

hirosinx
質問者

お礼

返信が遅れてしまい申し訳ないです。 end-uさんのご回答を参考にコードを入力した結果、 私の望みどおりのことができるようになりました! Excelをもうひとつ起動するコードを知らないかったので、 非常に参考になりました。 ありがとうございました。

その他の回答 (1)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

名前を新たに定義してみては Range("A1:A10").Copy Workbooks.Open Filename:=(ファイルの保存先) Range("A1").Select ActiveSheet.Paste ActiveWorkbook.Names.Add Name:="日付", RefersToR1C1:="=" & ActiveSheet.Name & "!R1C1:R10C1"

関連するQ&A

専門家に質問してみよう