2017-03-13 18 views
0

Excelでは、塗りつぶした色(IFCOLOR()など)に応じて現在のセルに値を表示します。塗りつぶした色を変更すると、Excelが自動的にこれを行う必要があります。したがって、イベントでなければなりません。例えばExcelでの塗りつぶしの色に応じてセル内の値を表示する方法 - VBA

:私は赤のセルを埋めるとき 私は緑のセルを記入し、Excelが自動的に自動的にExcelが値75 が表示され、ように...

はそれが可能で、これを行うされている値100 を示しExcel VBAのイベントですか?それともどうやって他のアイデアを教えてもらえますか?

私はWorkbook_SheetChangeを使用しましたが、セルの背景色ではなく値を変更するとこれが機能します。

よろしく 01月

+0

(:他のカスタムイベントのために


は、より具体的なCommandBarControlイベントが可能な場合に使用すべきです1)色の変更(例えば、 'SelectionChange'イベント)または(2)独自のイベントハンドラを実装した後で、頻繁に高速に実行されることを望む別のイベントを使用します。後者は次のように動作します。Excelファイルを開くと、[Application.OnTime](https://msdn.microsoft.com/en-us/)でx秒ごとに実行されるようにスケジュールされたサブを開始します。ライブラリ/オフィス/ ff196165.aspx)。このサブは、変更を監視したいシートと範囲をスキャンし、指定されたカラーコードを適用します。 – Ralph

+0

@JanZitniakあなたは自分のコードを試しましたか? – BOB

答えて

1

あなたはこのような何かを試すことができます。

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    If ActiveCell.Interior.Color = vbRed Then 
     ActiveCell = 75 
    Else 
     ActiveCell = " " 
    End If 
End Sub 

をpredefind帯:

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
Application.Calculation = xlCalculationManual 
Application.ScreenUpdating = False 

Dim ws As Worksheet 
Set ws = ThisWorkbook.Worksheets("Sheet1") 

Dim rng As Range, cell As Range 
Set rng = ws.Range(Cells(1, 1), Cells(100, 20)) 

For Each cell In rng 
    If cell.Interior.Color = RGB(255, 0, 0) Then 
     cell = 75 
     ElseIf cell.Interior.Color = RGB(0, 255, 0) Then 
      cell = 100 
    Else 
     cell = " " 
    End If 

Next cell 

Application.Calculation = xlCalculationAutomatic 
Application.ScreenUpdating = True 
End Sub 
+0

セルを色付けしたら、それをクリックする必要があり、値は自動的に設定されます。 – BOB

+1

選択されたセルをクリックしても選択変更イベントは発生しません – Slai

+0

@Jan投稿を編集しました。「ペインフインド範囲で: – BOB

0

CommandBars.OnUpdateは、ほとんどのカスタムイベントを処理するために使用することができます。 ThisWorkbookオブジェクトに:

Private WithEvents bars As CommandBars, color As Double 
Private Sub bars_OnUpdate() 
    'If Not ActiveSheet Is Sheet1 Then Exit Sub ' optional to ignore other sheets 
    If ActiveCell.Interior.color = color Then Exit Sub ' optional to ignore if same color 
    color = Selection.Interior.color 
    'Debug.Print Selection.Address(0, 0), Hex(color) 
    If color = vbGreen Then Selection = 100 Else _ 
    If color = vbRed Then Selection = 75 
End Sub 

Private Sub Workbook_Activate() 
    Set bars = Application.CommandBars ' to set the bars_OnUpdate event hook 
End Sub 
Private Sub Workbook_Deactivate() 
    Set bars = Nothing ' optional to unset the bars_OnUpdate event hook 
End Sub 
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) 
    color = Selection.Interior.color ' optional to ignore selection change events 
End Sub 

上記サンプルは、すべてのエッジケースを処理しないが、必要に応じて調整することができます。あなたはどちらかにありますセルの色の変化を扱うExcelのイベントがないので

CommandBarButton.Click 
CommandBarComboBox.Change 
CommandBarControl.OnAction 
CommandBarPopup.OnAction 
関連する問題