Excel VBAマクロの実行方法について
- Excel VBAマクロを実行するための記述が見当たらない
- Worksheet_Changeイベントを使用してセルのテキストチェンジをトリガーとしてマクロを実行する方法をご存知ですか?
- Excel2010で使用する場合、上記の方法以外にセルの変更をトリガーとするマクロを実行する方法を教えてください
- ベストアンサー
Excel VBA マクロの実行方法について
現在、あるExcelプログラムの修正を行っております。 プログラム内にはセル内のテキストの変化をトリガーとして動作するマクロが標準モジュールに記述されてあるのですが、そのマクロを動作させるための記述が見当たりませんでした。 通常であれば、上記のような動作をさせる場合 Private Sub Worksheet_Change(ByVal Target As Range) 目的の動作(マクロ) End Sub を使用して実現すると思っているのですが、その記述はありませんでした。 また、それ以外の方法を自分なりに調べてみたのですが発見できませんでした。 私の知識不足で申し訳ないのですが、上記の方法以外にセルのテキストチェンジをトリガーとしてマクロを動作させる方法をご存知の方がおられましたら、ご教授の程宜しくお願い致します。 基本情報を記載します。 ファイル形式:xls Excelバージョン:Excel2010 OS :Windows 7 Professional
- KURACMP
- お礼率50% (1/2)
- その他(プログラミング・開発)
- 回答数2
- ありがとう数1
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 >セルのテキストチェンジをトリガーとしてマクロを動作させる方法 クラスモジュールは、そのブックだけとは限らないです。 別の所にあっても、目的のイベントは働きますね。(それではウィルスもどきです(^^;) アドインでも可能ですが、COMアドインの方は、それが出来たかは知りません。 COMアドインは、新しいテクニックは知りませんから。 他にも、一般的には ThisWorkbook モジュールが一番濃厚です。 それ以外に、古いテクニックですが、標準モジュールに、Ver.5 辺りのVBAの方法で、"OnEntry" メソッドがありますが、今、Excel2010で試してみましたら、まだ生きているようですね。 しかし、Helpには出てきませんでした。
その他の回答 (1)
- f272
- ベストアンサー率46% (8016/17133)
シートモジュールの中やクラスモジュールの中は見たのでしょうか?
補足
>f272様 早速返答いただきましてありがとうございます。 シートモジュール、クラスモジュールの中も確認しました。 クラスモジュールにはプログラムはありませんでしたが、シートモジュールには以下の中身のないプログラムが記載されています。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) End Sub 動作の補足として、デバッグで確認した動きを以下に記載します。 (1)セルに値(数値)を入力してEnter (2)標準モジュール内のプログラムが動作(特定のセルがActiveの場合、別のセルをActiveにする) (3)上記のシートモジュールが動作 ※試しにマクロの記録を行って確認しましたが、上記の動作と同じでした。 私としてはEnter押した直後に標準モジュールのプログラムが動作していることが分からない状態です。 宜しくお願い致します。
関連するQ&A
- Excel VBA イベントプロシージャを2つ記述する(基本です)
基本的な事なのですが、Excelのイベントプロシージャで2つプログラムを作るにはどうやって記述すればよいのでしょうか? 具体的には、worksheetのchangeイベントで、セルC5の値を変えた時と、セルG7の値を変えた時の2通りのマクロを作成したいのです。 Private Sub Worksheet_Change(ByVal Target As Range) C5を変えた時の処理 End Sub Private Sub Worksheet_Change(ByVal Target As Range) G7を変えた時の処理 End Sub このように書けばよいのでしょうか?そうするとTargetがかぶっておかしくなる気がします。。 お願いします。
- ベストアンサー
- オフィス系ソフト
- エクセルマクロ(VBA)で指定したセルが変化したときに実行するには?
VBAでsheetの中のworksheet_changeなどでマクロを書くと、そのシー トの中のどのセルを変化させてもマクロが実行されるのですが、これ を、A1とc1とc2が変化したときだけ処理を実行させたいのです。 以下のマクロのどこかを編集すると、そのようなことが出来るのでし ょうか? Private Sub Worksheet_SelectionChange(ByVal Target As Range) ----実行する内容---- End Sub Private Sub Worksheet_Change(ByVal Target As Range) ----実行する内容---- End Sub
- ベストアンサー
- オフィス系ソフト
- VBA マクロを動かさない
(1)ある行のセルを変更したら動くマクロがあります。 Private Sub Worksheet_Change(ByVal Target As Range) (2)ある行のセルに数値を入れるマクロがあります。 Private Sub CommandButton_Click() (2)のマクロが動くと(1)がその後に発動して上書きをしてしまうようです。 これを発動させないようにスキップするにはどうしたらいいのでしょうか?
- ベストアンサー
- Visual Basic
- エクセル95のマクロ
エクセル95で Private Sub Worksheet_Change(ByVal Target As Range) というのは使えるんでしょうか? リターン押したときに移るセルを操作したいので 代わりになるものでもあれば教えて頂きたいです。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- エクセルVBAに関して
VBAの知識があまりないので教えて頂きたいのですが、セルの内容が変更されたら マクロが実行される Private Sub Worksheet_Change(ByVal Target As Range) というのがあるかと思います。 セルに書かれた関数によって、セルの内容が変化したときにマクロが実行されるVBA関数はあるのでしょうか?
- 締切済み
- Visual Basic
- エクセル マクロ 初心者です
エクセルマクロ初心者です。 以下の2つの Private Sub Worksheet_Change(ByVal Target As Range)を1つのシートで実行させたいのですが、 当方、初心者なので組み合わせ方が分かりません。 よろしくお願いします。 ===No1=== Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Target = StrConv(Target, vbUpperCase) Application.EnableEvents = True End Sub ===No2=== Private Sub Worksheet_Change(ByVal Target As Range) Dim Ans As Integer If Target.Count = 1 Then Ans = MsgBox("コピーは禁止!!", vbCritical) MsgBox "データを消去します。" With Application .EnableEvents = False .Undo .EnableEvents = True End With End If If Target.Count = 1 Then Exit Sub Else MsgBox “複数セルのコピー禁止!" With Application .EnableEvents = False .Undo .EnableEvents = True End With End If End Sub ------------ 上記の2つを1つのシートで動作させたいのですが、うまくいきません。 単体では、動作します。
- ベストアンサー
- オフィス系ソフト
- Excel 2003 VBA Worksheet_Changeの動作速度について
Excel2003を使用しています。 セルに入力した文字列の前後のスペースをカットする為にTRIMを用いて Private Sub Worksheet_Change(ByVal Target As Range) Target.Value = Trim(Target.Text) End Sub と記述したところ、動作は思惑通りなのですが、処理速度が異様に重いです。 私の環境(VISTA Home Premium,Core2 Duo 2.20GHz)では、セル値を変更した後必ず3~5秒処理が固まります。 不本意ですが Private Sub Worksheet_SelectionChange(ByVal Target As Range) Target.Value = Trim(Target.Text) End Sub と、Worksheet_SelectionChangeを使うと全くストレスを感じず処理されますが、セルを再度選択してやらないとTRIMされませんし…。 私の環境だけがWorksheet_Changeでの処理が遅いのでしょうか? よく似た環境のみなさんはどうでしょう? 原因が分からなくて気持ち悪いです… 私個人の環境の問題? Excel2003の問題? 記述の問題? 何かご存じの方居られましたらよろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- エクセルVBA/シートのチェンジイベントを発生させない方法?
Private Sub Worksheet_Change(ByVal Target As Range) MsgBox "イベント発生" End Sub このワークシートがアクティヴになってるときに手入力された場合以外、チェンジイベントを発生させなくするにはどのような方法があるでしょうか? 標準モジュール記載の他のマクロでセルが変更された場合を無視したいのです。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- ”戻り値”が変化したときに、マクロを実行したい
超初心者です。 セルの値が変化したときにマクロが実行されるようなものを作りたいです。 セルに入力されているのは、”関数”です。 なので、関数の”戻り値”が変化したときにマクロを実行したいのです。 今は、戻り値が変化しても式自体が変わっていないため マクロが実行されません。 (セルの式を切り取ってもう一度貼りなおせば、マクロは実行される) ちなみに今は Private Sub Worksheet_Change(ByVal Target As Range) で書いています。 まずVBAの勉強をしろと言われてしまいそうですが><; 何卒アドバイスのほどよろしくお願いいたします!
- ベストアンサー
- Visual Basic
- エクセルのマクロ
セルの値が変わったら動くマクロですが、2つ書くとエラーが出ます。 どのように直したらいいでしょうか? Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address If Intersect(Target, Range("EK22")) Is Nothing Then Exit Sub Else Range("EK24:EM28").Select Selection.ClearContents End If End Sub Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("EK24")) Is Nothing Then Exit Sub Else Range("EK27:EM28").Select Selection.ClearContents End If End Sub
- ベストアンサー
- Excel(エクセル)
お礼
>WindFaller様 早速の回答ありがとうございます。 標準モジュールを再度確認した結果、OnEntryメソッドによって実現されている機能であることが分かり、無事悩みが解決できました。以下のようなサンプルプログラムを作成し動作も確認できました。ご教授いただき、ありがとうございます。 調べてみると、もともとのプログラムが2001年に作成されたものだったのでOnEntryが使用されていたのではないかと思っています。 サンプル: Sub Auto_Open() TrapEntry End Sub Sub TrapEntry() ActiveWorkbook.Worksheets("Sheet1").OnEntry = "movecells" End Sub Sub movecells() If ActiveCell.Address() = "$C$2" Then Range("G1").Select Exit Sub End If End Sub