エクセル ラジオボタンでWorksheet_Change

このQ&Aのポイント
  • エクセルのワークシートにラジオボタンを設定し、セルの変更時に動作させる方法を教えてください。
  • ラジオボタンで指定したセルに値を入力した際に、Worksheet_Changeイベントが発生しない問題があります。解決方法を教えてください。
  • Excel 2003で、ラジオボタンを使用して特定のセルが変更されたときにイベントを発生させる方法を教えてください。
回答を見る
  • ベストアンサー

エクセル ラジオボタンでWorksheet_Change

表題の質問をさせていただきます。 ワークシートに以下を記述しました。 Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Range("A1") Case "1" MsgBox "1です。" Case "2" MsgBox "2です。" Case Else MsgBox "3です。" End Select End Sub A1に手入力をすると無事に動作します。 しかし、ラジオボタンを用意して「リンクするセル」をA1に設定した場合は動作しません。 (ラジオボタンは3つで表示される数値は1・2・3です) Worksheet_Changeは手入力での変更時にしか動作しないのでしょうか。 どうにかラジオボタンによる動作方法をご教授願います。 エクセル2003です、よろしくお願いします。

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

  • ベストアンサー
  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

ラジオボタン自体にマクロを割り付けたらいかがでしょう。 ラジオボタンで 右クリック→マクロの登録→新規作成

Haku46
質問者

お礼

早々のご回答ありがとうございます。 早速試しまして無事に動作しました。 というか、ビックリしました。知りませんでした…。 他にも いろいろ出来そうな感じです。 ありがとうございます。

