Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


9489 / 13644 ツリー ←次へ | 前へ→

【27017】セルの色塗りを検出する方法 agalinman 05/7/26(火) 16:52 質問[未読]
【27021】Re:セルの色塗りを検出する方法 IROC 05/7/26(火) 17:04 回答[未読]
【27023】Re:セルの色塗りを検出する方法 agalinman 05/7/26(火) 17:14 お礼[未読]
【27039】Re:セルの色塗りを検出する方法 知ろう途 05/7/27(水) 0:14 発言[未読]
【27046】Re:セルの色塗りを検出する方法 agalinman 05/7/27(水) 8:43 質問[未読]
【27047】Re:セルの色塗りを検出する方法 知ろう途 05/7/27(水) 9:05 発言[未読]
【27051】Re:セルの色塗りを検出する方法 agalinman 05/7/27(水) 9:44 お礼[未読]

【27017】セルの色塗りを検出する方法
質問  agalinman  - 05/7/26(火) 16:52 -

引用なし
パスワード
   agalinman と申します。
過去ログを探してみたのですが、手軽に実現できそうなものを
見つけられませんでしたので、質問させて頂きます。

セルに色を塗ったことをイベントとして検出することは
可能でしょうか?

現在、特定範囲内で背景がある色に塗られたセルの数を
カウントし、結果をセルに代入するするマクロを使用していますが、

・ツールバーのメニューから [書式]-[セル]-[パターン] で色指定
・ツールバーのボタンで直接色指定
・該当セルで右クリックから [セルの書式設定]-[パターン] で色指定

など(他にもあればそれも含む)のような方法でセルの背景色の変更をしたとき、
これらは Worksheet_Change で拾うことができないため、
私の知識レベルでは、色を変更したあと、わざわざマクロを実行する
という2段階の手順で対応せざるを得ない状況です。

色を変更した瞬簡に計算結果を導出するような方法はないのでしょうか?

過去ログでは、セル色の変更に関わるボタンをすべて使用できなくし、
専用のダイアログをユーザーフォームで自作する

http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=18483;id=excel

というものがありましたが、コレを実際に行うよりは現状維持で
我慢する方が得策かと思いまして、「手軽に実現できそうなもの」
という観点で質問させていただきました。

どなたかご存知の方、よろしくお願い致します。

【27021】Re:セルの色塗りを検出する方法
回答  IROC  - 05/7/26(火) 17:04 -

引用なし
パスワード
   >「手軽に実現できそうなもの」

私の経験では「無い」ですね。

【27023】Re:セルの色塗りを検出する方法
お礼  agalinman  - 05/7/26(火) 17:14 -

引用なし
パスワード
   ▼IROC さん:
>私の経験では「無い」ですね。

IROC さん、返信ありがとうございます。

ちなみに、具体的には以下のようなユーザー定義関数を
使って、セルに

=Count_color(A1:G10)

のように記述しています。

=========
Function Count_color(s_range As Range)
    
  Dim rng As Range
  Dim icount As Integer
  
  For Each rng In s_range
    If rng.Interior.ColorIndex = 3 Then '赤の場合
      icount = icount + 1
    End If
  Next
  
  Count_color = icount
End Function

=========

色を変更した際に、この結果が更新されることを
期待しているのですが、
やはり「手軽に」ということでは「なし」ですか。
では、現状で我慢することに致します。
ありがとうございました。

【27039】Re:セルの色塗りを検出する方法
発言  知ろう途  - 05/7/27(水) 0:14 -

引用なし
パスワード
   agalinman さんこんばんわですます。

そんなに早く諦めなくともよいのでは?

色を塗る事ばかり気にせず次の流れでの処理は無理っぽいですかね?
あくまでも A1:G10 の範囲を例として。。

まずは塗りたいセルに数字を入力。。といきたいところですが先に
セルに値があるかもしれないので

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

  With Target
   If .Column <= 7 And .Row <= 10 Then
   [H1].Value = .Value
   Else: [H1].Value = ""
   End If
  End With
  
End Sub

