あなたの映画力を試せる!POPLETA映画検定(無料) >>

お世話になります。
忘れやすい入力セル シート名“施設”の セルF3
(入力が必要なのは100回に1回くらいなので、やむを得ませんが)を気に留めさせるために、そのセルF3の背景色を例えば「薄い青」と「白」で交互に入れ替えればどうかと思いました。

ネットで検索すると、下記のQ&Aが参考になり、うまく当てはめられるものもありました。

しかし、下記ページのANo.#6様の方法がとても魅力的に思えたのですが、うまく出来ないのです。

私の至らない点を教えていただけるでしょうか?

私は、下記ページのコードをシートモジュールに貼りつけました。
しかし、それだけではセルの色は変わりません。

OSはWin2000PRO エクセル2002を使用しています。

http://virus.okwave.jp/kotaeru.php3?q=1499419&re …

入力忘れを防止するためが目的ですが、フォームに入力欄を設けたりはしたくないのです。(ほとんどの場合は省略できるので)

よろしく、お教えください。
お願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

こういう方法はいかがでしょうか。



標準モジュールに以下を記述

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秒間隔で点滅します。
    • good
    • 1
この回答へのお礼

お礼が遅くなり、大変申し訳ありません。(しばらくネットを見れない日がありました。)


本当に、ありがとうございました。

期待どおりのものができて、大満足です。

これで、仕事の説明も簡単にできるようになりました。

ありがとうございました。

お礼日時:2007/02/18 16:10

こんばんは。

#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
    • good
    • 1
この回答へのお礼

お礼が遅くなり、大変申し訳ありません。(しばらくネットを見れない日がありましたのと、
>起動自体は、Workbook_Open や Auto_Openなどに、Call TimerCall で、設定してください。
の部分が私のレベルでは判らず、ネットで検索していました。)

この質問で、他の方がThisWorkbookに別に記す方法をお教えいただいたので、それを応用して貼り付けると、思い通りにできました。

本当に、ありがとうございました。

期待どおりのものができて、大満足です。

ありがとうございました。

お礼日時:2007/02/18 16:07

「100回に1回くらい」しか、F3セルの入力は不要なのですね?



F3セルに入力が必要となる条件がはっきりしているなら、その条件になった時に警告メッセージを出せばよいのではありませんか?
(点滅も一種の警告メッセージといえますが…)

100回の内99回まで必要ではない「警告メッセージ」を毎回出すと、入力する側は煩わしいし、警告の意味も薄れます。
    • good
    • 0
この回答へのお礼

説明不足ですみません。

この場所は、何月かを入力する場所なのですが、自動で今月が入るように設定されているので、普段は入力しなくて良いのです。

このファイルは、原則、当月のみの処理に限っていますので。

そうは言っても、月末になると、例外的に翌月分の登録をしたり、月初に前月分の処理をすることもまれにあるのですが、そのためのものなのです。

警告メッセージではありますが、ソフトに注意を促す程度でいいと思っています。


アドバイス ありがとうございました。

お礼日時:2007/02/14 16:00

こんにちは。

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
    • good
    • 0
この回答へのお礼

奥深い知識を有している Wendy02さんには、尊敬の念でいっぱいです。

ありがとうございます。

勉強させていただきます。

お礼日時:2007/02/18 16:12

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QExcelで文字の点滅方法

Excelでセル内の文字を点滅する方法を教えてください。
ヘルプや書籍で検索したのですが分かりませんでした。
できましたら、マクロを使わずにしたいのですが、無ければマクロでも可です。 宜しくお願いします。 使用しているVersionは"2000"です。

Aベストアンサー

Option Explicit

Private Sub Worksheet_Activate()
Const imax As Long = 5
Const tmax As Long = 10000000
Dim i As Long
Dim t As Long

For i = 0 To imax
Range("A1").Font.ColorIndex = 2

DoEvents

For t = 0 To tmax
Next t

Range("A1").Font.ColorIndex = 0

DoEvents

For t = 0 To tmax
Next t

Next i

End Sub

Qセル背景や文字を点滅させる方法

