EXCEL複数マクロ起動!初心者の方にも分かりやすい方法を教えます

このQ&Aのポイント
  • EXCEL複数マクロ起動の方法を解説します。センセーショナルなタイトルでわかりやすく説明しています。
  • さらに、Aの範囲をダブルクリックすると特殊文字が挿入され、Bの範囲をクリックするとA4セルの文字表示が赤色で点滅表示されます。重複する範囲ではクリックの内容が優先されます。
  • VBA初心者でも理解しやすいように、具体的なコードとともに解説しています。動作が中途半端になる場合は、修正方法も詳しく説明しています。
回答を見る
  • ベストアンサー

EXCEL複数マクロ起動

Aの範囲をダブルクリックしたら特殊文字挿入。 Bの範囲をクリックしたらA4セルの文字表示を赤色にして点滅表示 というマクロを作成しようとしています。 AとBの範囲は一部重複しています。 重複している範囲は、クリックの内容が優先でA4セルを点滅表示としたい。 VBAは全く初心者で、いろんなサイトで見た内容を貼り付けで下記まで作成してみましたが、 動作が中途半端になっています。 どうもシングルクリックとダブルクリックの対応部分でけんかをしているみたいなのですが、 どの様に修正したらよいか教えて頂きたく。 尚、全く新たなVBAでもかまいません、よろしくお願いします。 'Aの範囲;E16:E98あるいはK14:K147をダブルクリックしたら特殊文字挿入 '特殊文字が表示されている状態でダブルクリックした場合は空欄表示 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Range("E16:E98", "K14:K147")) Is Nothing Then Exit Sub Cancel = True If Target.Value = "" Then Target.Value = ChrW(&H2713) Else Target.ClearContents End If End Sub 'Bの範囲;B15:G37をクリックしたらA4セルの文字表示を赤色にして点滅表示 'Bの範囲外をクリックしたら文字表示を点滅表示と停止させて黒色表示…(まだ作成未です) Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row < 15 Or Target.Row > 37 Then Exit Sub If Target.Column < 2 Or Target.Column > 7 Then Exit Sub 点滅フラグ = True Call 点滅 End Sub '標準モジュール部 Public 点滅フラグ As Boolean Public Sub 点滅() If Range("A4").Font.ColorIndex = 3 Then Range("A4").Font.ColorIndex = 2 Else Range("A4").Font.ColorIndex = 3 End If If 点滅フラグ Then '進捗状況を示すために準備する 指定時刻 = Now + TimeValue("0時00分01秒") '1秒後 待ち時間 = TimeValue("0時00分01秒") Application.OnTime TimeValue(指定時刻), "点滅", TimeValue(待ち時間) End If End Sub excel2003です。

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

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

答えになっているかどうか分からないが、 下記コードは (1)Msgbox は納得後削除 (2)一般がやりやすいように範囲条件などは変えた。(読者への配慮が足りない) (3)Application.EnableEvents = Falseが私のポイント。 ーー 点滅の停止・終了条件はあるのか? ーー テスト中に、トラブルったら(イベントが反応しなくなったら) 標準モジュールに Sub test01() Application.EnableEvents = True End Sub を入れて実行。 ーー 標準モジュールに Public 点滅フラグ As Boolean Public Sub 点滅() If Range("A4").Font.ColorIndex = 3 Then Range("A4").Font.ColorIndex = 5 Else Range("A4").Font.ColorIndex = 3 End If If 点滅フラグ Then '進捗状況を示すために準備する 指定時刻 = Now + TimeValue("0時00分01秒") '1秒後 待ち時間 = TimeValue("0時00分01秒") Application.OnTime TimeValue(指定時刻), "点滅", TimeValue(待ち時間) End If End Sub ーーーー シートSheet1のイベントモジュールとして Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) MsgBox "D" Application.EnableEvents = False If Intersect(Target, Range("A1:A20", "C1:C10")) Is Nothing Then GoTo p1 Cancel = True If Target.Value = "" Then Target.Value = ChrW(&H2713) Else Target.ClearContents End If p1: Application.EnableEvents = True End Sub Private Sub Worksheet_Change(ByVal Target As Range) MsgBox "C" If Target.Row < 5 Or Target.Row > 37 Then Exit Sub If Target.Column > 12 Then Exit Sub 点滅フラグ = True Call 点滅 End Sub ーーー >VBAは全く初心者で で(1)イベントの利用や(2)点滅などのこと(凝り過ぎ)(3)他のユーザーが使うことを予想事案?などをするのは早過ぎると思う。 イベントなど複数イベントの競合(有線)や色んな操作の場合の理解と手当てなども含め、難しいと常ずね思う。 自分だけが使うときは、おかしい場面で気づいて対処もも可能だろうが。 ーー それに標題がおかしいと思う。普通この標題を読んだら他のことを連想するのでは。

3620313
質問者

お礼

