「CELLTOTHELEFT」を参照するExcelの数式


83

セルの左側のセルの値と値が異なる場合にセルの色が変わるように条件付き書式を設定しようとしています(各列は月、各行は特定のオブジェクトの費用です。監視したい数か月にわたって価格が簡単に変化します。)

セルごとに実行してフォーマットドラッグすることはできますが、一般的な数式をワークシート全体に適用したいと思います。

ありがとう!


3
...そして誰かがそれを探している場合...列を右に移動するために:=INDIRECT("RC[1]",0)
プログラムハンマー2014

これは非常に素晴らしい質問です。残念ながら、これを正しく理解しているかどうかはわかりません。元の投稿者は、条件付き書式を設定してからフォーマットペインタを各セルに貼り付けることなく、セルを変更することを望んでいました。行に月があり、列にバナナ、リンゴ、オレンジがあるとします。マトリックスには価格があります。前月から今月に価格が変更された場合、どうすれば自動的にセルを赤く着色することができるでしょうか。価格が下がった場合にセルを緑色に、次の場合に赤色にする自動方法もある場合
ブライアン

回答:


95
=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)

14
単純なA1またはRC [-1]相対参照の代わりに、めったに使用されない5つの使用法を調べる必要のある関数を使用しますか?それは、ワシントン州ワラワラに立ち寄ってブルックリンからブロンクスに旅行するようなものです!
ジョンマチン

5
代わりにこれを行わないのはなぜですか= INDIRECT(ADDRESS(ROW()、COLUMN()-1))
プロメテウス

1
「間接」には、(1)シングルスレッド、(2)揮発性(場合によってはカスケード-変更のたびにブック全体を再計算する必要がある)など、非常に多くの問題があります。パフォーマンスが重要な場合は使用しないでください。 。
ジョン・ジョセフ

条件付き書式では、ルールをとして設定しました="OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)=""xyz"""が、セルは書式設定されていません。どうしましたか?
ジッパー

78

最も互換性のある最短バージョンは次のとおりです。

=INDIRECT("RC[-1]",0)

「RC [-1]」は、左側の1列を意味します。「R [1] C [-1]」は左下です。

2番目のパラメーター0は、最初のパラメーターがR1C1表記を使用して解釈されることを意味します。

その他のオプション:

=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)

私の意見では長すぎます。ただし、相対値が動的である/別のセルから派生している場合に役立ちます。例えば:

=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0, A1)

最も簡単なオプション:

= RC[-1]

オプションを使用してR1C1表記をオンにする必要があるという欠点があります。これは、他の人がExcelを使用する必要がある場合は使用できません。


11

条件付き書式を作成するときは、必要なもの(シート全体)に適用する範囲を設定してから、左上隅のみを書式設定する場合と同様に、相対式を入力します($記号を削除します)。

Excelは、それに応じて残りのセルにフォーマットを適切に適用します。

この例では、B1から開始して、左側のセルはA1になります。それを使用するだけです-高度な式は必要ありません。


あなたは、より高度な何かを探しているなら、あなたはで遊ぶことができcolumn()row()indirect(...)


7

R1C1表記を使用するようにセル参照を変更した場合([ツール]、[オプション]、[全般]タブ)、単純な表記を使用して任意のセルに貼り付けることができます。

今、あなたの公式は単純です:

=RC[-1]

5

非常に長い文章を書く代わりに:

=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)

あなたは単に書くことができます:

=OFFSET(*Name of your Cell*,0,-1)

したがって、たとえば、セルB2に書き込むことができます。

=OFFSET(B2,0,-1)

セルB1を参照する

それでもジェイソン・ヤングに感謝します!私はあなたの答えなしにこの解決策を思いつくことはなかっただろう!


2
これは役に立ちません。セルがB2であることがすでにわかっている場合は、左側のセルにB1を書き込むだけで、オフセットをまったく使用しないでください。重要なのは、完全に一般的なことをすることです。
マシューリード

1
どのセルから開始するかがわかっていると非常に便利です。たとえば、= OFFSET(B2,0、A2)のように、実行するオフセットのみが動的です。それは私がそれを使用した文脈でした。
Sam Fed

これが私が探していた答えです!行全体を表す単一のセルを選択し、その行のパラメーターを使用するようにすべてを自動的に変更できるようにしたかったのです。ありがとう!
BT

1

A1セルに次の数式を入力します。

 =IF(COLUMN(A1)=1;"";OFFSET(A20;0;-1))&"1"

次に、右に自動拡張すると、

 1|  A  |  B  |  C  |  ect ect
 2|    1|   11|  111|  ect ect

オフセットが使用可能なセルの範囲外の場合、#REFを取得します。エラー。

楽しんでいただければ幸いです。


1

さらに簡単:

=indirect(address(row(), column() - 1))

OFFSETは現在の参照を基準にした参照を返すため、indirectが正しい参照を返す場合は、それは必要ありません。


これは絶対にしないでください。INDIRECTは依存関係ツリーを壊します-それは惨事です。
Ollie2893

列の最初の行に応じて条件付き書式設定に役立つと思うこの関数を発見しました。RC []表記がそのために機能するかどうかわからない
narrowtux

