- 締切済み
エクセルのマクロ
エクセルでマクロを使うときにセルに入力した数値などを変えた時に自動でマクロを実行するようにできませんか?
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- nishi6
- ベストアンサー率67% (869/1280)
質問にあることは『Worksheet_Change』でできますが、 指定範囲だけで機能させたり、 入力値を書き換えた時の再度のイベントの発生、 内容を消去した時の処理、 複数セルの操作への対応、 コピー&ペーストなども考慮する必要があります。 欠点としては、マクロを使うので元に戻せないことがあります。 UnDo機能をつけようとすると大掛かりになります。操作の都度バックアップも気が利きませんし。 また、『Worksheet_Change』では、行・列の削除挿入がうまく感知できません。 シート名の変更も感知してほしいですがこれも普通には感知できません。 使用する時には、このあたりを気をつけるようにしています。ご参考に。 セルの値を書き換えるマクロの場合、(1)~(8)くらいが気をつけることと思っています。 '(1)Worksheet_Changeイベントを発生させる範囲。この例ならA列。 Const calcAreaAddress = "A:A" Private Sub Worksheet_Change(ByVal Target As Range) 'イベントを発生させる範囲と実際の変更範囲の共通部分 Dim changeArea As Range '個々のセル Dim rg As Range '(2)EnableEvents = Falseにするので、エラーが発生したらTrueにして終わる On Error GoTo ErrorHandler '(3)イベントを発生させる範囲と実際の変更範囲の共通部分を計算する Set changeArea = Intersect(Range(calcAreaAddress), Target) '(4)共通部分があったら処理を行う If Not changeArea Is Nothing Then '(5)ここで、再度セルの値を変更するマクロだと ' またWorksheet_Changeが発生するのでイベント発生を一時中断する Application.EnableEvents = False '(6)共通部分は複数セルの可能性があるので個々のセルで処理する For Each rg In changeArea '//////////////////////////////////////////// 'この部分がセルに変更があった時の処理になる If rg.Text <> "" Then rg = Int(rg) End If '//////////////////////////////////////////// Next '(7)処理が終わったらイベントが発生するように元に戻す Application.EnableEvents = True End If Exit Sub ErrorHandler: '(8)エラーが発生したらTrueにして終わる Application.EnableEvents = True End Sub
- tubasa7
- ベストアンサー率27% (8/29)
もう既にでているのですけどWorksheet_Changeというのを利用するとできるのですがこれはどのセルを変更した時も動作するので特定したセルを変更した時に別のセルを変更したいとかいうときには通用しなくなる場合があります。 その利用方法でそのときはIF文とかで判断するしかないんではないでしょうか。
- papayuka
- ベストアンサー率45% (1388/3066)
こんにちは。 シートのタブを右クリックして、コードの表示を選び、出てきたVBE画面に貼り付けます。 サンプルは、セルに値を打つと色を付けます。 新規ブックでテストしてください。 Private Sub Worksheet_Change(ByVal Target As Excel.Range) Dim r As Range For Each r In Target If r = "" Then Target.Interior.ColorIndex = 0 Else Target.Interior.ColorIndex = 4 End If Next r End Sub
- ceita
- ベストアンサー率24% (304/1218)
メニューの ツール-オプション-計算方法の中の自動 を選ぶと、 マクロの再計算を自動で行ってくれるはずです。