回答ありがとうございます。参考にさせていただきます。 VBAは全く初心者で (1)イベントの利用や(2)点滅などのこと(凝り過ぎ)(3)他のユーザーが使うことを予想事案?などをするのは早過ぎると思う。 ⇒VBAの初心者が点滅など懲り過ぎとありますが、質問に対する内容から外れると思います。 この内容に関しては私が使用するデータではありません。多くの作業内容の中で、今、どこの部分を実施しているのかを1目でわかりやすくするためには点滅が一番良い方法かと考え採用しようとした次第です。最初は色だけ変更の内容にしていました。 一般がやりやすいように範囲条件などは変えた。(読者への配慮が足りない) ⇒範囲条件に関してはセルがA1から始まるものが、分かりやすいというものでもないと思います。投稿する時に、もっと少ない範囲に変えることも検討したのですが、問題としていたのは範囲ではありません。 ダブルクリックとシングルクリックの混在した操作での問題解決を望んでいたので、あえてそのままにしました。 逆に質問とは異なる内容へ範囲を変えることの方が、読者に対しての配慮が足りないのではないでしょうか。 尚、私は初心者なりに他のホームページ等を調べた上で質問する様にしています。 まるまるVBA内容を教えてというのでは、質問する側として失礼かと思っているからです。 ということで、ある程度動作する様な状況でVBAの内容をそのまま投稿し、助言を頂きたい(トラブル無く動作可能な状態までもっていきたい)というおもいでいます。 最後に。 あなたは回答された時に、御自分が回答された内容を見直しているでしょうか? でで とか もも とか言葉がだぶっているところがあります。 読者への配慮を気にされるのであれば、言葉づかいも含めて考慮されたらいかがでしょうか。

その他の回答 (1)

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

>Bの範囲をクリックしたらA4セルの文字表示を赤色にして点滅表示  ⇒Worksheet_Changeはセル内容変更時のイベントでシングルクリックでは反応しません。   SelectionChangeイベント(セリ移動)があるがBeforeDoubleClickの共有はできない。   従って、BeforeDoubleClickイベントでA,B範囲を認識して処理をするしかないので   は無いでしょうか。  

3620313
質問者

お礼

回答ありがとうございました。参考にさせていただきます。

