値がその左のセルの値と異なる場合にセルの色が変わるように条件付き書式設定をしようとしています(各列は月で、各行は特定のオブジェクトの費用です。監視したい数か月で価格が簡単に変更されます。)
セルごとにそれを実行し、フォーマットドラッグできますが、一般的な数式をワークシート全体に適用したいと思います。
ありがとう!
=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)
最も互換性のある最短バージョンは次のとおりです。
=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を使用しなければならない場合は、手間がかかりません。
条件付き書式を作成するとき、必要なもの(シート全体)に適用する範囲を設定し、relative数式($
記号を削除)を入力します左上隅のフォーマット。
それに応じて、Excelは残りのセルに書式設定を適切に適用します。
この例では、B1から始まる左セルはA1になります。それを使用するだけで、高度な式は必要ありません。
より高度なものを探している場合は、column()
、row()
、およびindirect(...)
を試してみてください。
セル参照を変更してR1C1表記を使用する場合([ツール]、[オプション]、[全般]タブ)、簡単な表記を使用して任意のセルに貼り付けることができます。
今、あなたの式は単純です:
=RC[-1]
非常に長い文章を書く代わりに:
=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)
あなたは簡単に書くことができます:
=OFFSET(*Name of your Cell*,0,-1)
したがって、たとえば、Cell 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
A1セルに入力、次の式で:
=IF(COLUMN(A1)=1;"";OFFSET(A20;0;-1))&"1"
次に右に自動拡張すると、
1| A | B | C | ect ect
2| 1| 11| 111| ect ect
オフセットが使用可能なセルの範囲外の場合、#REF!エラー。
お楽しみください。
さらに簡単:
=indirect(address(row(), column() - 1))
OFFSETは、現在の参照に関連する参照を返します。したがって、間接的に正しい参照が返された場合、それは必要ありません。
不揮発性の答えを探している人は、名前付き式でINDEX関数を使用してこれを実現できます。
Name Manager
(Ctrl + F3)を開きますNew
をクリックしますScope:
には、Workbook
を選択しますRefers to:
に式を入力します。
=INDEX(!A1:!A2, 1)
OK
をクリックしてName Manager
を閉じます
これにより、Excelは常に現在のセルのすぐ左側の値を参照し、異なるセルが選択されると動的に変化します。名前が単独で使用される場合、セルの値を提供しますが、範囲内では参照を使用します。 この回答 アイデアのセル参照についての功績。
なぜ単に使用しないのですか:
=ADDRESS(ROW(),COLUMN()-1)
私は常に「左のセル」を参照したいのですが、非揮発性の方法で(OFFSET、INDIRECTおよび同様の災害なしで)常に参照したかったため、このスレッドに出くわしました。上下にウェブを見ると、答えはありません。 (このスレッドは実際には答えを提供しません。)少しいじくり回した後、私はこの驚くべき方法につまずきました。
E6の開始値が100であるとします。 F5にこの値、たとえば5のデルタを入力するとします。F6= E6 + F5で継続値(105)を計算します。別のステップを追加する場合は、簡単です。列Fを列Gにコピーし、G5に新しいデルタを入力するだけです。
これは私たちが定期的に行うことです。各列には日付があり、これらの日付は時系列である必要があります(MATCHなどを支援するため)。私たちは一歩踏み出すのを忘れることがしばしばあります。ここで、FとGの間に列を挿入し(省略に追いつくため)、Fを新しいGにコピーする(継続式を再設定する)と仮定します。これは、全体的な災害のない短いです。試してみてください-H6は= F6 + H5で、(絶対に必要なため)= 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に挿入した継続値を参照します。
シート全体を選択し、[ホーム]> [スタイル-条件付き書式設定、新しいルール...]、数式を使用して、書式設定するセルを決定しますおよびこの式が真である値のフォーマット::
=A1<>XFD1
Format...、フォーマットの選択を選択し、 OK、 OK。
これが最も簡単な答えだと思います。
「名前」を使用してオフセットを参照します。
列(列A)を、合計を保持しているセル(セルA100など)に至るまでではなく、すべて合計する必要があるとします。これを行う:
(名前の作成時にA1参照を使用していると仮定します。R1C1は後で切り替えることができます)
= SUM(A1:OneCellAbove)
選択の条件付き書式設定を変更する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