1

作成するときにユーザー定義関数を、私は他の回答が機能を含むことが判明OFFSETしてINDIRECT適用することはできません。

代わりに、使用する必要があります Application.Callerして、ユーザー定義関数(UDF)が使用されているセルを参照する必要があります。2番目のステップでは、列のインデックスを対応する列の名前に変換します。
最後に、アクティブなワークシートの範囲関数を使用して、左側のセルを参照できます

Function my_user_defined_function(argument1, argument2)
    ' Way to convert a column number to its name copied from StackOverflow
    ' http://stackoverflow.com/a/10107264
    ' Answer by Siddarth Rout (http://stackoverflow.com/users/1140579/siddharth-rout)
    ' License (if applicable due to the small amount of code): CC BY-SA 3.0
    colName = Split(Cells(, (Application.Caller(1).Column - 1)).Address, "$")(1)

    rowNumber = Application.Caller(1).Row

    left_cell_value = ActiveSheet.Range(colName & rowNumber).Value

    ' Now do something with left_cell_value

0

選択範囲の条件付き書式を変更するVBAスクリプトを使用できます(条件と書式を適宜調整する必要がある場合があります)。

For Each i In Selection
i.FormatConditions.Delete
i.FormatConditions.Add Type:=xlCellValue, Operator:=xlLess, Formula1:="=" & i.Offset(0, -1).Address
With i.FormatConditions(1).Font
    .Bold = True
End With
Next i

0

私は常に「左側のセル」を参照したかったので、このスレッドに出くわしましたが、重要なのは非揮発性の方法です(オフセット、間接、および同様の災害はありません)。ウェブを上下に見て、答えはありません。(このスレッドも実際には答えを提供していません。)少しいじった後、私はこのコミュニティと共有したい最も驚くべき方法に出くわしました:

E6の開始値が100であるとします。F5にこの値のデルタを入力するとします。たとえば5とします。次に、F6 = E6 + F5の継続値(105)を計算します。別のステップを追加する場合は、簡単です。列Fを列Gにコピーし、G5に新しいデルタを入力するだけです。

これは私たちが定期的に行っていることです。各列には日付があり、これらの日付は時系列である必要があります(MATCHなどを支援するため)。ステップに入るのを忘れてしまうことがよくあります。ここで、FとGの間に列を挿入し(省略に追いつくため)、Fを新しいGにコピーするとします(継続式を再入力するため)。これは、完全な災害の短いものではありません。試してみてください-H6は= F6 + H5と表示し、NOT(絶対に必要なため)= G6 + H5と表示します。(新しいG6は正しいでしょう。)

これを機能させるために、F6 = index($ E6:F6; 1; columns($ E1:F1)-1)+ F5という最も驚くべき方法でこの平凡な計算を難読化することができます。右にコピーすると、G6 = index($ E6:G6; 1; columns($ E1:G1)-1)+ G5が得られます。

これは決してうまくいかないはずですよね?循環参照、明らかに!それを試してみて、驚いてください。Excelは、INDEXの範囲は再計算しているセルにまたがっていますが、そのセル自体はINDEXによってアドレス指定されていないため、循環参照を作成しないことを認識しているようです。

だから今、私は家にいて乾いている。FとGの間に列を挿入すると、必要なものが正確に得られます。古いHの継続値は、新しいGに挿入した継続値を参照します。



0

名前付き数式「LeftCell」を作成します

揮発性のない答えを探している人は、名前付き数式でINDEX関数を使用することでこれを実現できます。

  1. セルA2を選択

  2. 開くName Manager(Ctrl + F3)

  3. クリック New

  4. 「LeftCell」(または任意の名前)という名前を付けます

  5. についてはScope:、を選択しますWorkbook

  6. ではRefers to:、次の式を入力します。

    =INDEX(!A1:!A2, 1)

  7. クリックしOKて閉じるName Manager

これにより、Excelは常に現在のセルのすぐ左にある値を確認し、異なるセルが選択されると動的に変化します。名前を単独で使用すると、セルの値が提供されますが、範囲内では参照が使用されます。アイデアのセル参照に関するこの回答の功績です。


0

これが最も簡単な答えだと思います。

「名前」を使用してオフセットを参照します。

列(列A)を、合計を保持しているセル(たとえば、セルA100)まで、ただし含まない範囲で合計するとします。これを行う:

(名前を作成するときにA1参照を使用していると仮定します。後でR1C1に切り替えることができます)

  1. 一番上の行以外のシートの任意の場所をクリックします-セルD9と言います
  2. 「OneCellAbove」などの名前付き範囲を定義しますが、「RefersTo」ボックスを「= D8」(引用符なし)で上書きします。
  3. これで、CellA100で数式を使用できます
    = SUM(A1:OneCellAbove)

-1

シート全体と[ホーム]> [スタイル]-[条件付き書式]、[新しいルール...]を選択してください。数式を使用して、書式設定するセルを決定し、この数式が当てはまる値書式設定します

=A1<>XFD1

Format...、書式設定の選択肢を選択しOKOK

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.