Excel2003VBAのマクロについての質問

このQ&Aのポイント
  • Excel2003のVBAで作成したマクロについての質問です。
  • マクロを2つ作成し、それぞれのマクロの実行時にエラーが出る可能性があるかどうかについて教えてください。
  • また、新しいブックに名前を付けてデスクトップに保存する方法についても教えてください。
回答を見る
  • ベストアンサー

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の勉強を始めたばかりですが 宜しくお願い致します。

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

  • ベストアンサー
  • noah7150
  • ベストアンサー率46% (116/251)
回答No.2

のあです。追加質問への回答 基本的に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までを消して 短くして利用してます

ookami1969
質問者

お礼

再回答 誠にありがとう御座います。 やはり 移動前のブックをアクティブにしないとダメでした。 ご教示いただいた内容 >WorkBooks("ブック名").Sheets("Sheet1").Select の「Select」を「Activate」に変更して、ご教示いただいた内容通りに VBEとExcelを並べて表示し、F8で1行づつ実行したら非常にわかりやすかったです。 お陰様でストレスなく作業を進めることが出来ます。 ありがとう御座いました。

その他の回答 (1)

  • noah7150
  • ベストアンサー率46% (116/251)
回答No.1

マクロは同一モジュール内に複数納めてもまったく問題ありません。 先頭の Option Explicit 一回だけ記述すればよいだけですので複写する時は不要です。 マクロ記録で行っているようですがマクロ記録では現在表示されているシートに対して行うように記録されますので別なブックを作成してモジュール追加してそこに複写してやれば別ブックにしてデスクトップなりマイドキュメントにマクロだけのブックとして保存する事も可能です。 ツールメニューからマクロ実行を呼び出すとブック名.マクロ名で表示されますので問題ありません。 気をつけるのは間違ってマクロが入ってるブックと前面にしてマクロ実行しないようにね。 また、決まったPCで使われるなら個人用のマクロブックが用意されていますのでそこに保存すればExcelを呼び出した時自動的に呼び出されブックは非表示状態で開かれます。 マクロ記録でマクロの保存先を個人用のマクロを選択すると自動的に作成され変更があるときはExcel終了時に個人用のマクロブック保存確認がされます。 バージョンや設定で変更も出来ますがPERSONAL.XLSの名前で作成されます。 C:\Documents and Settings C:\Program Files C:\windos 少しずつ変わってきていますが名前はPERSONAL.XLSのままです 一度作成するとウィンドウメニューの再表示の一覧に出るようになります また、PERSONAL.XLSが保管されているところに他のXLSを保存しておくとExcel起動時にやはり自動で呼び出されるようになります

ookami1969
質問者

お礼

ご回答ありがとう御座います。 >決まったPCで使われるなら個人用のマクロブックが用意されていますのでそこに保存すればExcelを呼び出した時自動的に呼び出されブックは非表示状態で開かれます。 そういえば「かんプロVBA」で そのような文章を読んだような気がしました。 そこに保存した方が確かに便利ですよね。 1点ご確認をお願いしたいのですが、1つ目のマクロで最終行 Sheets("Sheet1").Move のように挿入したシートを新しいブックに移動させているので 新しいブックがアクティブになっていると思っています。 そこに 2つ目のマクロ Selection.AutoFilter Field:=3 Selection.AutoFilter Field:=8 これを いきなり追加しても大丈夫なのかな? と不安になったもので今回質問させていただきました。 2つ目のマクロを そのまま 貼り付けてOKか、もしくは一旦元のブックをアクティブにするコマンドが必要なのか 再度 ご教授いただけませんでしょうか。 お手数お掛けしまして申し訳ありません。 何卒 宜しくお願い致します。

