値がその左のセルの値と異なる場合にセルの色が変わるように、条件付き書式を設定しようとしています (各列は月、各行は特定のオブジェクトの費用です。監視したい数か月で価格が簡単に変化します。)
セルごとに実行してフォーマットドラッグすることはできますが、一般的な数式をワークシート全体に適用したいと考えています。
ありがとう!
値がその左のセルの値と異なる場合にセルの色が変わるように、条件付き書式を設定しようとしています (各列は月、各行は特定のオブジェクトの費用です。監視したい数か月で価格が簡単に変化します。)
セルごとに実行してフォーマットドラッグすることはできますが、一般的な数式をワークシート全体に適用したいと考えています。
ありがとう!
=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 を使用する必要がある場合には使用できません。
条件付き書式を作成するときは、必要なもの (シート全体) に適用する範囲を設定し、左上隅のみを書式設定する場合と同様に、相対数式を入力します (記号を削除します)。$
それに応じて、Excel は書式設定を残りのセルに適切に適用します。
この例では、B1 から開始すると、左側のセルは A1 になります。それを使用するだけです。高度な数式は必要ありません。
より高度なものを探している場合はcolumn()
、 、row()
、およびをいじることができますindirect(...)
。
R1C1表記を使用するようにセル参照を変更した場合([ツール]、[オプション]、[全般]タブ)、単純な表記を使用して任意のセルに貼り付けることができます。
今、あなたの公式は単純です:
=RC[-1]
非常に長いものを書く代わりに:
=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)
あなたは簡単に書くことができます:
=OFFSET(*Name of your Cell*,0,-1)
したがって、たとえば、セルB2に書き込むことができます。
=OFFSET(B2,0,-1)
セルB1を参照するには
それでもジェイソン・ヤングに感謝!! あなたの答えがなければ、私はこの解決策を思い付くことはなかったでしょう!
User Defined Functionを作成するときに、関数OFFSET
に関連する他の回答INDIRECT
が適用できないことがわかりました。
代わりにApplication.Caller
、ユーザー定義関数 (UDF) が使用されているセルを参照するために使用する必要があります。2 番目のステップでは、列のインデックスを対応する列の名前に変換します。最後に、アクティブなワークシートのRange 関数
を使用して左のセルを参照できます。
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! が返されます。エラー。
お楽しみください。
選択範囲の条件付き書式を変更する 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
私は常に「左のセル」を参照したかったので、このスレッドに出くわしましたが、非常に不安定な方法で(オフセット、間接、および同様の災害はありません)。Web を上下に調べても、答えはありません。(このスレッドも実際には答えを提供していません。) いくつかいじくり回した後、私はこのコミュニティと共有したい最も驚くべき方法に出くわしました:
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 に挿入した継続値を参照します。