でH1にでも値を逃がしておきそれから色を塗ります。

下記では、1,2,3を入力するとそれぞれ黒、赤、青とを塗るようにしています。

Private Sub Worksheet_Change(ByVal Target As Range)
  
  With Target
   If .Column <= 7 And .Row <= 10 Then
   Select Case .Value
    Case "": [H1].Value = ""
    Case "1", "1": .Interior.ColorIndex = 1
            .Value = [H1].Value
    Case "2", "2": .Interior.ColorIndex = 3
            .Value = [H1].Value
    Case "3", "3": .Interior.ColorIndex = 5
            .Value = [H1].Value
    Case Else: End
   End Select
   End If
  End With

End Sub

んでもってこの続きに色の数を調べるコードをつなげてみたり
してみたりしてみたらどうでしょうか?

もし塗りたい色の種類が多い場合はインデックスそのものを入力
するように変更してみてください。

あ!それとエラー処理は未だに良くわからないのでおまかせします。

【27046】Re:セルの色塗りを検出する方法
質問  agalinman  - 05/7/27(水) 8:43 -

引用なし
パスワード
   ▼知ろう途 さん:

agalinman です。

知ろう途 さん、新たな発想をありがとうございます。
試しちょこっとやってみました。

>Private Sub Worksheet_SelectionChange(ByVal Target As Range)

で元々のセルの値を退避して

> Private Sub Worksheet_Change(ByVal Target As Range)

で色を塗るための数字指定で色塗り

というロジックだと理解しました。
確かに Worksheet_Change ですので、計算結果が更新されて、
いい感じに見えたのですが・・・。

この方法だと、何も入力されていないセルに、たまたま色を指定する数字と
同じ数字を入力したい場合、希望したい色に塗られないことがあるし、
元々が何も入力されていないため、入力した数字が消えてしまいますよね。

具体的には、お教え頂いたコードをサンプルとすると、
何も入力されていないセル B2 に "2" という数字を入力して、
色を"青"にしたい場合
などが該当します。

>あ!それとエラー処理は未だに良くわからないのでおまかせします。

おっしゃる通り、例外処理がやっかいそうですよね。

【27047】Re:セルの色塗りを検出する方法
発言  知ろう途  - 05/7/27(水) 9:05 -

引用なし
パスワード
   agalinman さんどうもですます。

>この方法だと、何も入力されていないセルに、たまたま色を指定する数字と
>同じ数字を入力したい場合、希望したい色に塗られないことがあるし、
>元々が何も入力されていないため、入力した数字が消えてしまいますよね。

あ!そうですね。。。トホホ。。
でしたら分岐を入力されないであろう数字や文字にするしかないですね。
Case "黒"とか Case "A1"とか Case "81"とか

あと空白の時をさけるには

    Case "黒": .Interior.ColorIndex = 1
         If [H1].Value <> "" Then .Value = [H1].Value

でいけると思われますです。

【27051】Re:セルの色塗りを検出する方法
お礼  agalinman  - 05/7/27(水) 9:44 -

引用なし
パスワード
   知ろう途 さん、どうもです。

>あ!そうですね。。。トホホ。。
>でしたら分岐を入力されないであろう数字や文字にするしかないですね。
>Case "黒"とか Case "A1"とか Case "81"とか

こちらの方法を使う場合には
色と入力値の対応を表を作ったりして覚えておかないといけませんね。

>あと空白の時をさけるには
>
>    Case "黒": .Interior.ColorIndex = 1
>         If [H1].Value <> "" Then .Value = [H1].Value
>
>でいけると思われますです。

ありがとうございます。
空白の問題はコレで解決できました。

最初に戻ってしまいますが、実際に
・ツールバーのメニューから [書式]-[セル]-[パターン] で色指定
・ツールバーのボタンで直接色指定
・該当セルで右クリックから [セルの書式設定]-[パターン] で色指定
で色を変えられると、変更後別途マクロ実行は避けられないみたいですし。

いずれの方法を使うにしても「運用で回避」で対応することになりますかね。

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

9489 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free