関連するQ&A

  • Worksheet_changeイベントが動作しない

    Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address Case "$D$224" If Target.Value = "" Then Range("D224").Value = "-" End If End Select End Sub DeleteキーでD224をクリアした場合、D224に"-"が入力されません。 D224はD225と結合してあります。 select~caseを使ってdeleteキーで"-"が入力されるような動作を教えてください・・よろしくおねがいします。。。

  • WorkSheet_Changeを2つ反映させる

     下記のコードをWorkSheetで2つ反映させるにはどうしたらいいでしょうか?どちらか一つなら反映するのはわかりますが、どう名前を変更すればいいのかお教え願えませんでしょうか? windows7・SP1 Office2010 Private Sub WorkSheet_Change(ByVal Target As Range) If Intersect(Target, Range("C1")) Is Nothing Then Exit Sub '検査範囲 Application.EnableEvents = False '再帰実行の停止 If Range("C1").Value <> Sheets("祝祭日").Range("A1").Value Then MsgBox ("祝日の設定を反映するため年度を同じにしてください。") End If Application.EnableEvents = True End Sub Private Sub WorkSheet_Change(ByVal Target As Range) Dim MyRow As Long Dim MyCol As Integer MyRow = Target.Row MyCol = Target.Column With Worksheets("メイン・1").Select If MyRow = 1 And MyCol = 7 Then If Target = 4 Then 'または If Target = 1 Then メインデータの復元 '動かしたいマクロ名 End If End If End With End Sub

  • Worksheet_Changeが動かない

    エクセル自動実行のマクロを作成中にうまく動かないので サンプルをコピーして、変更してみたのですが そのサンプルも動いません、マクロとは違う何か悪いのでしょうか? Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Dim intColor As Integer If Target.Count > 1 Then Exit Sub If Intersect(Target, Range("B2:B11")) Is Nothing Then Exit Sub Select Case Target.Value Case Is <= 20 intColor = 3 Case 21 To 40 intColor = 46 Case 41 To 60 intColor = 9 Case 61 To 80 intColor = 10 Case Is > 80 intColor = 5 End Select Target.Font.ColorIndex = intColor Application.EnableEvents = True End Sub

  • Worksheet_Changeについて

     特定のマクロの前後でWorkSheet_Changeを終了し再開させる方法がありましたらお願い致します。 Windows7 SP1 Office2010 Private Sub WorkSheet_Change(ByVal Target As Range) Dim c As Range For Each c In Target Select Case c.address(0, 0) Case "C1" If Intersect(Target, Range("C1")) Is Nothing Then Exit Sub '検査範囲 Application.EnableEvents = False '再帰実行の停止 If Range("C1").Value <> Sheets("祝祭日").Range("A1").Value Then MsgBox ("祝日の設定を反映するため年度を同じにしてください。") End If Application.EnableEvents = True Case Else Select Case c.address(0, 0) Case "G1" If Range("G1") = 4 Then '4月データの表示 Dim ret As Integer ret = MsgBox(Format(ActiveSheet.Range("G5").Value, "ge年mm月") & "の勤務割表の編集&入力保存データを元に表示します。" & vbCrLf & "よろしいですか?", _ vbOKCancel + vbQuestion, "勤務割表表示切替確認") Select Case ret Case vbOK UserForm8.Show vbModeless UserForm8.Repaint 当月データのクリア メインデータの復元4月 編集データの復元4月 Sheets("メイン・1").Select Unload UserForm8 Sheets("メイン・1").Range("G1").Select ActiveCell.FormulaR1C1 = "4" ※ ここで終了ないし一時停止 図形の貼付け ※ここで再開させたいのですが? Case vbOKCancel Exit Sub End Select ElseIf Range("G1") = 5 Then '5月データの表示 ret = MsgBox(Format(ActiveSheet.Range("G5").Value, "ge年mm月") & "の勤務割表の編集&入力保存データを元に表示します。" & vbCrLf & "よろしいですか?", _ vbOKCancel + vbQuestion, "勤務割表表示切替確認") Select Case ret Case vbOK UserForm8.Show vbModeless UserForm8.Repaint 当月データのクリア メインデータの復元5月 編集データの復元5月 Sheets("メイン・1").Select Unload UserForm8 図形の貼付け Case vbOKCancel Exit Sub End Select End If End Select End Select Next End Sub

  • エクセルVBAでTargetのセルに設定された「名前の定義」の取得方法は?

    例えば、A1、B2、C3セルに「名前の定義」で、それぞれ入力A、入力B、入力C という名前がつけてあります。 それらのセルに入力があった場合、Select Caseで分岐させ作動するマクロをつくりました。 簡略化すると以下のようなもので、一応正しく作動します。 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("入力A,入力B,入力C")) Is Nothing Then Exit Sub Select Case Target.Address(0, 0) Case "A1" MsgBox "A処理します。" Case "B2" MsgBox "B処理します。" Case "C3" MsgBox "C処理します。" End Select End Sub ただ、せっかくセルに名前を定義してあるのに、個々の入力セルの判定をTarget.Addressでしているのが不満です。 ( ̄~ ̄;) 定義された名前を使えないかと以下のようにやってみましたが実行時エラーで「サポートしてません」となってしまいます。 (T.T) Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("入力A,入力B,入力C")) Is Nothing Then Exit Sub Select Case Target.Names.Name 'ここでエラー Case "入力A" MsgBox "A処理します。" Case "入力B" MsgBox "B処理します。" Case "入力C" MsgBox "C処理します。" End Select End Sub どうやったら、Targetに設定されている名前を取得できるのでしょうか? (^∇^`)? 実際の例はもっと対象が多いので、Select Caseを使わない以下の方法は避けたいのです。 If文の羅列(これでも正しく作動はします。) Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("入力A,入力B,入力C")) Is Nothing Then Exit Sub If Not Intersect(Target, Range("入力A")) Is Nothing Then MsgBox "A処理します。" ElseIf Not Intersect(Target, Range("入力B")) Is Nothing Then MsgBox "B処理します。" Else MsgBox "C処理します。" End If End Sub なにとぞよろしくお願いします。 (o。_。)oペコッ

  • Worksheet_Change、名前の定義で分岐

    エクセル2010です。 Worksheet_Change イベントで、名前の定義で分岐させようと思います。 下記二つの方法は思いつきましたが、ほかにもっと良い方法はないでしょうか? 実際にはもっとたくさんの名前の定義があります。 ・Intersectで見る方法 Private Sub Worksheet_Change(ByVal Target As Range)   Select Case True   Case Not Application.Intersect(Target, Range("見積日")) Is Nothing     Range("有効期限").Value = Range("見積日").Value + 60   Case Not Application.Intersect(Target, Range("Trigger")) Is Nothing     If Target(1).Value = "AAAA" Then '(1)は結合セルクリア対策       MsgBox "BBBBを入力してください。"       Range("BBBB").Select     Else       Range("BBBB").MergeArea.ClearContents     End If   Case Not Application.Intersect(Target, Range("BBBB")) Is Nothing     If Target(1).Value = "日付入力" Then       Range("BBBB").Value = InputBox("日付を入力してください。")     End If   End Select End Sub ・アドレスで見る方法 Private Sub Worksheet_Change(ByVal Target As Range)   Select Case True   Case Target(1).Address = Range("見積日")(1).Address     Range("有効期限").Value = Range("見積日").Value + 60   Case Target(1).Address = Range("Trigger")(1).Address     If Target(1).Value = "AAAA" Then '(1)は結合セルクリア対策       MsgBox "BBBBを入力してください。"       Range("BBBB").Select     Else       Range("BBBB").MergeArea.ClearContents     End If   Case Target(1).Address = Range("BBBB")(1).Address     If Target(1).Value = "日付入力" Then       Range("BBBB").Value = InputBox("日付を入力してください。")     End If   End Select End Sub

  • 「Worksheet_Change」で2つの操作を

    お世話になります。 当方、エクセルの超初心者です。 仕事で、ある作業表の作成を任されたのですが、一部が思い通りに動作しません。 最初は「例1」のような記述によりエラーしました。 【例1】 Private Sub Worksheet_Change(ByVal Target As Range) (内容1) End Sub Private Sub Worksheet_Change(ByVal Target As Range) (内容2) End Sub その後、過去の回答にあった類似案件を参考に「例2」のように書き換えましたが、 実行されるのは1つ目のみで、2つ目の内容は無視され、困っております。 【例2】 Private Sub Worksheet_Change(ByVal Target As Range) (内容1) (内容2) End Sub ちなみに実データは以下の通りです。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Count <> 1 Then Exit Sub If Intersect(Target, Range("k6:k55")) Is Nothing Then Exit Sub If Target.Value = "" Then Target.Value = "○" Else Target.Value = "" If Target.Count <> 1 Then Exit Sub If Target.Column <> 2 Then Exit Sub If Target.Row < 6 Or Target.Row > 45 Then Exit Sub Call ShowCalendarFromRange2(Target) End If End Sub 見様見真似で作ったため、恥ずかしながら基本が全く理解できていません。 恐らく簡単なミスだと思うのですが、自力では解決方法を探し出せませんでした。 何とか2つの内容が実行できないものでしょうか。 どうか、お知恵をお貸し下さい。

  • Worksheet_Changeイベントでのセル設定

    マクロ初心者です。Excel2003です。 Sheet1に下記のイベントを記述しましたが、(3)だけ動作してくれません。 シート上では、N27とO27の2つのセルが結合されており、入力規則でリスト選択(3択)する設定になっています。(1)や(2)のように認識してくれるようにするにはどうしたらいいでしょうか? どなたか教えてください。よろしくお願いします!! Private Sub Worksheet_Change(ByVal Target As Range)  Select case Target.Address   (1)Case "$E$5"     ・・・   (2)Case "$E$6", "$E$24", "$N$6"     ・・・   (3)Case "$N$27"     ・・・  End Select End Sub

  • エクセルVBAの記述法(Worksheet_Changeで)

    入力があればセルが黄色のなり、入力がなければ無色とするマクロです。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Value <> "" Then Target.Interior.ColorIndex = 6 Else Target.Interior.ColorIndex = xlNone End If End Sub このように書くと、通常は正しく動きますが、ドラッグした場合や、複数セルを一度にクリアした場合、エラーになってしまいます。 ただしく作動させるにはどう直せばいいのでしょうか?

  • WorkSheet _Change について

    いつもお世話になっています。 今、セルにある特定の文字列が入力されたら、セルの色を変えるという処理を作成しています。 Private Sub Worksheet_Change(ByVal Target As Range) Dim sTitle As String sTitle = Target.Value If sTitle = "aaa" Then Target.Interior.ColorIndex = 16 End If End Sub コードはこんな感じです。(動作確認済み) たしかに特定の文字列を察知してシートの色を変えることはできるんですが、今作成しているものは随時セルの中身が更新されるのです。 そこで、別の文字列が入力されたら(もしくは文字列が削除されたら)もとの白色に戻る、という処理はできますでしょうか。

専門家に質問してみよう