webdevqa.jp.net

AND()関数を使用した条件付き書式設定

シートで条件付き書式を試しています。次の条件ステートメントに従って、特定の色でセルを塗りつぶす必要があります。

=AND((INDIRECT(ADDRESS(4;COLUMN()))>=INDIRECT(ADDRESS(ROW();4)));(INDIRECT(ADDRESS(4;COLUMN()))<=INDIRECT(ADDRESS(ROW();5))))

AND()関数内のステートメントを個別に試してみると、それらは機能しているように見えますが、関数内で一緒にすると、フォーマットが発生しません。

背景を次に示します。「現在の列」の行4には日付(DATE1)があります。 「現在の行」のD列とE列にも日付があります(DATE2とDATE3)。 DATE1がDATE2とDATE3の間にある場合、セルを色で塗りつぶします。

数式が機能しない理由がわかりません。どんな助けも大歓迎です。

更新(2011年12月13日):

この機能が必要なセルから呼び出す関数を実装しました。関数は整数値を返します。次に、条件付き書式設定では、セル内の整数のみが使用されます。このように、条件付き書式設定はそれほど複雑ではありません。 INDIRECT(ADDRESS(ROW(); COLUMN()))を実装する関数に渡します。したがって、相対セルおよび/または絶対セルで作業するときに必要なすべての情報があります。現在のセルを範囲として関数に渡す簡単な方法を知っていると素晴らしいでしょう。

注:ActiveCellは私には機能しないようです。関数の実行時までに選択されたセルのデータを使用します。それは私が探しているものではありません。もちろん、セル自体(A4、B7など)を渡すこともできますが、パフォーマンスの点で本当に重要かどうかはわかりません。

私の質問に答えてくれた皆さんに感謝します。

13
some user

AND()が条件付き書式を壊すのと同じ問題を抱えていました。私はたまたまANDを乗算として扱ってみましたが、うまくいきました! AND()関数を削除し、引数を掛けるだけです。 Excelはブール値をtrueの場合は1、falseの場合は0として扱います。この式をテストしたところ、うまくいくようです。

=(INDIRECT(ADDRESS(4,COLUMN()))>=INDIRECT(ADDRESS(ROW(),4)))*(INDIRECT(ADDRESS(4,COLUMN()))<=INDIRECT(ADDRESS(ROW(),5)))
33
James

より簡単な式を使用できます。それをテストするための新しいワークブックを作成しました。

Column A = Date1 | Column B = Date2 | Column C = Date3

列Aを強調表示し、条件付き書式設定式を入力します。

=AND(A1>B1,A1<C1)
4
Lee Tickett

それほど複雑ではない式で同様の問題が発生しました:

= If (x > A & x <= B) 

ANDを削除し、2つの比較を+と結合できることがわかりました

  = (x > A1) + (x <= B1)        [without all the spaces]

これが他の人のより複雑な比較に役立つことを願っています。

1
David

COLUMN()ROW()は、呼び出し元のセルに適用されるため、この方法では機能しません。条件付き書式設定では、暗黙的ではなく明示的にする必要があります。

たとえば、セルA1で始まる範囲でこの条件付き書式を使用する場合は、次を試してください。

`COLUMN(A1)` and `ROW(A1)`

Excelは、条件付き書式をcurrentセルに自動的に適合させます。

0
JMax

これはおそらくcolumn()およびrow()関数によるものです。条件付き書式でそれらがどのように適用されるかわかりません。この式の値を使用して新しい列を作成し、フォーマットのニーズに使用してみてください。

0
ivan

他の人が報告したのと同じ問題-Excel 2016を使用。tables;に対して条件式を適用すると、 AND、条件の乗算、および条件の追加が失敗しました。自分でTRUE/FALSEロジックを作成する必要がありました。

=IF($C2="SomeText",0,1)+IF(INT($D2)>1000,0,1)=0
0
Grampa Ken

私は現在、多くのレガシーコードを含むExcelアプリケーションを担当しています。このコードの最も遅い部分の1つは、6列の500行をループし、それぞれに条件付き書式設定式を設定することでした。数式は、セルの内容が空白ではないが名前付き範囲の一部を形成しない場所を識別するためのものです。したがって、元は次のように書かれたセル自体を2回参照します。

=AND(COUNTIF(<rangename>,<cellref>)=0,<cellref><>"")

明らかに、各列(範囲)のすべてのセルを一度に更新することにより、オーバーヘッドが大幅に削減されます。ただし、上記のように、ADDRESS(ROW()、COLUMN()、n)を使用してもこの状況では機能しません。つまり、これは機能しません。

=AND(COUNTIF(<rangename>,ADDRESS(ROW(),COLUMN(),1))=0,ADDRESS(ROW(),COLUMN(),1)<>"")

私は空白のワークブックで広範囲に実験しましたが、ISBLANKなどのさまざまな代替手段を使用して、これを回避する方法は見つかりませんでした。最後に、これを回避するために、2つのユーザー定義関数を作成しました(このサイトの他の場所で見つけたヒントを使用)。

Public Function returnCellContent() As Variant

  returnCellContent = Application.Caller.Value

End Function

Public Function Cell_HasContent() As Boolean

  If Application.Caller.Value = "" Then
    Cell_HasContent = False
  Else
    Cell_HasContent = True
  End If

End Function

条件式は次のとおりです。

=AND(COUNTIF(<rangename>,returnCellContent()=0,Cell_HasContent())

正常に動作します。

これにより、Excel 2010ではコードが5秒から1秒に高速化されました。このコードはデータがアプリケーションにロードされるたびに実行されるため、この節約は重要であり、ユーザーにとって顕著です。また、非常にクリーンで再利用可能です。

このサイトまたは他の場所ですべての状況をカバーする答えを見つけることができなかったので、これを投稿するのに時間がかかりましたが、上記のアプローチから利益を得る可能性のある他の人がいると確信しています更新するセルの数。

0
Rich Harding