指定したセルの色を判定して処理を行いたい – プログラミング – Home

指定したセルの色を判定して処理を行いた...
 
通知
すべてクリア

[解決済] 指定したセルの色を判定して処理を行いたい


ポンチョ
 ポンチョ
(@ポンチョ)
ゲスト
結合: 18年前
投稿: 5
Topic starter  

ほとんど連続質問になってしまい恐縮なのですがお願いします。

開発環境は vc++6.0 EXCEL2000 windows2000 MFCのダイアログベースで作成していま
す。
以下のようなコードを書いているのですが(主要な宣言のみです)

_WorksheetPtr pSheet = pXL->ActiveSheet; //アクティブシートの取得
CString pp=A1; //セル番地
RangePtr pCells;
RangePtr pColor;

pCells = pSheet->Range[(_variant_t)pp]; //ppのセル番地を取得
pColor = pCells->Interlor->ColorIndex; //ppのセル番地の色情報を獲得

これ以降の処理で、pColorの色がこちらで指定した色ならば「A」違っていれば「B」と
いう処理を行いたいのですが、
以下のような条件式

if(pColor == [??]){
 「A」
}else{
 「B」
}

で行えるとは思うのですが、??に入れるべき色の情報として
例えば「青」とした場合、どのような値を入れればよいのかが分かりません。
伝わりにくい部分もあるかと思いますが、よろしくお願いします。


引用未解決
トピックタグ
ポンチョ
 ポンチョ
(@ポンチョ)
ゲスト
結合: 18年前
投稿: 5
Topic starter  

すみません。下の宣言を書くのを忘れていました。

_ApplicationPtr pXL;


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

Excelのデフォルトの設定のままであれば、
http://www.relief.jp/itnote/archives/000482.php
をみると、青は5であることがわかります。

>pCells->Interlor->ColorIndex;
の戻り値は RangePtr でしょうか?
_variant_tもしくはlong型ではないでしょうか?

Excel::InteriorPtr pInterior = pCells->GetInterior();
_variant_t vColor = pInterior->GetColorIndex();

if (vColor.intVal == 5)
{
// 青です。
}


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

ちなみにColorプロパティからも比較できますが、
内部の値がdouble型になってしまっているので単にキャストして比較できないので
少し工夫します。

_variant_t vColor = pInterior->GetColor(); // vColor は VT_R8 -> double型の値

// とりあえず long 型(VT_I4)で値を入れておく
_varinat_t vBlue((long)RGB(0x00, 0x00, 0xff));
// vColorの型に変換する
vBlue.ChangeType(vColor.vt);

// これで普通に比較できる
if (vColor == vBlue)
{
// 青です。
}


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

取得した vColor のほうを long型に変換して比較するのもありかも。

_variant_t vColor = pInterior->GetColor();
// long型に変換する
vColor.ChangeType(VT_I4);
// long型の値で比較
if (vColor.lVal == (long)RGB(0x00, 0x00, 0xff))
{
// 青です。
}


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

いろいろやっていたら、_variant_t型の(operator)キャストは内部でChangeType
を呼んで変換しているようです。

ということで、Colorで取得した値を比較するときは

_variant_t vColor = pInterior->GetColor();
if ((long)vColor == RGB(0x00, 0x00, 0xff))
{
// 青です。
}

というのが一番スマートですね。


返信引用
ポンチョ
 ポンチョ
(@ポンチョ)
ゲスト
結合: 18年前
投稿: 5
Topic starter  

返信が遅くなって申し訳ございません。
おかげで目的の動きをするプログラムを組むことができました。
ソースもさることながら、カラーインデックスのプロパティ値一覧表が
最高に役に立ちました。本当にありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました