• ベストアンサー

エクセル マクロの実行方法について

エクセル2003を使っています。 あるセル(例えばA1)をクリックする(アクティブにする)とあるマクロ(例えばmacro1)が実行されるようにしたいのですが、どのようにすればよいのでしょうか? フォームボタンを作ってボタンにマクロを割り当てるという方法は都合が悪いので、上記方法が実現できるととても助かります。 初歩的な質問で申し訳ありませんがよろしくお願いします。

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

  • ベストアンサー
  • diashun
  • ベストアンサー率38% (94/244)
回答No.3

diashun です。 こういうVBEも・・・ Sheet1のVBEに以下を記述↓ Option Explicit Private Sub Worksheet_SelectionChange(ByVal Target As Range) Call Macro1(Target) End Sub 標準モジュールに以下を記述↓ Option Explicit Sub Macro1(Target As Range) Dim rA1 As Range Set rA1 = Range("A1") If Target.Address = rA1.Address Then 'セルA1がアクティブになったときの処理を記述 MsgBox "セルA1がアクティブになりました" Else 'セルA1がアクティブでない時の処理を記述 MsgBox "セルA1は非アクティブです" End If   Set rA1 = Nothing End Sub

MSZ006
質問者

お礼

ありがとうございます。 すばらしいです!思ったとおりの動きです! 大変参考になりました。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Address = "$A$1" Then ' macro1 MsgBox "実行" End If End Sub $A$1のAは大文字でこの通りに。 上記はA1セルをダブルクリックすると「実行」とでます。 本番はMacro1の前の’を消し、MsgBoxの行を消して 下さい。 コマンドボタンをフォームに載せず、シートに貼りつける手もあります。 A1セルが実際は他のセルの場合はどう変えるべきかわかりますね。

MSZ006
質問者

お礼

ありがとうございます。ダブルクリックでは入力状態になってしまうのでちょっと期待通りの動きではありませんがとても参考になりました。

全文を見る
すると、全ての回答が全文表示されます。
  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.1

VBEを開いて 該当のワークシートのイベントをSelectionChangeに指定して、以下下記のようなコードを。 --- Private Sub Worksheet_SelectionChange(ByVal  Target As Range)  If Target = Range("A1") Then   MsgBox ("処理中")  End If End Sub ---

MSZ006
質問者

お礼

