web-dev-qa-db-ja.com

ifステートメント(関数)で条件としてセルの色を使用する

セルのハイライト色に基づいて機能を実行するセルを取得しようとしています。

私が現在持っている機能は次のとおりです。

=IF(A6.Interior.ColorIndex=6,IF(ROUNDDOWN(IF(M6<3,0,IF(M6<5,1,IF(M6<10,3,(M6/5)+2))),0)=0,0,ROUNDDOWN(IF(M6<3,0,IF(M6<5,1,IF(M6<10,2,(M6/5)+2))),0)),IF(ROUNDDOWN(IF(M6<7,0,IF(M6<10,1,M6/5)),0)=0,0,ROUNDDOWN(IF(M6<7,0,IF(M6<10,1,M6/5)),0)))

そのすべてを読む必要はないので、ここにもっと簡単な例を示します

=IF(A6.Interior.ColorIndex=6,"True","False")

彼が返すのは#NAMEだけですか? 。セル内の関数としてこれを行う方法はありますか、VBAは絶対に必要ですか?

おかげで、

ヨルダン

11
1337Atreyu

VBA(Interior.ColorIndex)数式でエラーが表示される理由。

VBAなしでこれを行うことはできません。

Function YellowIt(rng As Range) As Boolean
    If rng.Interior.ColorIndex = 6 Then
        YellowIt = True
    Else
        YellowIt = False
    End If
End Function

ただし、これはお勧めしません。ユーザー定義のVBA関数(UDF)の使用方法ではありません。これらは、セルの色の書式設定を読み取れないExcel関数の動作を反映する必要があります。 (この関数は、Excelの将来のバージョンでは機能しない可能性があります。)

最初にセルを黄色にする元の条件(決定)に基づいて数式を作成することをお勧めします。または、Subプロシージャを実行してTrueまたはFalseの値を入力します(もちろん、これらの値は元のセルの書式設定にリンクされなくなります)。

6
Andy G

数式からセルの色を取得する方法はないと思います。最も近いものはCELL数式ですが、(少なくともExcel 2003の時点では)セルの色を返しません。

VBAを使用して実装するのは非常に簡単です。

Public Function myColor(r As Range) As Integer
    myColor = r.Interior.ColorIndex
End Function

次に、ワークシートで:

=mycolor(A1)
3
Joe

これはあなたの質問に直接対処するものではありませんが、実際にはExcelでセルの色でデータを並べ替えることができます(これにより、同じ方法ですべてのレコードに特定の色のラベルを付けるのが非常に簡単になり、したがってこのラベルの条件が変わります)。

Excel 2010では、[データ]-> [並べ替え]-> [セルの色]で並べ替えを選択して、これを行うことができます。

2
Nick M

フォントが黒の場合、別のExcelセルの値のみを表示する必要があるという同様の問題がありました。この関数を作成しました: `Option Explicit

関数blackFont(r As Range)As Boolean If r.Font.Color = 0 Then blackFont = True Else blackFont = False End If

終了関数 `

私のセルには次の式があります:=IF(blackFont(Y51),Y51," ")

これは、黒のフォントをテストし、黒のフォントがある場合にのみY51セルに値を表示するのにうまく機能しました。

1
Greg Barth

私が適用した唯一の簡単な解決策は、IF条件としてハイライトを行うプライマリ条件を再作成し、それをIF式で使用することです。このようなもの。ハイライトの状態に応じて、式は変更されますが、再作成する必要があると思います(たとえば、20を超えるハイライト)。

=IF(B3>20,(B3)," ")
0
emirjonb