- ベストアンサー
エクセルマクロでコピーの質問です
- エクセルマクロを使用して、別のエクセルファイルの特定のセルをコピーして貼り付ける方法について質問があります。
- マクロをThisWorkbookに貼り付けると文字列として保存されるため、コピーが正常に機能しません。エラー400が発生します。
- エクセルマクロの機能についてまだ理解が不十分であり、解決策がわかりません。アドバイスをお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 このマクロのコードを入れるブックを「コピー.xls」として、その標準モジュールに Sub Macro1() Workbooks.Open Filename:="xxxx.xls" Range("D1:F10").Select Selection.Copy Windows("コピー.xls").Activate Worksheets("Sheet2").Select Range("D4").Select Selection.PasteSpecial Paste:=xlPasteValues Windows("01化.xls").Close End Sub を入れて実行してみてください。 このコードはマクロの記録を基にしてます。行きずまったらこの方法(マクロの記録)をやってみること。 上記は一応テスト済みです。 ーー このコピー関係は初心者には難しい点です。またWindowsの扱いも難しい。 Paste シートなどに対するのメソッドです PasteSpecial Rangeに対するメソッドです。 初心者はこの点を意識して無いと思います。 Googleででも「pastespecial vba Rangeクラスの」などで照会してみてください。 http://okwave.jp/qa/q5233090.htmlの#2Wendy02さんの回答などよく読まれることをお勧めします。 ブックの扱いが2つ以上のブックの扱いになった場合は注意が必要です。 ーー またメソッド・プロパティなどの前に書く、「オブジェクト」(の部分)については、初心者は略すことが多いようですが、いつも、「もし厳密に書くとすると何なのか、限定するとするとそのコードはどうなるか」を意識しないと、場合によってエラーが起こることがありえます。 WEBや本のコード見本などは熟練者が書く場合が多く、略した場合の既定値に頼りオブジェクトの部分を略してある場合が多いが無意識にコピーしているとこのへんの勉強がおろそかになるように思う。。
その他の回答 (4)
- hananoppo
- ベストアンサー率46% (109/235)
ANo.3です。先程のマクロはもっとシンプルにできるようです。 Sub before() Dim Ws As Worksheet Set Ws = ActiveSheet Workbooks.Open Filename:="C:\aaa\1.xls" Range("A1:A5").Copy Ws.Range("A1") Workbooks("1.xls").Close End Sub 罫線をコピーしたくない場合は、下から3行目を次のように変更します。 Range("A1:A5").Copy Ws.Range("A1").PasteSpecial xlPasteAllExceptBorders
- hananoppo
- ベストアンサー率46% (109/235)
こんな感じでどうでしょう。 Sub before() Dim Wb As Workbook Set Wb = ActiveWorkbook Workbooks.Open Filename:="C:\aaa\1.xls" Range("A1:A5").Copy Wb.Activate Range("A1").Select ActiveSheet.Paste Workbooks("1.xls").Close End Sub 罫線をコピーしたくない場合は、下から3・4行目を次のように変更してください。 Range("A1").PasteSpecial xlPasteAllExceptBorders
- merlionXX
- ベストアンサー率48% (1930/4007)
書く場所についてはすでに指摘のとおり、標準モジュールへ あと、多分貼り付け先のセル書式が「文字列」になっているのでは? 以下でどうですか? Sub before() Workbooks.Open Filename:="C:\aaa\1.xls" Range("A1:A5").Copy ActiveWindow.Close Range("A1:A5").NumberFormatLocal = "_ * #,##0_ ;_ * -#,##0_ ;_ * ""-""_ ;_ @_ " Range("A1").PasteSpecial End Sub
- imogasi
- ベストアンサー率27% (4737/17069)
>このマクロをThisWorkbookに貼り付けると イベントプロシージュアーでないようなので、sum.xlsで、標準モジュールを挿入して、そこに貼り付けて、実行しないとならないのでは。ThisWorkbookはブックのイベントを受けるコードを書く部分だと思う。