エクセルの関数や表作成、基本的な事は身につけることができ、次のステップに進もうと思い、マクロについて勉強したいと思い質問させていただきました。
今の目標としては、ある数値以下の時、またはそれ以上のときにセルを点滅、または文字を点滅させる方法などがありましたら教えて頂きたいです。条件付き書式でセル、またはフォント色を変えられても、点滅をさせる方法などは私には到底できる領域ではなく、マクロについても全く無知です。分かる方がいらしたらどうか教えてください。私のレベルはとりあえず基本的関数、マクロ以外の機能を理解できる程度です、尚プログラム言語については今から勉強という段階で全く分かりません。どうかこの程度のレベルの私ができる程度に説明して下さる方宜しくお願い致します。

Aベストアンサー

#1 #3 です。

>マクロについて勉強したい...

とのことでしたね。コメントを多く入れておきましたので、ご参考下さい。
また、さらに改造して、「A列にデータを入力すると」になっています。


【以下コード】

'API宣言---魔法の呪文みたいなもの
Private Declare Sub Sleep Lib "KERNEL32.dll" _
  (ByVal dwMilliseconds As Long)

'EXCEL既定のイベント
Private Sub Worksheet_Change(ByVal Target As Range)
  
  'セルが変化したら、以下のコードを実行
  '変化のあったセルは Target であらわされる
  
  '変数の宣言
  Dim i As Integer
  Dim ColorDat
  
  'カラーインデックス定義
  ColorDat = Array(15, 48, 16, 56, 16, 48, 15)
  
  'エラートラップ
  On Error Resume Next
  '変化のあったセル=TargetがA列(列番号=1)であれば
  'End If までの挟まれたコードを実行
  If Target.Column = 1 Then
    'そのセル背景色を
    With Target.Interior
      '配列ColorDatに書かれたデータ数だけ繰り返す
      For i = 0 To UBound(ColorDat)
        'ColorDatのi番目のカラー番号でセル背景色を塗る
        .ColorIndex = ColorDat(i)
        'API 30ミリ秒 Wait
        Sleep 30
      Next i
      '最後にセルの背景色を解除
      .ColorIndex = xlNone
    End With
  End If

End Sub

#1 #3 です。

>マクロについて勉強したい...

とのことでしたね。コメントを多く入れておきましたので、ご参考下さい。
また、さらに改造して、「A列にデータを入力すると」になっています。


【以下コード】

'API宣言---魔法の呪文みたいなもの
Private Declare Sub Sleep Lib "KERNEL32.dll" _
  (ByVal dwMilliseconds As Long)

'EXCEL既定のイベント
Private Sub Worksheet_Change(ByVal Target As Range)
  
  'セルが変化したら、以下のコードを実行
  '変化のあったセルは...続きを読む

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QエクセルVBAでオートシェイプを点滅させたい。

エクセル2000です。
ワークシートに配置したオートシェープ(「矢印」と名前を付けてあります。)をチカチカさせたいのです。

Sub マーク点滅()
Dim i As Integer
i = 0
Do
i = i + 1
Loop Until i = 3
Sheets("AAAA").Shapes("矢印").Visible = True
Sheets("AAAA").Shapes("矢印").Visible = False
End Sub

とやってみましたがぜんぜんだめでした。
いい方法はないでしょうか?

Aベストアンサー

> Declare Sub Sleep Lib "kernel32" _
> (ByVal dwMilliseconds As Long)
> って何でしょうか?

これはkernel32ダイナミックリンクライブラリにある"SLEEP" WindowsAPI関数を使うための記述です。VBAだけでは1秒以下の処理停止ができないのでAPI関数を呼び出しています。以外と高度なテクですが、便利です。ちなみに、1000が1秒に相当しますが、微小時間はあまり正確ではありません。

> DoEventsを入れないと点滅しませんでしたがなぜでしょ> うか?
DoEvents は、OS に一時的に制御を渡すコマンドです。ここではループ中にオブジェクトを再描画させるために使っていますが、他のコードに強制的に処理を移すときに使います。

QEXCEL VBAで計算値を四捨五入、切り上げ、切捨てする方法

ネットで探してみたのですが、計算結果を四捨五入して特定のセルを
返すにはどうしたらいいのでしょうか?

Sub hokangosa()

