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

マイクロソフトエクセル2000を利用しています。
VBについては全く利用したことがないのですが、
とあるセルでSUMをした値が0~9なら赤、10~19なら緑、20~29なら青のような設定をしたいと考えています。
「条件付き書式」で設定してみましたが、これでは3つまでしか設定できませんでした。
現在7通りの設定を必要としています。
これまでの質問も参照してみましたが、うまくいきませんでした。

おわかりになる方がいればよろしくお願いいたします。

A 回答 (3件)

>これまでの質問も参照してみましたが、うまくいきませんでした。


どの質問をご覧になって、何がどうダメだったのですか? それを書いた方が解決が早いと思います。

以下URLは年末に回答したものです。参考にはなると思います。
http://oshiete1.goo.ne.jp/qa3628390.html

>0~9なら赤、10~19なら緑、20~29なら青のような
ならば
 Case Is < 10
  r.Interior.ColorIndex = 3
 Case Is < 20
  r.Interior.ColorIndex = 4
  以下略
のようにすればよいです。
    • good
    • 0
この回答へのお礼

お忙しい中回答していただきありがとうございます。

>どの質問をご覧になって、何がどうダメだったのですか? それを書いた方が解決が早いと思います。
確かにそのとおりでした。申し訳ありません。
確認不足で当該の回答には目を通していませんでした。

二つのコードをあわせて利用したところ、考えていたとおりに作動いたしました。ありがとうございます。
これから色の設定など少しだけ修正を加えた後利用させていただこうかと思います。

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

お礼日時:2008/01/03 01:22

モジュールで自作関数を作る方法です。


モジュールがいやなら読み飛ばしてください。

ユーザ関数内でプロパティを変更できないので、情報を保存しておいて、Worksheet_Calculate()イベントで設定します。
標準モジュールと自作関数を使用するシート(例えばsheet1)のモジュールに以下をコピーします。

---標準モジュール ここから---
Public co As New Collection

'インテリアカラー情報保存
Function getInteriorColor(r As Range) As Variant
Dim c As Integer
Select Case r.Value
'以下に条件と背景色を記述
Case Is < 10: c = 5 '青
Case Is < 20: c = 4 '緑
Case Is < 30: c = 8 '水色
Case Is < 40: c = 3 '赤
Case Is < 50: c = 7 '紫
Case Is < 60: c = 6 '黄色
Case Is < 70: c = 2 '白
Case Else: c = 1 '黒
End Select
co.Add Array(r, c) '情報を保存
getInteriorColor = ""'戻り値が必要なので""を返す
End Function

'インテリアカラー情報設定(Worksheet_Calculateイベントで呼ぶ)
Function setInteriorColor()
Dim i As Integer
For i = 1 To co.Count
co.Item(1)(0).Interior.ColorIndex = co.Item(1)(1)
co.Remove 1
Next
End Function
---標準モジュール ここまで---

---自作関数を使用するsheetのモジュール ここから---
Private Sub Worksheet_Calculate()
setInteriorColor
End Sub
---自作関数を使用するsheetのモジュール ここまで---

以上でB1(実際はどこでもいい)に
=getInteriorcolor(A1)
とすると、A1の値(計算式でも良い)によってA1の背景色が変わります。

最初に「条件と背景色を記述」の部分を設定しておけば、普通の関数のように使えます。

[注意]
getInteriorcolorを使用するsheetに、忘れずにWorksheet_Calculate()イベントをコピーしてください。
複数のシートがある場合は、各シートに必要です。
    • good
    • 0
この回答へのお礼

早々のご回答ありがとうございます。

モジュールを操作する、という手もあるのですね。
残念ながら自身がコードの記述についてはからきしなので内容は殆ど理解できませんが、試行錯誤して利用させていただこうかと思います。

短文になってしまいましたが、ありがとうございました。

お礼日時:2008/01/03 01:36

(1)エクセル2007以外は条件付き書式は3色までなので、操作の設定では不可能です。


(2)既出ご回答のよう、VBAでバッチ処理的にセルに値によって色をつけるなら、10種ぐらいは可能(色は56色つけられても、見た人が違いを判別できるのは、そんなに多くないから)と思う。
またさらに下記コードのCase Is < 10: c = 5 '青
などはセルの黒色の文字が見難くなって不適と思う。
例えば Case Is < 10: c = 45 などがお勧め。
(3)(2)はデータが変更されて関数の結果が変わった場合に変化しないので、#2のご回答のようなイベントに持ち込んで、変化を反映するように工夫されたと思う。
ーー
しかしエクセルVBAのFunctionプロシジュアーで、セルの値以外であるセルの書式に当たるセルパターン色を変えられるか疑問。
私の少ない経験ではFunctionプロシジュアーは式を入れるセルの値以外は触らせてくれなかったと思う。VBと違う。
私の経験不足・勉強不足でしたら、#2さんすみません。
ーー
私なりに一部使わせていただいて、下記コードを
Calculateイベントで設定しました。
シートにSUM関数など計算関数があることが条件です。
またセル範囲Range("A1:G20")は、セルの色設定するセルだけに限って、質問者のセルの実情に応じて変えてください。少ない範囲の方が望ましい。
Private Sub Worksheet_Calculate()
MsgBox "再計算された"
Dim cl As Range
For Each cl In Range("A1:G20")
If cl <> "" Then
Select Case cl.Value
Case Is < 10: c = 5 '青 しかし Case Is < 10: c = 45 などがお勧め
Case Is < 20: c = 4 '緑
Case Is < 30: c = 8 '水色
Case Is < 40: c = 3 '赤
Case Is < 50: c = 7 '紫
Case Is < 60: c = 6 '黄色
Case Is < 70: c = 2 '白
Case Else: c = 0 '黒
End Select
cl.Interior.ColorIndex = c
Else
cl.Interior.ColorIndex = xlNone
End If
Next
End Sub
これとても色んなケースで酷使に耐えるかどうか、十分は自信なし。
問題にしているセル以外に、式が設定してあり、そのひぃすうデータが変わっても上記が走ってしまう。Calculate の原因になったセル捕まえるのは、Changeイベントなどを使わないとダメだと思う。
質問者には、>VBについては全く利用したことがないのですが
であれば難しいと思うが、私なりの感想を書きます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

>またさらに下記コードのCase Is < 10: c = 5 '青
>などはセルの黒色の文字が見難くなって不適と思う。
>例えば Case Is < 10: c = 45 などがお勧め。

など、小さな心遣い痛み入ります。
ほかの方のコードと併せて勉強がてらサンプルに弄らせていただこうと思います。

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

お礼日時:2008/01/03 01:46

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