• ベストアンサー

エクセルVBA 指定のセル背景色を点滅させたい

お世話になります。 忘れやすい入力セル シート名“施設”の セルF3 (入力が必要なのは100回に1回くらいなので、やむを得ませんが)を気に留めさせるために、そのセルF3の背景色を例えば「薄い青」と「白」で交互に入れ替えればどうかと思いました。 ネットで検索すると、下記のQ&Aが参考になり、うまく当てはめられるものもありました。 しかし、下記ページのANo.#6様の方法がとても魅力的に思えたのですが、うまく出来ないのです。 私の至らない点を教えていただけるでしょうか? 私は、下記ページのコードをシートモジュールに貼りつけました。 しかし、それだけではセルの色は変わりません。 OSはWin2000PRO エクセル2002を使用しています。 http://virus.okwave.jp/kotaeru.php3?q=1499419&rev=1 入力忘れを防止するためが目的ですが、フォームに入力欄を設けたりはしたくないのです。(ほとんどの場合は省略できるので) よろしく、お教えください。 お願いいたします。

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

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.2

こういう方法はいかがでしょうか。 標準モジュールに以下を記述 Sub Blink()  Const ColorIdx1 = 37  Const ColorIdx2 = xlColorIndexNone  With Worksheets("Sheet1").Range("A1").Interior   If .ColorIndex = ColorIdx1 Then    .ColorIndex = ColorIdx2   Else    .ColorIndex = ColorIdx1   End If  End With  Application.OnTime Now + TimeValue("00:00:01"), "Blink" End Sub 続いてThisWorkBookに以下を記述 Private Sub Workbook_Open()  Blink End Sub これで保存していったんブックを閉じ、再び開いてみてください。Sheet1のA1セルが1秒間隔で点滅します。

saitama090
質問者

お礼

お礼が遅くなり、大変申し訳ありません。(しばらくネットを見れない日がありました。) 本当に、ありがとうございました。 期待どおりのものができて、大満足です。 これで、仕事の説明も簡単にできるようになりました。 ありがとうございました。

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんばんは。#1 のWendy02です。 コード的にみて、#1 と#2では、#2のほうが出来がよいです。OnTime の点滅スピードは、1秒以上だったと思いますので、それ以下になると、以下のようなものになります。ただし、長い間点滅するのはうっとうしいので、回数を決めてあります。 これは、標準モジュールのみの設定です。それ以外では、エラーが返ります。起動自体は、Workbook_Open や Auto_Openなどに、Call TimerCall で、設定してください。 もしも、[回数設定]しなければ、開いている間中、点滅しています。入力しているときだけ、点滅はとまります。回数を設定しないで止めるときは、TimerStopをしないと、止まりません。 以下は、私にとっても、高嶺の花のコードですが、もう、半分棺おけに入っているコードですから、WinXPの後、どうなるのか分かりません。今は、まだ、私などは、10年も15年も遅れて勉強をしている段階ですので、先は長いなって思います。 '標準モジュール '-------------------------------------------------------- Private Declare Function GetTickCount Lib "kernel32" () As Long Private Declare Function SetTimer Lib "user32" _   (ByVal Hwnd As Long, ByVal nIDEvent As Long _   , ByVal uElapse As Long _   , ByVal lpTimerFunc As Long) As Long Private Declare Sub KillTimer Lib "user32" (ByVal Hwnd As Long, ByVal nIDEvent As Long) Private myTimerId As Long Private myRng As Range Private myStartUp As Long Private myCount As Long Sub TimerCall()  '起動キー   Dim myInterval As Long   myCount = 0   myInterval = 300 '単位は、ms(ミリ秒)   Set myRng = Sheet2.Range("F3")   myStartUp = GetTickCount()   myTimerId = SetTimer(0&, 0&, myInterval, AddressOf TimerCount) End Sub Sub TimerCount(ByVal Hwnd As Long, ByVal uMsg As Long _   , ByVal idEvent As Long, ByVal dwTime As Long)   Dim myTime As Double   i = (GetTickCount() - myStartUp) Mod 2 '点滅   On Error Resume Next   myRng.Interior.ColorIndex = i * 34 '色のColorIndex   myCount = i + myCount 'カウントを取る   If myCount > 20 Then Call TimerStop '回数設定 End Sub Sub TimerStop()   'タイマーを止める   KillTimer 0&, myTimerId   myRng.Interior.ColorIndex = xlNone End Sub

saitama090
質問者

お礼

お礼が遅くなり、大変申し訳ありません。(しばらくネットを見れない日がありましたのと、 >起動自体は、Workbook_Open や Auto_Openなどに、Call TimerCall で、設定してください。 の部分が私のレベルでは判らず、ネットで検索していました。) この質問で、他の方がThisWorkbookに別に記す方法をお教えいただいたので、それを応用して貼り付けると、思い通りにできました。 本当に、ありがとうございました。 期待どおりのものができて、大満足です。 ありがとうございました。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

「100回に1回くらい」しか、F3セルの入力は不要なのですね? F3セルに入力が必要となる条件がはっきりしているなら、その条件になった時に警告メッセージを出せばよいのではありませんか? (点滅も一種の警告メッセージといえますが…) 100回の内99回まで必要ではない「警告メッセージ」を毎回出すと、入力する側は煩わしいし、警告の意味も薄れます。

saitama090
質問者

お礼

説明不足ですみません。 この場所は、何月かを入力する場所なのですが、自動で今月が入るように設定されているので、普段は入力しなくて良いのです。 このファイルは、原則、当月のみの処理に限っていますので。 そうは言っても、月末になると、例外的に翌月分の登録をしたり、月初に前月分の処理をすることもまれにあるのですが、そのためのものなのです。 警告メッセージではありますが、ソフトに注意を促す程度でいいと思っています。 アドバイス ありがとうございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。Wendy02です。 >下記ページのANo.#6様の方法がとても魅力的に思えたのですが、うまく出来ないのです。 そこに書かれているものは、ほんのお遊び程度にしか過ぎません。今みると、少し不安も感じますし、また、このレベルでも、本格的なものを作るには、かなり、高度な技術が必要な気がします。 今回は、簡易型です。(すみません) 'シートモジュール設定' WorkSheet_Activate イベント と用いると良いです。 'Option Explicit '次にPrivate Declare... を入れます。 Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)   Sub ColorAlternating() Dim myInt As Long Dim i As Long myInt = 300 '点滅のスピード 1000 = 1秒 With Range("F3") For i = 1 To 10    DoEvents   .Interior.ColorIndex = 34 '薄い青    Sleep myInt   .Interior.ColorIndex = 2 'しろ    Sleep myInt / 2 Next  .Interior.ColorIndex = 0 '自動   Beep End With End Sub

saitama090
質問者

お礼

奥深い知識を有している Wendy02さんには、尊敬の念でいっぱいです。 ありがとうございます。 勉強させていただきます。

関連するQ&A