Dim ZPS As Double
Dim ZPOS As Double
Dim DMN As Double
MsgBox (" >>> 補間誤差自動計算 <<< ")
MsgBox (" >>> 初期値入力します <<< ")
ZPS = InputBox(">>> ステップを入力してください<<<")
ZPOS = Sheet1.Cells(22, 4).Value
DMN = ZPOS / ZPS
Sheet1.Cells(23, 6).Value = DMN
End Sub

ここでDMNの値を四捨五入したいです。

またこれとは別に切上げ、切捨ても教えていただけるとありがたいです。

Aベストアンサー

DMN = Application.WorksheetFunction.Round(ZPOS / ZPS, 0)
で、四捨五入
DMN = Application.RoundDown(ZPOS / ZPS, 0)
で切り捨て
DMN = Application.RoundUp(ZPOS / ZPS, 0)
で切り上げです。

引数で、対象桁を変更できます。

Qエクセルで、セル内の文字を点滅させるには。

現在、エクセルで運転免許証の有効期限を管理していす。
L3に =IF(L3="","",IF(L3<=TODAY(),"失効",IF(L3<=DATE(YEAR(TODAY()),MONTH(TODAY()),DAY(TODAY())+15),"間近",""))) この関数を入れて管理していますが、失効 が表示されたらその文字を点滅できればと思っています。

よろしくお願いします。

Aベストアンサー

ちなみに、条件付き書式にする場合、条件式は
=L3<=TODAY()
です。

Q【Excel VBA】マクロでExcel自体を終了させたい

環境:WindowsXP、Excel2003

マクロでエクセルを終了(ブックを閉じて、アプリケーション自体も終了)させたいのですが、以下のコードではアプリケーションが閉じてくれません。

ThisWorkbook.Close
ExcObj.Quit
Application.Quit

どこか悪いところはありますでしょうか?

よろしくお願いします。

Aベストアンサー

普通に考えれば質問者のコードで上手くいきそうですが
hana-hana3さんの回答にもあるようにThisWorkBook.Closeでコード終了となりますので
Application.QuitをThisWorkBook.Closeの前にもってこないといけません。
Application.Quitはそれがあるプロシージャのコードが全て終わるまで
その実行を保留するちょと特別動作をします。

'-------------------------------------
 Application.Quit
 ThisWorkbook.Close
'-------------------------------------
 
 

QSub ***( ) と Private Sub ***( ) の違い

初歩的な質問で申し訳ありませんが・・・

自分でコードを書いていても、イベントが発生したりした時の処理で、コードのウィンドウで上のドロップダウンリストで選択できる時の処理などは自動的に[Private Sub Command1_Click( )]などと出てくるのでそのまま使っています。自分で別途プロシージャーを作成する時は[Sub ****( )]としています。
ですがその違いを理解しないまま、自分で作成する時は[Private Sub]ではなくて[Sub]を使っています。

Sub ***( ) と Private Sub ***( ) の違いは何なんでしょうか?
どなたか説明頂けませんか?
よろしくお願いします。

Aベストアンサー

「Sub」の部分にカーソルを置いて[F1]を押せばヘルプが起動します。
「指定項目」のところに「Public」と「Private」の説明がありますよ。
省略して「Sub hogehoge()」とした場合は「Public」とみなされます。

Publicは「すべてのモジュールから呼び出せるプロシージャ」ということになります。
Privateとすると「同じモジュールの中からしか呼び出せないプロシージャ」となります。

もしExcelをお持ちでしたらExcelのVBEで標準モジュールを追加し、「Sub Test1()」と「Private Sub Test2()」を作成してみてください。
そしてExcelの[ツール]-[マクロ]-[マクロ(Alt+F8)]でマクロ実行のダイアログを表示させてみるとわかります。
ここには実行できるプロシージャの一覧が表示されますが、Test1は表示されているけれどTest2は表示されません。
Test1はPublicで、Test2はPrivateだからです。

Qエクセル VBA ユーザーフォームを閉じる

ユーザーフォームを開く時は
UserForm1.Showですが
閉じる時は?
UserForm1.Close
だとコンパイルエラーになります。
End
にするしかないですか?

Aベストアンサー

Unload Me とか Unload UserForm1 でユーザーフォームを閉じることができます。

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング