アプリ版:「スタンプのみでお礼する」機能のリリースについて

'① ユーザー定義関数で
セルの背景色の色が赤interior.colorindex = 3
になつたらとなりの列に完了と表示
させることは可能でしょうか
また、背景色が黒になった場合は未完了
不可能とおもわれますが
できる方いませんか

質問者からの補足コメント

  • うれしい

    人が色をつけます。
    すぐには反応しなくていいです
    お願いいたします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2018/05/02 15:29
  • うれしい

    考えている通りです。
    初めてです。こんなコードは
    A列すべてを対象するにはどうしたら
    よろしいでしょうか

    No.2の回答に寄せられた補足コメントです。 補足日時:2018/05/08 19:07

A 回答 (3件)

標準モジュールのTimerProc を以下のように改変してください。


ただし、必ず、StopTheTimer で、タイマーを止めてから改変し、後は、WorkBook_Open でタイマーを再起動させてください。タイマーを止めないままに行うと、ハングします。

Sub TimerProc(ByVal Hwnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal dwTime As Long)
On Error Resume Next
If ActiveSheet.Name <> "Sheet1" Then Exit Sub
If Intersect(ActiveCell, Columns(1)) Is Nothing Then Exit Sub
With ActiveCell
 If .Interior.ColorIndex = 1 Then
  .Offset(, 1).Value = "未完了"
 ElseIf .Interior.ColorIndex = 3 Then
  .Offset(, 1).Value = "完了"
 Else
  .Offset(, 1).Value = ""
 End If
End With
End Sub
'//

なお、同様の質問が出ていますが、それは別の案があります。ただ、出来ていません。

今回のコードは、私には、間に合わせのプログラムです。

Excel 2003 以下では可能だったものが、Excel 2007以降になってからは出来ません。
しかし、プログラム的には、「塗りつぶしダイアログ」に、直接イベント(OnAction)を取り付けてマクロを走らすことは可能なはずです。ただ、正確な資料がありません。
Ka-Net にも載っていません。陶山(suyama)なんとかという人のネットで、かろうじて似たようなものを見つけたに過ぎません。

まあ、とうぶん時間が掛かりそうな気がします。私は、もう1年以上もやっているのですが、まだ出来ません。それと、思い出したことですが、COM側からなら、可能なようです。いずれにしても、難易度の高い問題です。

P.S. NumLockLock VBAマクロで、NumLockが外れてしまうので、それをLockするために使っているツール( http://www.inasoft.org/)
    • good
    • 0

NumLockLock からヒントを得て作ってみました。




'ThisWorkbook モジュール
'//
'このコードを変更する時は、必ず、StopTheTimer で、タイマーを止めないとハングする。

Private Declare Function SetTimer Lib "user32.dll" (ByVal Hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32.dll" (ByVal Hwnd As Long, ByVal nIDEvent As Long) As Long
Private myTimer As Long

Private Sub Workbook_BeforeClose(Cancel As Boolean)
 KillTimer 0&, myTimer
End Sub
Private Sub Workbook_Open()
myTimer = SetTimer(0&, 0&, 1000&, AddressOf TimerProc)
End Sub
'
Sub StopTheTimer()
 KillTimer 0&, myTimer
End Sub

'//標準モジュール

Sub TimerProc(ByVal Hwnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal dwTime As Long)
On Error Resume Next
If ActiveSheet.Name <> "Sheet1" Then Exit Sub
With Range("A1")
 If .Interior.ColorIndex = 1 Then '数字は少ない順から
  .Offset(, 1).Value = "未完了"
 ElseIf .Interior.ColorIndex = 3 Then
  .Offset(, 1).Value = "完了"
 Else
  .Offset(, 1).Value = ""
 End If
End With
End Sub
この回答への補足あり
    • good
    • 0

誰が色を変えるんでしょう。


もし条件付き書式で色を変えてるなら、
超面倒な話になります。
人がセルに色を付けてるなら一応可能ですが、
すぐには反応しないかも。
条件付き書式の話なら、同じ条件で文字列表示が簡単です。
この回答への補足あり
    • good
    • 0

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