Excelのイベントマクロとは?シート2でMacro1を実行する方法

このQ&Aのポイント
  • Excelのイベントマクロとは、特定の操作やイベントが発生したときに自動的に実行されるマクロのことです。シート2でMacro1を実行する方法は、Worksheet_Activateイベントを使用して、シートがアクティブになった時にMacro1を呼び出すように記述します。
  • マクロ1は、データのソートを実行するマクロです。マクロ2は、重複したデータを除外してソートするマクロです。マクロ1からマクロ2を呼び出しています。
  • しかし、現在の記述では無限ループになってしまいうまく動作しません。解決策としては、マクロ実行前にシートを選択するという手順を追加することです。具体的には、Worksheet_Activateイベントの中で、まずシート1を選択し、その後Macro1を呼び出し、最後にシート2を選択するようにします。
回答を見る
  • ベストアンサー

Excelのイベントマクロ

Private Sub Worksheet_Activate()に関する質問です。 ワークシート1と2があるとします。 ワークシート1は普通のデータが記されており、それのソートを実行するマクロをMacro1、そのデータから重複したものを外してソートするマクロをMacro2とし、Macro1から呼び出してます。 今、シート2を開いたときは必ず、シート1でMacro1を実行するようにしたいのですが、以下のように記述すると、無限ループになってしまいうまくいきません。 どなたか、方法をお教えください。 Sheet2に記載したイベントマクロ Private Sub Worksheet_Activate() Sheets("Sheet1").Select Macro1 Sheets("Sheet2").Select End Sub 標準モジュールに記載したマクロ Sub Macro1() Dim team As Integer ActiveSheet.Unprotect ("pass") Range("A3:c18").Select Selection.Sort Key1:=Range("c3"), Order1:=xlAscending, Key2:=Range("A3") ,Order2:=xlAscending, Header:=xlNo,OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal team = Range("b1").Value ActiveSheet.PageSetup.PrintArea = "$A$3:$c$" + CStr(team + 2) Macro2 Range("A1").Select ActiveSheet.Protect ("pass") End Sub Sub Macro2() Range("i3:j18").ClearContents Range("i3").Select Selection.Consolidate Sources:="R3C6:R18C7", Function:=xlMax, TopRow:=False,LeftColumn:=True, CreateLinks:=False Range("i3:k18").Select Selection.Sort Key1:=Range("k3"), Order1:=xlAscending, Header:=xlNo,OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal Range("j3:j18").Select Selection.NumberFormatLocal = "0_);[赤](0)" End Sub

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

  • ベストアンサー
  • m3_maki
  • ベストアンサー率64% (295/459)
回答No.1

これでよろしいのでは? Private Sub Worksheet_Activate()   Sheets("Sheet1").Select    Macro1   Application.EnableEvents = False   Sheets("Sheet2").Select   Application.EnableEvents = True End Sub

関連するQ&A

  • EXCEL VBA ソートにおいて

    EXCEL 2003 のVBAのsortにおいて、解決できなくて困って おります。 名前,色,産地,品質,味,値段,重さ, りんご,赤,青森,10,10,500,100 みかん,黄,和歌山,10,10,300,50 すいか,緑,群馬,10,8,2000,1000 メロン,黄緑,青森,10,8,2500,500 いちじく,赤,鹿児島,8,8,200,100 名前、品質、値段の順に並びかえたいと思い、 excelのVBAの記録でオートフィルタ後に 並び替えを行ったところ下記のコードが記録されました。 Sub Macro28() Cells.Select Selection.AutoFilter Selection.Sort _ Key1:=Range("A2"), Order1:=xlAscending, _ Key2:=Range("D2"), Order2:=xlAscending, _ Key3:=Range("F2"), Order3:=xlAscending, _ Header:=xlYes, OrderCustom:=1, _ MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, _ DataOption1:=xlSortNormal, _ DataOption2:=xlSortNormal, _ DataOption3:=xlSortNormal end sub ところが、これをオブジェクトのマクロに使用して(2,3行目を自分の使い たいように訂正)みると作動しません。 Private Sub CommandButton1_Click() worksheets(1).Select Selection.AutoFilter Selection.Sort _ Key1:=Range("A2"), Order1:=xlAscending, _ Key2:=Range("D2"), Order2:=xlAscending, _ Key3:=Range("F2"), Order3:=xlAscending, _ Header:=xlYes, OrderCustom:=1, _ MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal, _ DataOption2:=xlSortNormal, DataOption3:=xlSortNormal End Sub watch 式では 3行目までは worksheets(1).Select = TRUE ですし Selection.AutoFilter = TRUE となっているのですが、 sortの反応が分からない状況です。 Selection.Sort _ Key1:=Range("A2"), Order1:=xlAscending, _ Key2:=Range("D2"), Order2:=xlAscending, _ Key3:=Range("F2"), Order3:=xlAscending, _ Header:=xlYes, OrderCustom:=1, _ MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal, _ DataOption2:=xlSortNormal, DataOption3:=xlSortNormal この部分が問題なのかと考えております。 ネットで調べて worksheets(1).RANGE("A1:G6").Select Selection.sort…… とか worksheets(1).RANGE("A1:G6").sort とかも試してみたのですが、だめでした。 sort を使用するときにselectionとの相性や、 rangeとの兼ね合いで決まり等があるのでしょうか。 色々なサイトを回ってはいるのですが、ちょっと解決 にいたることができません。 どなたか、ご教授いただけると幸いです。

  • VBAでのエラー(新しいマクロの記録)

    新しいマクロの記録で、work1にてソート等を行って、 新しいマクロ(ソート等)を作成しました。 このマクロは単体で正常に動作するのですが、 sheet1の別のマクロにカット&ペーストで追加し、 動作させたところエラーになってしまいました。 パス的な問題だと思いますが、いまいち理解できません。 以下、ソートの中身 Sheets("work1").Select Columns("A:H").Select Selection.Sort Key1:=Range("B2"), Order1:=xlAscending, Key2:=Range("C2") _ , Order2:=xlAscending, Key3:=Range("F2"), Order3:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal, DataOption2:= _ xlSortNormal, DataOption3:=xlSortNormal

  • エクセルマクロの件

    AとBにあるデータの一覧をCにコピーして、全体を日付順にソートするという処理をしたいと思っています。 そこでエクセルマクロにて (1) Aのデータの必要部分をコピー、Cに貼り付け (2) Bのデータの必要部分をコピー、Cに貼り付け (3) 全体を日付順にソート というものができました。 ただ、Bのデータを貼り付ける位置で問題が発生しています。 仮に、Aに200行までのデータが入っている場合、Bのデータを201行目に張り付けすれば問題ありませんが、Aのデータが増えたときにはAのデータの201行目以降はBのデータで上書きされてしまいます。 そこで、Bのデータを上記の例だと250行目あたりに張り付けするようにマクロを変えると、なぜかBのデータは一切Cに反映されなくなってしまいます。 この理由と、上記の対策があれば教えていただければと思います。 ちなみに、現在設定されているマクロは以下の通りです。 自動記録にてつくってあるので無駄な部分もあるかと思いますが、よろしければご覧いただければと思います。 Sheets("Aのシート").Select ActiveWindow.SmallScroll Down:=-138  Range("A4:O200").Select Selection.Copy Sheets("Cのシート").Select ActiveWindow.SmallScroll Down:=-162  Range("A4").Select ActiveSheet.Paste Application.CutCopyMode = False  Sheets("Bのシート").Select Range("G25:G28").Select Range("G28").Activate ActiveWindow.SmallScroll Down:=-30 Range("A4:O120").Select Selection.Copy Sheets("Cのシート").Select ActiveWindow.SmallScroll Down:=147 Range("A181").Select ActiveSheet.Paste Cells.Select Range("A4:O200").Select Selection.Sort Key1:=Range("C4"), Order1:=xlAscending, Key2:=Range("D4") _ , Order2:=xlAscending, Key3:=Range("E4"), Order3:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal, DataOption2:= _ xlSortNormal, DataOption3:=xlSortNormal End Sub

  • 【Excel2010マクロ】シート名を固定したくな

    マクロには全然詳しくないので、マクロの記録を利用して下記のようなデータの並び替えのマクロを作成したのですが、sheet名が「Sheet2」(大文字小文字区別無し)じゃないとマクロが動きません。 -------------------- Sub 並び替え() ' ' 並び替え Macro ' ' Columns("A:A").Select Columns("A:AR").Select With ActiveWorkbook.Worksheets("Sheet2").Sort .SortFields.Clear .SortFields.Add Key:=Range("AN:AN"), Order:=xlAscending, DataOption:=xlSortNormal .SortFields.Add Key:=Range("AC:AC"), Order:=xlAscending, DataOption:=xlSortNormal .SortFields.Add Key:=Range("AD:AD"), Order:=xlAscending, DataOption:=xlSortNormal .SortFields.Add Key:=Range("AF:AF"), Order:=xlAscending, DataOption:=xlSortNormal .SortFields.Add Key:=Range("AG:AG"), Order:=xlAscending, DataOption:=xlSortNormal .SortFields.Add Key:=Range("AH:AH"), Order:=xlAscending, DataOption:=xlSortNormal .SortFields.Add Key:=Range("AJ:AJ"), Order:=xlAscending, DataOption:=xlSortNormal .SortFields.Add Key:=Range("AK:AK"), Order:=xlAscending, DataOption:=xlSortNormal .SortFields.Add Key:=Range("AN:AN"), Order:=xlAscending, DataOption:=xlSortNormal .SetRange Range("A:AR") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub -------------------- マクロを実行するsheet名は都度変わりますので、sheet名を固定しなくてもデータを並び替えられるようにするには、どのようにしたらよろしいのでしょうか?

  • EXCELでマクロが

    昨日から、期待する動きでなくなりました。 シートに新たに数式を加え、rank関数ではきちんと表示するのですが、マクロを動かすと、 期待した動きでなくなりました。 Sub Sheet2STD昇順並べ替え() ' ' Sheet2STD昇順並べ替え Macro ' ' Range("B6:V24").Select ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add Key:=Range("C7:C24") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Sheet2").Sort .SetRange Range("B6:V24") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Range("A1").Select End Sub 図にある下向きの矢印にマクロを登録しています。

  • 記述を簡略化させたい

    お世話になります。 下記の記述をスマートにさせたいのですが、ご教示お願いします。         記 Sub 優先順位() Range("A16:Y25").Select Selection.Sort Key1:=Range("Y16"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Range("A43:Y52").Select Selection.Sort Key1:=Range("Y43"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Range("A70:Y79").Select Selection.Sort Key1:=Range("Y70"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Range("A97:Y106").Select Selection.Sort Key1:=Range("Y97"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Range("A16").Select End Sub

  • ボタンを押して実行するマクロの編集について

    キャンプの班分けで、いったん班分けという全員の名簿のワークシートから班毎に別々のワークシートに名簿を作成するというマクロです。 ボタンを押して実行します。 班の数が例年18班だったのが、20班に増えてしまいました。 そこでマクロをコピーして数字を変えて19班、20班の分も作りたいと考えています。   19班を作ったのですが、うまくいかず、教えていただければ助かります! Sub Macro1_19() ' ' Macro1_10 Macro ' マクロ記録日 : 2007/7/1 ユーザー名 : kkk' ' Sheets("班分け").Select Selection.AutoFilter Field:=2, Criteria1:="19" Range("C6:Q187").Select ActiveWindow.ScrollRow = 23 ActiveWindow.ScrollRow = 1 Selection.Copy Sheets("19班").Select Range("C8").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False Selection.Sort Key1:=Range("G8"), Order1:=xlDescending, Key2:=Range("I8") _ , Order2:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _ False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin, DataOption1:= _ xlSortNormal, DataOption2:=xlSortNormal Sheets("班分け").Select Selection.AutoFilter Field:=2 Sheets("19班").Select End Sub

  • エクセルのマクロでの並べ替えにおいて

     できるExcel2000マクロ&VBAを読みながら,マクロに初挑戦しました。ところが初めからつまづいています。  住所録の並べ替えです。131人分の住所録をフリガナをキーに並べ替えるのをマクロに記録しました。保存して,早速機能を確認しようと132人目の住所などを入力し,マクロを実行しましたが,機能しませんでした。 Moduleは以下のようになっています。 Sub 五十音順並べ替え() ' ' 五十音順並べ替え Macro ' マクロ記録日 : 2005/1/12 ユーザー名 : ' ' Range("A1:G131").Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range _ ("C2"), Order2:=xlAscending, Key3:=Range("B2"), Order3:=xlAscending, _ Header:=xlYes, OrderCustom:=1, MatchCase:=False, Orientation:= _ xlTopToBottom, SortMethod:=xlPinYin, DataOption1:=xlSortNormal, _ DataOption2:=xlSortNormal, DataOption3:=xlSortNormal End Sub 最初の Range("A1:G131") の131が臭いと思い,この数字を132にしたり,住所録の131番目以上に新しいデータを挿入したりするとマクロは機能します。きっと当然のことなのでしょうが・・・。おそらく記録するときに何か問題があるのではないかと思うのですが,解決法をご教授下さい。

  • エクセルのマクロ記録を他のシートでも実行したい

    エクセル2010を使用しています。 シート1でマクロ記録を使用しデータの並び替えをし、 同じブック内にシート1をコピーしてシート2としました。 このシート2でもシート1で行ったデータの並び替えをしたいのですが シート2ではマクロは実行されませんでした。 わからないながらもVBAを見たところ下記のように 記述されおりましたが、どのような修正をすればよいかご教授いただけると助かります。 ちなみに、シート1でマクロを記録し、そのシートを同ブック内に複数コピーして それぞれのシートでマクロを実行させるということを考えています。 Sub Macro1() ' ' Macro1 Macro ' ' Range("A11:Q17").Select ActiveWorkbook.Worksheets("1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("1").Sort.SortFields.Add Key:=Range("B11:B17"), _ SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:="日,月,火,水,木,金,土" _ , DataOption:=xlSortNormal ActiveWorkbook.Worksheets("1").Sort.SortFields.Add Key:=Range("A11:A17"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("1").Sort .SetRange Range("A11:Q17") .Header = xlGuess .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub

  • Excelのマクロ 検索範囲を広げたい

    マクロ初心者です。 マクロが入ってるExcelファイルがあるのですが、 マクロボタンを押しても結果がでないので、たぶんマクロの検索範囲が1列しかなってないみたいなので広げたいのですが、どうしたらよいでしょうか? Sub 検索準備() ' ' 検索準備 Macro ' ' Sheets("データ表").Select Range("A3:ES2002").Select Selection.Sort Key1:=Range("A3"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Sheets("検索表").Select Range("A4").Select ActiveCell.FormulaR1C1 = "=+R[1]C" Range("A4").Select Selection.Copy Range("B4:ES4").Select Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Sheets("個人スキル").Select Range("D3:E3").Select End Sub Sub スキル検索() ' ' スキル検索 Macro ' ' ' Sheets("検索表").Select Range("A4:ES4").Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("A1:ES4").Select Application.CutCopyMode = False Selection.Copy Sheets("計算表").Select ActiveWindow.SmallScroll ToRight:=-3 Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Range("F1:J149").Select Application.CutCopyMode = False Selection.Copy Range("L1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveWindow.SmallScroll ToRight:=4 Range("L13:P149").Select Application.CutCopyMode = False Selection.Sort Key1:=Range("L13"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Range("L23").Select Sheets("個人スキル").Select Range("D3:E3").Select End Sub 検索準備ボタンと、スキル検索2種類ボタンがあります。 どこをいじくればよいのか分かりません。 検索表の検索範囲が表題を抜かして人の名前などが入ってる列が1列しかなってないので・・・

専門家に質問してみよう