こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excel2003VBAご教示ください。

お世話になっております。

今 扱っている資料に手作業でマクロを登録しました。
_______________________________
Option Explicit

Sub ●●用()
'
' ●●用 Macro
' 12月1月の店舗を抽出し新しいブックに移動する。
'

'
Selection.AutoFilter Field:=3, Criteria1:="=12月", Operator:=xlOr, _
Criteria2:="=1月"
Selection.AutoFilter Field:=8, Criteria1:="(店名)"
Range("A4:W2076").Select
Range("A86").Activate
Selection.Copy
Sheets.Add
ActiveSheet.Paste
Application.CutCopyMode = False
Sheets("Sheet1").Select
Sheets("Sheet1").Move
End Sub
________________________________
上記は見たままのフィルタを使って 条件を2つ付けて絞って表全体を選択してコピーをし新しいシートを挿入して、そこに貼り付け
そのシートを新しいブックに移動するという 見たまんまの作業ですが
よくよく考えたら「フィルタを絞ったまま広げてないなぁ」と思い、
_____________________________
Option Explicit

Sub フィルタ解除()
'
' フィルタ解除 Macro
' ●●用に抽出したフィルタの解除
'

'
Selection.AutoFilter Field:=3
Selection.AutoFilter Field:=8
Range("A5").Select
ActiveWorkbook.Save
End Sub
________________________________
2つ目のマクロとして、これもまた見たままなのですが広げてセルをホームポジション(?)に移動させ、
上書き保存をするというマクロを別のモジュールで作成しました。

そこで質問なのですが、
・上記2つのマクロは1つにまとめる事は可能でしょうか。
というのも1つめのマクロで新しいブックがアクティブになっているようで その直後に2つめのマクロをそのまま貼り付けたら
「実行時」か「コンパイル」どちらかのエラーがでそうだな。
と思い質問させていただきました。

2つ目の質問として
・新しいブックに名前を付けてデスクトップに保存までしておけば良かったなぁ
と思いましたので それも合わせてご教示いただければと思いました。

まだVBAの勉強を始めたばかりですが 宜しくお願い致します。

投稿日時 - 2009-01-22 17:17:13

QNo.4651756

困ってます

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

のあです。追加質問への回答

基本的にSheetのMoveを行えばSheetがAcctiveになりますが心配なら
Sheets("Sheet1").Select
とそのSheetを選択しActiveにしてやると確実です。
複数のブックが開かれている場合もありますので
WorkBooks("ブック名").Sheets("Sheet1").Select
が正しいでしょうか
ブック名は通常.xlsを含むファイル名です
しかし未保存のブックは.xlsが付かない"Book1"等になりますので
新規で作成する場合、ファイル名は変更する必要がありますけど

心配ならモジュール画面とExcelシート画面を半分の大きさで上下or左右に表示してデバッグツールボタンのステップインを押し1行毎に実行しExcel画面を見てるって方法もあります。
VBA画面のショートカットを変更していないならF8を押すと1行ごとの実行になります。
サブルーチンを使用していてサブルーチン内の表示は必要ないならShift+F8。

慣れてくればSelectionではなくて
対象シートならWorkBooks("ブック名").Sheet("シート名")
対象セルならWorkBooks("ブック名").Sheet("シート名").Range("A1")
若しくはWorkBooks("ブック名").Sheet("シート名").Cells(1,1)
対象シートがActiveなら Range("A1") = "あああ" で代入する事も可能です

マクロ記録では必ず対象セルをSelectしてSelectされたセルに何かを行うように記録されますので.Selectから次行のSelectionまでを消して
短くして利用してます

投稿日時 - 2009-01-23 14:19:23

お礼

再回答 誠にありがとう御座います。

やはり 移動前のブックをアクティブにしないとダメでした。
ご教示いただいた内容
>WorkBooks("ブック名").Sheets("Sheet1").Select
の「Select」を「Activate」に変更して、ご教示いただいた内容通りに
VBEとExcelを並べて表示し、F8で1行づつ実行したら非常にわかりやすかったです。

お陰様でストレスなく作業を進めることが出来ます。
ありがとう御座いました。

投稿日時 - 2009-01-23 16:41:12

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

マクロは同一モジュール内に複数納めてもまったく問題ありません。
先頭の
Option Explicit
一回だけ記述すればよいだけですので複写する時は不要です。

マクロ記録で行っているようですがマクロ記録では現在表示されているシートに対して行うように記録されますので別なブックを作成してモジュール追加してそこに複写してやれば別ブックにしてデスクトップなりマイドキュメントにマクロだけのブックとして保存する事も可能です。

ツールメニューからマクロ実行を呼び出すとブック名.マクロ名で表示されますので問題ありません。
気をつけるのは間違ってマクロが入ってるブックと前面にしてマクロ実行しないようにね。

また、決まったPCで使われるなら個人用のマクロブックが用意されていますのでそこに保存すればExcelを呼び出した時自動的に呼び出されブックは非表示状態で開かれます。

マクロ記録でマクロの保存先を個人用のマクロを選択すると自動的に作成され変更があるときはExcel終了時に個人用のマクロブック保存確認がされます。

バージョンや設定で変更も出来ますがPERSONAL.XLSの名前で作成されます。
C:\Documents and Settings
C:\Program Files
C:\windos
少しずつ変わってきていますが名前はPERSONAL.XLSのままです
一度作成するとウィンドウメニューの再表示の一覧に出るようになります

また、PERSONAL.XLSが保管されているところに他のXLSを保存しておくとExcel起動時にやはり自動で呼び出されるようになります

投稿日時 - 2009-01-22 21:33:17

お礼

ご回答ありがとう御座います。

>決まったPCで使われるなら個人用のマクロブックが用意されていますのでそこに保存すればExcelを呼び出した時自動的に呼び出されブックは非表示状態で開かれます。

そういえば「かんプロVBA」で そのような文章を読んだような気がしました。
そこに保存した方が確かに便利ですよね。

1点ご確認をお願いしたいのですが、1つ目のマクロで最終行
Sheets("Sheet1").Move のように挿入したシートを新しいブックに移動させているので
新しいブックがアクティブになっていると思っています。
そこに 2つ目のマクロ
Selection.AutoFilter Field:=3
Selection.AutoFilter Field:=8
これを いきなり追加しても大丈夫なのかな? と不安になったもので今回質問させていただきました。
2つ目のマクロを そのまま 貼り付けてOKか、もしくは一旦元のブックをアクティブにするコマンドが必要なのか
再度 ご教授いただけませんでしょうか。

お手数お掛けしまして申し訳ありません。
何卒 宜しくお願い致します。

投稿日時 - 2009-01-23 10:56:27

あなたにオススメの質問