関連するQ&A

  • Excel2003VBA

    お世話になっております。 手作業マクロの記録で下記作業を行い、一部修正をして一度はうまく動作していたのですが 1点 問題が御座いまして独自に色々試していたのですが、どうにもうまくいかないので どなたかご教授いただけませんでしょうか。 Sub ●●用() ' ' ●●用 Macro ' 12月1月の店舗を抽出し新しいブックに移動する。 ' Selection.AutoFilter Field:=3, Criteria1:="=12月", Operator:=xlOr, _ Criteria2:="=1月" Selection.AutoFilter Field:=8, Criteria1:="(店名)" Range("A4:W2076").Select Selection.Copy Sheets.Add ActiveSheet.Paste Application.CutCopyMode = False Worksheets("Sheet1").Select Worksheets("Sheet1").Move Workbooks("営業部まとめ.xls").Sheets("全件表示").Activate Selection.AutoFilter Field:=3 Selection.AutoFilter Field:=8 Range("A5").Select ActiveWorkbook.Save End Sub まず、 >Worksheets("Sheet1").Move ここだけあれば >Worksheets("Sheet1").Select こっちは必要ないでしょうか? あと、上記の中で > Worksheets("Sheet1").Select この部分なのですが、毎回「Sheet1」とは限らないので「アクティブシート」にしたいと思い色々試してみましたが 全てエラーとなり、結局元にもどしてしまいました。 > Worksheets("Sheet1").Move あと出来ればこれも移動させた後でデスクトップに名前を付けて保存までしたいのですが どのようなコードを追加すればよろしいでしょうか。 宜しくお願い致します。

  • EXCELのVBAを実行したら止まってしまいます。。。

    お世話になります。 下記のマクロを作ってみたのですが、シート「読込」にコピーされたところまで確認できるのですが、その後マウスが砂時計になって、動かなくなってしまいます。オートフィルタを解除する部分を削って実行してみましたが、同じところで止まりますので、貼付のところに問題があるようなのですが、何がいけないのでしょうか? また、なんかもっとスマートなプログラムになりませんでしょうか? 宜しくお願いします。 Sub test() Sheets("Normal").Select Range("A2").Select Selection.AutoFilter Field:=1, Criteria1:=Sheets("読込").Range("B2"), _ Operator:=xlAnd, Criteria2:=Sheets("読込").Range("C2") Selection.SpecialCells(xlVisible).Copy Sheets("読込").Select Range("C3").Select ActiveSheet.Paste Sheets("Normal").Select Application.CutCopyMode = False ActiveSheet.ShowAllData Selection.AutoFilter End Sub

  • Excelでマクロを繰り返したい。

    Excelでマクロを記録したら以下のようになりました このマクロを以下の条件で繰り返したいのですが。 Sub Macro1() '------------- '----------------------- ' Sheets("Sheet1").Select Selection.AutoFilter Field:=4, Criteria1:="=5*", Operator:=xlAnd, _ Criteria2:="<>5@*" Range("A3:A302").Select Selection.Copy Sheets("Sheet2").Select Range("A3").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Sheet1").Select Range("A1").Select Selection.AutoFilter Field:=4, Criteria1:="=6*", Operator:=xlAnd, _ Criteria2:="<>6@*" Range("A3:A302").Select Selection.Copy Sheets("Sheet2").Select Range("B3").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Sheet1").Select Selection.AutoFilter Field:=4, Criteria1:="=7*", Operator:=xlAnd, _ Criteria2:="<>7@*" Range("A3:A302").Select Selection.Copy Sheets("Sheet2").Select Range("A103").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Sheet1").Select Range("A1").Select Selection.AutoFilter Field:=4, Criteria1:="=8*", Operator:=xlAnd, _ Criteria2:="<>8@*" Range("A3:A302").Select Selection.Copy Sheets("Sheet2").Select Range("B103").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End Sub 条件= Field:は4~35位まで変動します 一連の動作をコピーして手作業で数字を変えてみたのですが プロージャが大きすぎてエラーになってしまいます。 何か良い方法は無いでしょうか?。

  • オートフィルター VBAでの設定について

    オートフィルターで0以外のものに絞って、 コピーしたいのですが、 値が0しかない場合にすべてのものをコピーするように なってしまうので、 コピーすることがないようにさせたいです。 例) Sub test() Sheets("Sheet1").Select Selection.AutoFilter ActiveSheet.Range("$A$2:$A$10").AutoFilter Field:=1, Criteria1:="<>0" Range("A2:A10").Select Range(Selection, Selection.End(xldown)).Select Selection.Copy End Sub このようなコードの場合にA2:A10の値が0しかなかった場合に コピーしている状態をなくしたいのですが、 どこのコードを変えたらいいでしょうか。 回答よろしくお願いいたします。

  • オートフィルタのマクロについて

    オートフィルタのマクロを組もうとしているのですが、フィルタ条件に別シートのセルの値を入れたいのですが、そこがどうもうまくいきません。 作成したマクロは以下の通りです。 Sub 累計計算マクロ() Dim aRange As Range, bRange As Range, i As Date Set aRange = Sheets("累計").Range("B1") Set bRange = Sheets("累計").Range("B2") i = aRange.Value Sheets("クイーンエステート").Activate Range("A13:L13").Select Selection.AutoFilter Selection.AutoFilter Field:=2, Criteria1:="<=i", Operator:=xlAnd End Sub どなたか助けてください! 宜しくお願い致します。

  • エクセルマクロVBAについて

    エクセルマクロVBAについて、こんなこと出来ますか? ■A列からAS列の1行目にヘッダー情報をもつデータベース ■A列に担当者名 ■A列にオートフィルタをかけて各担当ごとにデータを抽出したものを別シートに貼り付けて自動印刷したい ■担当者は都度変わるので、Criteria1:="xxx"というようには直接書けない(担当名を自動で抽出したい) ■担当者の数も都度変わる ■補足 一行のデータを特定の雛形に転記する必要があるので別シートに出したいです ちなみに、アナログで記録したコードは以下です。 Sub test1() Sheets("データ抽出シート").Select ActiveSheet.Range("$A$1:$AS$300").AutoFilter Field:=1, Criteria1:="山田" Range("$A$1:$AS$300").Select Selection.Copy Sheets("抽出データ貼付シート").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("データ抽出シート").Select ActiveSheet.Range("$A$1:$AS$300").AutoFilter Field:=1, Criteria1:="斉藤" Range("$A$1:$AS$300").Select Selection.Copy Sheets("抽出データ貼付シート").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("データ抽出シート").Select ActiveSheet.Range("$A$1:$AS$300").AutoFilter Field:=1, Criteria1:="田中" Range("$A$1:$AS$300").Select Selection.Copy Sheets("抽出データ貼付シート").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveWindow.SelectedSheets.PrintOut Copies:=1 End Sub これ、担当者の抽出を自動でなんとかなりませんか?

  • エクセルでのフィルタについて

    エクセルのことで、教えてください。 1つのブックに、たくさんのシートがあります。 1枚は、印刷用シートでA1セルの数字によって内容を変更できるようになっています。 2枚目以降は1列目に1から45までの数字、2列目以降に文章があります。 で、2枚目以降の2列目を印刷用シートに図のリンク貼り付けしておいて、印刷用シートのA1セルの数字で、2枚目以降のシートをフィルタリングすると、印刷用シートの内容が変更するようにしています。 そのフィルタリングのために、以下のようなマクロを組んでいます。 a = Range("A1").Value Sheets("Sheet2").Select Selection.AutoFilter Field:=1, Criteria1:=a Sheets("Sheet3").Select Selection.AutoFilter Field:=1, Criteria1:=a Sheets("Sheet4").Select Selection.AutoFilter Field:=1, Criteria1:=a       以下シートの枚数だけ続く。 これだとこのマクロが実行完了するまである程度の時間を要するので、もう少し時間を短縮できるような記述に出来ないかというのがお聞きしたいことです。マクロの記録で作成したものを参考にしたのでこうなっているんですが、何かうまい方法があれば教えてください。

  • エクセルVBAの一時停止後、 入力し再実行したい

    エクセルVBAでオートフィルター実行後に一時停止し、オートフィルターで選んだエクセルシート上のセルに直接入力た後、マクロを再実行させたい。 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2008/3/2 '製品コードより枠番を選ぶ Selection.AutoFilter Field:=12, Criteria1:="=?????1*", Operator:=xlAnd 'ここで一時停止し、エクセルシート上で入力した後、次の行を実行したい Selection.AutoFilter Field:=12, Criteria1:="=?????2*", Operator:=xlAnd 'ここで一時停止し、エクセルシート上で入力した後、次の行を実行したい Range("A1").Select End Sub

  • [Excel2003] マクロのユニコード表示

    Excelでシート名やセル内の文字列にユニコード(韓国語)があります。勿論正常に表示されています。 しかしマクロが正常に実行されません。 マクロの内容は Sheets("???").Select Selection.AutoFilter Field:=6 Selection.AutoFilter Field:=6, Criteria1:="???" これだけのマクロなんですが^^ "???"の箇所に韓国語が入ってます。 これは仕様ではないかと思っていますが、何か対処方法があれば教えてください。 よろしくお願いいたします。

  • EXcelオートフィルタのオプション設定で条件として変数をマクロで組むには?

     オートフィルタ機能を使い、指定期間内のデータを抽出するようにマクロを組みたい。指定期間が一定ではないので変数を設定したいのですがうまくいきません。下記はマニュアルで入力したものをマクロに記録したものです。指定期間は他のBookのセルに入力画面として設けてあります。例えばBook2/B1(開始)~B2(終了)。 Range("A1").Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:=">=2005/8/21", Operator:=xlAnd _ , Criteria2:="<=2005/9/20" Range("C1").Select End Sub

専門家に質問してみよう