VBA初心者です。
値によって背景色を設定したいのですが、条件が3つ以上で設定したいため、条件書式は使えず困っています。
5~10段階の任意にUnitを選択し(Inputboxなどで入力するのでしょうか?)、それに応じて背景色を設定したいのです。
1.A1:Z15まで数値が並んでいる
2.最大値と最小値を取得し、その間で例えば10に分けて色分けする。
※表で見る等高線のようなイメージです。
そもそも等高線に一般的に使われる色もよく判っていませんが、Unitに応じて寒色にしたり、暖色にしたりなんてことが出来るのでしょうか?
No.4ベストアンサー
- 回答日時:
こんばんは。
Wendy02です。まだ、私の書いたものは、バグが残っているようですね。どうも、このレベルで間違いをするとは、私は、調子を落としているかもしれません。すみません。
正しくは以下ですね。
×ci = (c.Value - Min) \ unit
↓
ci = (c.Value - lngMin) \ unit
>1点だけ、valueの意味がよく分かりませんでした(cのみではNGでしょうか?)
NGではありませんが、c というのは、Rangeオブジェクトですね。それをセルに出力すると、自動的に、Value にはなります。これを自動キャストと呼んでいます。
しかし、なぜ、私は、Value プロパティをつけるかというと、そのほうが、若干、出力が速いのです。他にも、Excelのいろんな環境の中で、Rangeオブジェクトだけですと、エラーになったことがあるから、Valueプロパティをつけておくのが無難かなって思います。これも、VBAの最適化のひとつです。
>RGBでTRYしてみましたが、私には非常に難しかったです。
Excelでは、RGBの微妙な色を付けたくても、56色(重複があります)のどれかの近い色に割り振られていますから、仮に、微妙な色のグラデーションを付けたいとすれば、最初に、ユーザーオプションのユーザー設定で、ColorIndexの割り振りの色を予め設定しなければなりません。
それは、非常に面倒なことなので、規定のColorIndexを使う結果になってしまいます。
丁寧にご回答頂きありがとうございました。
また、お礼が遅くなって申し訳ありません。
処理の速度の計算までは私には分かりませんでした。
いろいろ教えて頂きありがとうございます。
No.3
- 回答日時:
こんばんは。
Wendy02です。>「Rangeメソッドは失敗しました。Globalオブジェクト」
すみません、まるっきり間違ったコードを書いていました。
なるべく、標準モジュール(記録マクロが書かれる場所と同じところ)にしてくださいね。シートモジュールの場合は、色づけする場所に置いてくださいね。
Sub 色見本()
Dim i As Integer
With ActiveCell
For i = 0 To 56 '56以上はありません
.Offset(i, 0).Value = i
.Offset(i, 1).Value = i: .Offset(i, 1).Interior.ColorIndex = i
Next i
End With
End Sub
Sub TestColoring()
Dim lngMin As Double, lngMax As Double, unit As Double
Dim ci As Integer, c As Object, myRng As Range
Set myRng = ActiveSheet.Range("A1:Z15")
'最小値
lngMin = WorksheetFunction.Min(myRng)
'最大値
lngMax = WorksheetFunction.Max(myRng)
'1ユニット
unit = (lngMax - lngMin) / 10
If unit <> 0 Then
For Each c In myRng
If VarType(c) = vbDouble Then
ci = (c.Value - Min) \ unit
'色の始まり ColorIndex =31
c.Interior.ColorIndex = ci + 31
End If
Next c
Else
myRng.Interior.ColorIndex = ci + 31
End If
End Sub
修正版もご返答下さりありがとうございます。
実行すると気に入った内容になりました。
また、色の見本を見ながら、色の開始位置を変えて見易くしたりと、初心者の私でもわかる内容で感謝しています。
>ci = (c.Value - DMin) \ DUnit
1点だけ、valueの意味がよく分かりませんでした(cのみではNGでしょうか?)
まだまだ私は勉強が必要です。
こういう場合、皆さんもカラーパレットをお使いなのでしょうか?
RGBでTRYしてみましたが、私には非常に難しかったです。
No.2
- 回答日時:
こんにちは。
すでに#1 で、出ていますので、あまり細かい説明はいたしません。
なお、色見本をつけましたので、色番号の選択にお使いください。
Sub TestColoring()
Dim min As Long, max As Long, unit As Double
Dim ci As Integer, c As Object, myRng As Range
Set myRng = Range("A1:Z15")
'最小値
min = WorksheetFunction.min(myRng)
'最大値
max = WorksheetFunction.max(myRng)
'1ユニット
unit = (max - min) / 10
For Each c In Range(myRng)
ci = (c.Value - min) \ unit
'色の始まり ColorIndex =31
c.Interior.ColorIndex = ci + 31
Next c
End Sub
Sub 色見本()
Dim i As Integer
'オプションで、色はカスタマイズできますが、
'ColorIndexでは、56までです。RGBでやっても割り振られるだけです。
With ActiveCell
For i = 0 To 56 '56以上はありません
.Cells(i + 1, 1).Value = i
.Cells(i + 1, 2).Value = i: Cells(i + 1, 2).Interior.ColorIndex = i
Next i
End With
End Sub
ありがとうございます。
実際に動かしてみると、
For Each c In Range(myRng)
でエラーになり、
「Rangeメソッドは失敗しました。Globalオブジェクト」
のメッセージが表示されてしまいました。
No.1
- 回答日時:
勝手な例でやってみました。
改造できるなら参考にしてください。値は0-500程度の範囲内、10刻みで色を変える。
(Colorindexが50個ていどしかないので)
Arrayの()内はでたらめに設定して手を抜いている。意味のあるようにカラーインデックスコードを設定してください。
RGBで指定するなら、R,G,B用の3つのArrayテーブルを作ればよい
と思う。
CASE文で振り分ける手もある(略)。
Sub test01()
Dim cl As Range
colortb = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
m = Application.WorksheetFunction.Max(Range("a1:Z15"))
m = (Int(m / 10) + 1) * 10
MsgBox m
n = Application.WorksheetFunction.Min(Range("a1:Z15"))
n = Int(n / 10) * 10
MsgBox n
For Each cl In Range("A1:Z15")
k = Int(cl / 10)
cl.Interior.ColorIndex = k
Next
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 昨日、質問した件『VBA にて、条件付き書式で背景色を設定しているセルの範囲で、背景色付きのセルをカ 4 2022/04/07 14:39
- Visual Basic(VBA) VBA にて、条件付き書式で背景色を設定しているセルの範囲で、背景色付きのセルをカウントできる、VB 2 2022/04/06 21:33
- 会計ソフト・業務用ソフト エクセル 背景色のついたセル位置を参考にして固定の数値を取得する 4 2022/07/11 08:44
- ノートパソコン AMDディスプレイ設定 暖色見にくい 2 2023/07/18 17:24
- その他(Microsoft Office) エクセル 表の移動 2 2023/04/05 20:29
- Excel(エクセル) エクセルで条件付き書式を使わずにセルの文字の色を変える方法を教えて下さい 8 2023/07/28 01:15
- Excel(エクセル) エクセルで”入力シート”の文字書式の変更を”出力シート”で同じ文字書式で印刷したいです。VBA希望 4 2023/04/24 11:07
- Excel(エクセル) 条件付き書式の設定方法を教えて下さい。 2 2023/04/14 18:12
- Excel(エクセル) エクセルで隣(右or左)のセルと同じ文字色にしたい 2 2022/12/13 11:33
- Excel(エクセル) Excel アクティブセルのみ条件付き書式の色を他の色にしたい。 4 2022/06/11 22:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
類似色と近似色の違い分かりま...
-
油絵にチャレンジしたくなり、...
-
真っ赤なTシャツの色を落とす(...
-
薄いピンクの背景に合う文字の色
-
パワーポイントでフォントの色...
-
色の飽和度とは・・・?
-
自分が描いた絵です。この絵を...
-
緑や黄緑と相性のいい色って何...
-
エクセルに挿入した図の一部を...
-
エクセルのポインターの色を変...
-
access2013でフォームに配置し...
-
ユニクロ色落ち
-
Excel2010 セル選択時の行番号...
-
ターレンス エコラインのインク...
-
色鉛筆について質問があります...
-
アクリル絵具とアクリルガッシュ
-
色を使う方法―真面目から抜け出...
-
背景イラストの色塗り
-
「色」がテーマの小論文
-
ダブルクリックでセルの色を変える
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルのセルの色が突然変った
-
濃いローソン
-
エクセルのポインターの色を変...
-
パワーポイントでフォントの色...
-
真っ赤なTシャツの色を落とす(...
-
緑や黄緑と相性のいい色って何...
-
類似色と近似色の違い分かりま...
-
薄いピンクの背景に合う文字の色
-
エクセルに挿入した図の一部を...
-
色鉛筆について質問があります...
-
色画用紙に絵を写したい! 学校...
-
Excelの参照元の色がつかない
-
川にオオカナダモを取りに行っ...
-
PowerPoint2003で重ねた図の色...
-
油絵にチャレンジしたくなり、...
-
タンってどういう色?
-
iPhone14を買ってiPhone8からの...
-
iPhoneと液タブの色調節につい...
-
キャプチャを通すと色がおかし...
-
イラストの下書きを消すタイミング
おすすめ情報