関連するQ&A

  • Excel2007 マクロについて

    たとえばですが sheet1のF5列をダブルクリックすると、その左側にあるA5の値をコピーし sheet2のA列の未入力行へ貼り付けするにはどうしたらよいでしょうか Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, cancel As Boolean) If Intersect(Target, Range("F:F")) Is Nothing Then Exit Sub cancel = True End Sub とりあえずここまで作って開くことは開いたのですが、その先がわからず困っております。 よろしくお願いいたします。

  • マクロの疑問

    Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address <> "A2" Then Range("A2").Select End If End Sub とすると、どのセルを選んでもA2に飛ぶのに、 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "A3" Then Range("A2").Select End If End Sub とすると、A3を選んでも全く移動しないのはなぜでしょうか。 なにか落とし穴がありそうで。。。 よろしくお願いします。

  • エクセル イベントマクロ

    マクロ初心者です。よろしくお願いします。 セル範囲(A1:F20)に何も入力されていなければ塗りつぶしされ、 何か(文字、数字などなんでも)入力されていれば、塗りつぶしがなくなる。 というマクロをあえて、条件付き書式を使わずに行いたいとやってみました。(以下) Private Sub Worksheet_Change(ByVal Target As Range) Dim a As Range For Each a In Range("A1:F20") If a.SpecialCells(xlCellTypeVisible) Then a.Interior.ColorIndex = xlNone Else a.Interior.ColorIndex = 7 End If Next a End Sub ところが、半角数字(0以外)では動作するのですが 文字を入力するとエラーとなり「型が一致しません」と表示されます。 どう直したらよいのでしょうか? 最近マクロをやってみようと始めたので、基本的なことがわかっていないのかも。 どなたか、具体的なご指導お願いします。

  • シート保護をすると実行エラーになります。

    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Range("A1:A2000")) Is Nothing Then Exit Sub With Selection.Interior If .ColorIndex = xlNone Then .ColorIndex = 4 Else .ColorIndex = xlNone End If End With Cancel = True End Sub A列任意のセルをダブルクリックすると色が変わるコードを組んでいます。しかしながら、 A列のみロックを解除したのち、シート保護をすると、上記の実行がエラーになります。 どのようにすればエラーを回避できるのかお知恵をかしていただければ幸いです。

  • イベントマクロについて

    イベントマクロについて質問ですが まず、下記をご覧下さい。 過去にここで回答いただいたものを流用させてもらったものですが もうひとつ機能を追加したいと思います。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column >= 4 And Target.Column <= 34 Then If Target.Row >= 2 And Target.Row <= 100 Then Select Case Target Case "(5)GC" Target.Interior.ColorIndex = 34 Target.Font.ColorIndex = 0 Case "6OS", "6FC" Target.Interior.ColorIndex = 6 Target.Font.ColorIndex = 0 Case "(6)TA", "(6)C" Target.Interior.ColorIndex = 46 Target.Font.ColorIndex = 0 Case "6@BD", "6@C" Target.Interior.ColorIndex = 38 Target.Font.ColorIndex = 0 End Select End If End If End Sub 追加する機能とは、上記で指定した範囲以外のセルを参照して 色を付けるかどうかを区別するものです。 例えば、A2の値が色付けに該当する場合はD2からAH2の中で上記マクロに該当するセルに色を付け、もしA2が該当しない場合は色付けをしない というような感じです。 よろしくお願いします。

  • 複数のダブルクリックイベントを同一シートで

    以前 質問して回答をいただいたシートで他のダブルクリックイベントを記述したいのですが・・・ 単独だと できるようですが 複数できるようにしたいのですが エクセル2010です。 >http://okwave.jp/qa/q7230128.html A1:N1 のセルをダブルクリックしたら 色が黄色 また ダブルクリックしたら 色なし 教えをうけたマクロコードが 以下です。 ダブルクリックイベント その1 Private Sub worksheet_beforedoubleclick(ByVal Target As Excel.Range, cancel As Boolean) If Application.Intersect(Target, Range("A1:N1")) Is Nothing Then Exit Sub If Target.Interior.ColorIndex = xlNone Then Target.Interior.Color = vbYellow Else Target.Interior.ColorIndex = xlNone End If cancel = True End Sub ダブルクリックイベントその2 J8:J9,L8:L9,N8:N9,P8:P9,R8:R9,T8:T9,V8:V9,J29:J30,L29:L30,N29:N30,P29:P30,R29:R30 上の セルをダブルクリックしたら 現在時刻を表示したい 記述コードは 以下です。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Range("J8:J9,L8:L9,N8:N9,P8:P9,R8:R9,T8:T9,V8:V9,J29:J30,L29:L30,N29:N30,P29:P30,R29:R30")) Is Nothing Then Exit Sub If ActiveCell = "" Then ActiveCell = Time Cancel = True End If End Sub 2つのコードをうまくまとめたいのですが 知識不足でとまどっております。 詳しいかた、アドバイスお願いいたします。 よろしくお願いします。

  • Excelのマクロで、IFを複数セルに指定するには

    セルA1、B1、C1をダブルクリックすると各セルの値が+1ずつ増える Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Address = "$A$1" Then Target.Value = Target.Value + 1: Cancel = True If Target.Address = "$B$1" Then Target.Value = Target.Value + 1: Cancel = True If Target.Address = "$C$1" Then Target.Value = Target.Value + 1: Cancel = True End Sub というマクロを使用致しておりますが、これに追加で セルA1をダブルクリックした時に、A1と同時にセルC1も+1増やせる 方法があれば教えて頂けると幸いです。 宜しくお願い致します。

  • エクセルVBAのイベントで質問です。

    ある範囲のセルの色をダブルクリックにより変えていますが、 下の("D5:D50,F5:F50,K5:K50,M5:M50"))の範囲を例えばSheet1の A2以下に始めの範囲、B2以下に終りの範囲を下に書いていって、 対象とする範囲を可変にしたいのですが、どのようにすれば いいでしょうか。 例えば("D5:D50,F5:F50,K5:K50,M5:M50"))であれば A2に「D5」 B2に「D50」 A3に「F5」 B3に「F50」 などとセルにセル番地をいれておいて、コードを変えなくても シート上で範囲を変えていけるようにできないでしょうか。 やり方があれば教えてください。 よろしくお願いします。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim r As Range Set r = Intersect(Target, Range("D5:D50,F5:F50,K5:K50,M5:M50")) If r Is Nothing Then Exit Sub With r.Interior If .ColorIndex = xlNone Then .ColorIndex = 3 ElseIf .ColorIndex = 3 Then .ColorIndex = 4 ElseIf .ColorIndex = 4 Then .ColorIndex = xlNone End If End With Cancel = True End Sub

  • excel マクロでの特殊文字入力方法

    マクロで特殊文字入力は出来ないのでしょうか? やりたい内容は、セルをダブルクリックした時に✓を表示させたいのです。 セルをダブルクリックした時に○を表示するマクロが、下記の通りである時、 ○の代わりに✓を表示させたいのですが、VBAで○の所に✓で書き換えると ?と表示されてしまいます。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) With Target If .Value = "○" Then .Value = "" Else .Value = "○" End If End With End Sub

  • エクセルで特定のセルへの直接入力だけを禁止したいんです。

    過去の質問を参考に『セルをダブルクリックすると"○"と入力される』というマクロを○⇒●⇒-⇒  ⇒○⇒・・・として使っているんですが、ダブルクリックの度にセルが直接入力の状態(縦の棒の点滅)になってしまい、一度他のセルをクリックしないと次へ進めずに困っています。 良い方法ってあるのでしょうか? ちなみに使用しているマクロは Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Const rng As String = "A1:A3" '処理対象のセル範囲 If Not Application.Intersect(Target, Range(rng)) Is Nothing Then If Target.Value = "" Then Target.Value = "○" ElseIf Target.Value = "○" Then Target.Value = "●" ElseIf Target.Value = "●" Then Target.Value = "-" Else Target.ClearContents End If End If End Sub というものです。 よろしくお願いします。

専門家に質問してみよう