14

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

=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 など) を渡すこともできますが、パフォーマンスの点で本当に重要かどうかはわかりません。

私の質問に答えてくれた皆さん、ありがとう。

4

7 に答える 7

41

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

=(INDIRECT(ADDRESS(4,COLUMN()))>=INDIRECT(ADDRESS(ROW(),4)))*(INDIRECT(ADDRESS(4,COLUMN()))<=INDIRECT(ADDRESS(ROW(),5)))
于 2012-02-15T23:13:32.803 に答える
4

はるかに単純な式を使用できます。テスト用に新しいワークブックを作成しました。

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

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

=AND(A1>B1,A1<C1)
于 2011-12-12T11:38:55.650 に答える
1

それほど複雑ではない式でも同様の問題がありました。

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

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

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

これが、それほど複雑でない比較で他の人に役立つことを願っています.

于 2013-06-24T14:21:24.353 に答える
0

私は現在、多くのレガシー コードを含む 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 秒に高速化されました。このコードは、データがアプリケーションにロードされるたびに実行されるため、この節約は重要であり、ユーザーにとって顕著です。また、非常にクリーンで再利用可能です。

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

于 2015-04-03T13:18:19.460 に答える
0

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

たとえば、 cell で始まる範囲でこの条件付き書式を使用する場合は、次のようにしますA1

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

Excel は、条件付き書式を現在のセルに自動的に適応させます。

于 2011-12-12T14:36:30.510 に答える
0

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

于 2011-12-12T11:34:23.663 に答える