- ベストアンサー
マクロでのシートコピーに関する問題と解決方法
- ビスタエクセル2007を使用している際に、マクロでのシートコピーがうまくできない問題について解説します。
- マクロで作成した表を別のシートにコピーすると、印刷はされるが並び替えがされないという現象が起きることがあります。
- この問題の解決方法として、マクロの実行時に一時的にカレントシートを変更することや、シートのコピーではなくデータのコピーを行う方法があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>別のシートにコピーすると印刷はされますが、並べ替えがされずに印刷だけされます。 「ActiveWorkbook.Worksheets("Sheet1").」とシート名が指定されているのが原因でしょう。 この名前のシートはブックの中で一つしかありませんから、別の名前のシートに対しては機能しません。 シート名をしている部分を「ActiveWorkbook.ActiveSheet.」に書き換えると、シートがアクティブになっていれば一つのマクロで機能します。 >同じ表を30枚作成し ブック内の全てのシートに適用するなら下記のようにループを使うと一括処理できます。 除外シートがあるならif文で名前をチェックすれば良いでしょう。 Dim ws As Worksheet For Each ws In Worksheets '処理 ws.Sort.SortFields.Clear : Next
その他の回答 (1)
- hana-hana3
- ベストアンサー率31% (4940/15541)
>私のマクロのどこに挿入すればいいのでしょうか。 必要な処理はループ(For ~ Next)の中に記入します。 例1======================= For ~ 'やりたい事 Next ======================== 例2======================= For ~ If ~ 'やりたい事 EndIf Next =================== のように記入します。 処理内容を全文記入しなくても、処理内容をサブルーチンとして呼び出して処理するようにプログラムを組む事も出来ます。 For~ ws.Activate Call ボタン5_Click Next (参考) VBAで繰り返し処理 http://home.att.ne.jp/zeta/gen/excel/c03p03.htm For Each ~ Next ステートメント http://www.optimizm.jp/002/statem_04.shtml For~Nextステートメント http://excelvba.pc-users.net/fol6/6_3.html Callによるプロシージャ呼び出し http://www.officepro.jp/excelvba/sub/index2.html CALL省略時の引数参照渡し(ByValキーワードを利用する) http://www.moug.net/tech/exvba/0150033.htm
補足
いつもありがとうございます。すみませんもう一つ教えてください。 ブック内の全てのシートに適用するなら下記のようにループを使うと一括処理できます。 除外シートがあるならif文で名前をチェックすれば良いでしょう。 Dim ws As Worksheet For Each ws In Worksheets '処理 ws.Sort.SortFields.Clear : Next とありますが 私のマクロのどこに挿入すればいいのでしょうか。 これが出来れば大変助かります。」よろしくお願いいたします