セルの左側のセルの値と値が異なる場合にセルの色が変わるように条件付き書式を設定しようとしています(各列は月、各行は特定のオブジェクトの費用です。監視したい数か月にわたって価格が簡単に変化します。)
セルごとに実行してフォーマットドラッグすることはできますが、一般的な数式をワークシート全体に適用したいと思います。
ありがとう!
セルの左側のセルの値と値が異なる場合にセルの色が変わるように条件付き書式を設定しようとしています(各列は月、各行は特定のオブジェクトの費用です。監視したい数か月にわたって価格が簡単に変化します。)
セルごとに実行してフォーマットドラッグすることはできますが、一般的な数式をワークシート全体に適用したいと思います。
ありがとう!
回答:
=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)
="OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)=""xyz"""
が、セルは書式設定されていません。どうしましたか?
最も互換性のある最短バージョンは次のとおりです。
=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を使用する必要がある場合は使用できません。
R1C1表記を使用するようにセル参照を変更した場合([ツール]、[オプション]、[全般]タブ)、単純な表記を使用して任意のセルに貼り付けることができます。
今、あなたの公式は単純です:
=RC[-1]
非常に長い文章を書く代わりに:
=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)
あなたは単に書くことができます:
=OFFSET(*Name of your Cell*,0,-1)
したがって、たとえば、セルB2に書き込むことができます。
=OFFSET(B2,0,-1)
セルB1を参照する
それでもジェイソン・ヤングに感謝します!私はあなたの答えなしにこの解決策を思いつくことはなかっただろう!
作成するときにユーザー定義関数を、私は他の回答が機能を含むことが判明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
私は常に「左側のセル」を参照したかったので、このスレッドに出くわしましたが、重要なのは非揮発性の方法です(オフセット、間接、および同様の災害はありません)。ウェブを上下に見て、答えはありません。(このスレッドも実際には答えを提供していません。)少しいじった後、私はこのコミュニティと共有したい最も驚くべき方法に出くわしました:
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に挿入した継続値を参照します。
使用しない理由:
=ADDRESS(ROW(),COLUMN()-1)
揮発性のない答えを探している人は、名前付き数式でINDEX関数を使用することでこれを実現できます。
セルA2を選択
開くName Manager
(Ctrl + F3)
クリック New
「LeftCell」(または任意の名前)という名前を付けます
についてはScope:
、を選択しますWorkbook
ではRefers to:
、次の式を入力します。
=INDEX(!A1:!A2, 1)
クリックしOK
て閉じるName Manager
これにより、Excelは常に現在のセルのすぐ左にある値を確認し、異なるセルが選択されると動的に変化します。名前を単独で使用すると、セルの値が提供されますが、範囲内では参照が使用されます。アイデアのセル参照に関するこの回答の功績です。
これが最も簡単な答えだと思います。
「名前」を使用してオフセットを参照します。
列(列A)を、合計を保持しているセル(たとえば、セルA100)まで、ただし含まない範囲で合計するとします。これを行う:
(名前を作成するときにA1参照を使用していると仮定します。後でR1C1に切り替えることができます)
= SUM(A1:OneCellAbove)
=INDIRECT("RC[1]",0)