C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Excelの条件付き書式

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■92164 / inTopicNo.1)  Excelの条件付き書式
  
□投稿者/ 奈保子 (1回)-(2019/08/30(Fri) 13:21:17)

分類:[C#] 

Excelの条件付き書式を3色スケールに設定した時に、
プレビューで表示されているような色を取得することは可能でしょうか?

引用返信 編集キー/
■92166 / inTopicNo.2)  Re[1]: Excelの条件付き書式
□投稿者/ furu (6回)-(2019/08/30(Fri) 13:34:10)
No92164 (奈保子 さん) に返信
> Excelの条件付き書式を3色スケールに設定した時に、
> プレビューで表示されているような色を取得することは可能でしょうか?
プレビューのデフォルトで表示されてる
最小値(赤っぽい),中間値(黄色っぽい),最大値(緑っぽい)の色がほしい?

色のとこ、ドロップダウンして、「その他の色…」クリックすると
RGB値わかります。
引用返信 編集キー/
■92168 / inTopicNo.3)  Re[1]: Excelの条件付き書式
□投稿者/ 魔界の仮面弁士 (2338回)-(2019/08/30(Fri) 13:46:09)
No92164 (奈保子 さん) に返信
> Excelの条件付き書式を3色スケールに設定した時に、
> プレビューで表示されているような色を取得することは可能でしょうか?

3 色スケールによって割り当てられた、各セルの背景色を知りたいのなら、
それぞれの単一セル(Range オブジェクト)ごとに
.DisplayFormat.Interior.Color プロパティを調べてみるとか。
引用返信 編集キー/
■92169 / inTopicNo.4)  Re[2]: Excelの条件付き書式
□投稿者/ 奈保子 (2回)-(2019/08/30(Fri) 13:56:48)
回答ありがとうございます。

各セルの背景色ではなく、プレビューで表示されてる
カラースケール値を取得したいのですのですが...
引用返信 編集キー/
■92171 / inTopicNo.5)  Re[3]: Excelの条件付き書式
□投稿者/ 魔界の仮面弁士 (2339回)-(2019/08/30(Fri) 14:09:37)
No92169 (奈保子 さん) に返信
> 各セルの背景色ではなく、プレビューで表示されてる
> カラースケール値を取得したいのですのですが...

ここでいう『プレビュー』とは、条件付き書式の設定ダイアログにおける、
 [セルの値に基づいてすべてのセルを書式設定]
 - 書式スタイル: 3 色スケール
の一番下にある、「プレビュー」と書かれたグラデーションバーのことでしょうか。


もしも、『カラースケール値』というのが、そのバーの上にある、
最小値・中間値・最大値それぞれが持つ「色」指定のことだとすれば、
FormatConditions コレクションなどから 該当する ColorScale オブジェクトを取得した上で、
.ColorScaleCriteria(n).FormatColor.Color プロパティから得ることができます。
引用返信 編集キー/
■92173 / inTopicNo.6)  Re[4]: Excelの条件付き書式
□投稿者/ 奈保子 (3回)-(2019/08/30(Fri) 14:19:45)
No92171 (魔界の仮面弁士 さん) に返信
> ここでいう『プレビュー』とは、条件付き書式の設定ダイアログにおける、
>  [セルの値に基づいてすべてのセルを書式設定]
>  - 書式スタイル: 3 色スケール
> の一番下にある、「プレビュー」と書かれたグラデーションバーのことでしょうか。
そうです、それです。

このグラデーションバーのRGB値をプログラムで取得したいのです。
左から右までを256諧調で取得できたらうれしいです。


引用返信 編集キー/
■92175 / inTopicNo.7)  Re[5]: Excelの条件付き書式
□投稿者/ 魔界の仮面弁士 (2341回)-(2019/08/30(Fri) 14:54:31)
No92173 (奈保子 さん) に返信
> このグラデーションバーのRGB値をプログラムで取得したいのです。
> 左から右までを256諧調で取得できたらうれしいです。

それは、何のために必要としているのでしょうか?

グラデーション描画が目的ならば、下記のような処理を書けます。
https://dobon.net/vb/dotnet/graphics/lineargradientbrush.html


それとも、Excel の物と完全に同じ色で無いと困るのでしょうか。

条件付き書式のグラデーションを、256 諧調で直接得る方法はありませんが、
0〜255 までの連番をセルに記録して 3 色スケール条件付き書式を設定しておき、
それを No92168 の方法で調べれば、色番号が得られるでしょう。


C# で書くとオブジェクト解放の手間が面倒なので… Excel VBA で書いてみました。

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

'連番0〜255を設定
ws.[A1:E1].Value = Array("値", "R", "G", "B", "RGB")
ws.[A2].Value = 0
ws.[A2].AutoFill ws.[A2:A257], xlFillSeries


'3色スケールを設定
Dim cs As Excel.ColorScale
ws.[A2:A257].FormatConditions.Delete
Set cs = ws.[A2:A257].FormatConditions.AddColorScale(3)
'' 色指定しない場合は既定のグラデーション色
'cs.ColorScaleCriteria(1).FormatColor.Color = &H6B69F8
'cs.ColorScaleCriteria(2).FormatColor.Color = &H84EBFF
'cs.ColorScaleCriteria(3).FormatColor.Color = &H7BBE63


' 3 色スケールの R,G,B 値を取得
Dim r As Integer, c As OLE_COLOR
For r = 2 To 257
  c = ws.Cells(r, 1).DisplayFormat.Interior.Color
  ws.Cells(r, 5).Value = c
  ws.Cells(r, 2).Value = (c And &HFF&)
  ws.Cells(r, 3).Value = (c And &HFF00&) \ &H100&
  ws.Cells(r, 4).Value = (c And &HFF0000) \ &H10000
Next

C# だと面倒なので Excel VBA で書きますが、つまりはこんな感じ。




あるいは 3 色それぞれを混ぜ合わせて、自分で色を計算するとか。

引用返信 編集キー/
■92177 / inTopicNo.8)  Re[6]: Excelの条件付き書式
□投稿者/ 魔界の仮面弁士 (2342回)-(2019/08/30(Fri) 15:09:31)
No92175 (魔界の仮面弁士) に追記
> あるいは 3 色それぞれを混ぜ合わせて、自分で色を計算するとか。

自前でグラデーション配色を求める場合の計算式を載せておきます。

下記では 等比計算と等差計算の 2 種類が示されていますね。
http://www.sofgate.com/design/ct_gradation.html
引用返信 編集キー/
■92178 / inTopicNo.9)  Re[6]: Excelの条件付き書式
□投稿者/ 奈保子 (4回)-(2019/08/30(Fri) 15:15:22)
No92175 (魔界の仮面弁士 さん) に返信

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

> それとも、Excel の物と完全に同じ色で無いと困るのでしょうか。
Excelで作られた色(RGB値)と一致させたいのです

> 条件付き書式のグラデーションを、256 諧調で直接得る方法はありませんが、
> 0〜255 までの連番をセルに記録して 3 色スケール条件付き書式を設定しておき、
> それを No92168 の方法で調べれば、色番号が得られるでしょう。
この方法で、実現したいと思います。

解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