ありがとうございます、参考になりました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • EXCELマクロを実行したときのコンパイルエラー

    EXCELでSolverをマクロで実行出来るようにしたいのですが、 マクロの記録のボタンをクリック→ツールでソルバーを選択→目的セル、目標値、変化させるセルを選択→実行→OK→記録終了で、マクロを作成し、 マクロを開いて実行をすると、コンパイルエラーが表示され、「subまたはFunctionが定義されていません」と表示されて止まってしまいます。ちなみに、EXCEL2003でも2007でも同じ状況です(ToT)。 マクロのソースは下記のようになっていて「SolverOk」のところがblueに反転してとまっています。 どなたか対処方法をご存知でしたら教えて頂けないでしょうか?よろしくお願いいたします(m_m) Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2011/9/13 ユーザー名 ' ' SolverOk SetCell:="$E$8", MaxMinVal:=2, ValueOf:="0", ByChange:="$E$7" SolverSolve End Sub

  • EXCELでセルの値が変化したときだけにマクロ実行

    教えてください。 EXCELのA1セルの値が1→0に変化したときにMacro1を実行、0→1に変化したときにMacro2を実行したいと思い、以下のマクロを「シート名タブ右クリック」→「コードの表示」で開く画面に打ちました。 そうしたところキーボードからA1セルに1や0を打ち込むとMacro1・Macro2を実行するのですが。A1セルに関数式を入れ自動で1→0・0→1に変化してもMacro1・Macro2が実行されません。この場合どう修正すればMacroが実行されるようになりますか? ※ちなみにA1セルの関数式はある条件を満たしたら1、そうでない時0という式です。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" And Target.Value = 0 Then Macro1 End If If Target.Address = "$A$1" And Target.Value = 1 Then Macro2 End If End Sub

  • どのファイルを開いた時もマクロを自動実行。エクセル

    新規にエクセルを開いたときだけマクロを自動実行するには、 personal.xlsで Sub auto_open() ' Macro1 Macro Range("A1").Value = "111" End Sub とすれば良いかと思いますが、 新規に開くどのファイルに対しても ファイル名ABC を含んでいる時だけ マクロを自動的に実行するにはどうしたらよいでしょうか? (ファイルを開いてから マクロボタンを押して マクロに”ファイル名を チェックしてA1にデータを書き込む”があるのはだめです。) (アドインでツールバーボタンを押すのもだめです。) エクセルは2003 OSはXPです。 説明不足でしたらすみません。

  • エクセルのマクロの記憶について質問です。

    知人にエクセルのマクロを作ってもらいました。(メモ帳に貼付けた状態で3種類あります) エクセルに保存する時に 「ツール」「マクロ」「新しいマクロの記憶」どこかのセルを2、3個クリック。 マクロ名は何も変えずに「Macro1」のまま、マクロの保存先は「個人用マクロブック」 セルを適当に2、3個クリック。で「記憶終了」をクリック。 次にAltとF11を押す。 標準モジュールのModule1を開いてメモ帳のデータを貼付け。 マクロのタイトルはSub SSS()となっています。 で、エクセルの終了「個人用マクロブックの変更を保存・・・」の画面で「はい」を クリック。 次にマクロを掛けたいデータを立ち上げてマクロを実行しようとして「ツール」「マクロ」の画面でPERSONAL.XLS.SSS というのとPERSONAL.XLS.Macro1というのが 出来ています。 これっておかしいのですよね? どうすればよいのですか? 何種類かマクロを使うので名前は「SSS」にしたいのです。 最初のマクロの記憶のところでマクロ名をMacro1のままにしたのは間違いですか? 又、何度かマクロを保存しては削除したりと繰り返すとマクロ自体は一つ二つなんですが Module1がどんどん増えてModule8くらいになってしまっています。 どのようにすれば良いのですか? 大変初歩的な質問で申し訳ありませんが宜しくお願いします。 ちなみにエクセルは2000を使用しています。

  • IF関数を使ってマクロを実行させるには?

    Excel2002のユーザーです。 実行させたいマクロを Macro1、Macro2 とします。 セルA1の値を参照して実行させたいマクロを選択するために =IF(A1=1,Macro1(),Macro2()) というようなことをやってみたのですがうまくいきません。 このようにIF関数を使ってマクロを実行させるにはどのような記述をすればよいのでしょうか。 凄く簡単なことかもしれませんが、ご教授をよろしくお願い致します。

  • エクセルXPと2000でのマクロ

    初歩的な質問になりますがご存知の方は是非教えて下さいm(__)m EXCELXPでリストから並び替えのマクロを記録させてフォームボタンに登録したのですがそのマクロをEXCEL2000で開いて実行しようとすると「コンパイルエラー/プログラムまたはライブラリィがありません」とでて実行できません。 ボタンでなくメニューバーからマクロを実行すると実行できます。 番号の振り直しのマクロもフォームボタンからは上記同様できません。 でも●●シートへ戻るとか振り仮名を表示するとか非表示にするとかはフォームボタンからでも実行できます。 EXCEL2000で同じ操作のマクロを作ってフォームボタンに新たに登録しなおすとボタンからの実行が出来るようになりました。 VBA画面でみるとエラーの箇所に「DataOption1:=xlSortNormal」とでていて(こちらはEXCELXPで作ったマクロ)EXCEL2000で作ったマクロと比べると「Orientation:=xlTopToBottom」と出ていて違うみたいだなぁと・・・。 でも基本的にVBA画面はあまり分からないので、なんでボタンから操作するとエラーが出たのか分かりません。理由が分からないので修正もできません。(┰_┰) 2000とXPと両方で開くことが多いのでどちらでも実行できるような状態にしておきたいのですがどうしたらいいのでしょう?何故こんなエラーがでてしまうのでしょう?対策はどうしたらいいのでしょう? どうかご存知の方、宜しくお願いしますm(__)m 因みにEXCEL2000のPCのOSは98でEXCELXPのPCのOSはXPです。

  • エクセルでのマクロ作成

    エクセルで作成したボタンをクリックすると以下の事を行うマクロを作りたいと思っています。 (1)最初に貼り付けたいセルの範囲をドラッグで選択する。(手動) (2)マクロを登録したボタンを押す。 (3)マクロ内で指定したセル(たとえば $A$1)をコピーして、(2)でボタンを押してマクロを実行する前に(1)で選択したセルの範囲に貼り付ける。 VBAが分からないので難儀しています。 宜しくお願いします。

  • EXCELで”+100"を実行するマクロ

    EXCELで、マクロを実行するたびに、そのセルに入っている数に100プラスされるマクロを作りたいのです。 意味がよく分からないかもしれませんが、 例えば、あるセルに"100"という数値が入っていて、 1回実行すれば100+100で"200"に、もう1度実行すると、200+100で"300"に。…という感じです。 私的に考えたのは、 別のセルに"そのセル+100"をする式を書き込み、 コピー&元のセルに値貼り付けをし、 式の入った別のセルをDELする… というのをマクロにしてみたのですが、 イマイチうまくないというか… よい方法があったら、アドバイスください。

  • 記録したマクロを他のシートにも同時に実行する方法

    いつもお世話になります。 下記のように選んだセルのデータを削除するマクロを「マクロの記録」で作成しました。 Sub Macro2() ' ' Macro2 Macro ' ' Range("E5:R12").Select ActiveWindow.SmallScroll Down:=6 Range("E5:R12,E14:R22").Select Range("E14").Activate ActiveWindow.SmallScroll Down:=12 Range("E5:R12,E14:R22,E24:R28").Select Range("E24").Activate ActiveWindow.SmallScroll Down:=6 Range("E5:R12,E14:R22,E24:R28,E30:R34").Select Range("E30").Activate Selection.ClearContents End Sub 「Macro2」の実行ボタンを作り、シート名「1」~「31」の同じセルのデータをボタンをクリックして、一括で削除したいのですが、この記述をどのように変更したらよいのか、マクロを始めたばかりの初心者の私にご教授して頂けませんでしょうか? 「マクロの記録」で各シートを選び、セルを選んでdeleteして行く方法はありますが、今後のためにも記述の編集で出来る方法をお教え下さい。 よろしくお願いいたします。 当方、エクセル2010で作成していますが、エクセル2002の環境で使います。

  • 値によって違うマクロの実行

    表題の質問をさせていただきます。よろしくお願いいたします。 A1セルには、別シートで計算された値が転記されるようになっており、1から45までのいずれかの数値が入っています。 その数値によって異なる動きをするマクロが3個あります。  1から15の時はマクロA  16から30の時はマクロB  31から45の時はマクロC おのおののマクロはフォームのボタンから実行できるように登録してあります。 現在はA1セルの数値を見て該当するボタンを押してマクロを実行しています。 たとえばA1の値が「25」の時はマクロCが登録してあるボタンCを押しています。 そこで質問させていただきたいのは 既存のボタンを撤廃し 新たに設置するひとつのボタンで3個のマクロを制御したいと思ったのです。 新たなマクロでA1の値を取得し、そのマクロ内で既存のマクロへ割り振るためには どのような記述をすればよいのでしょうか。 よろしくお願いいたします。

専門家に質問してみよう