web-dev-qa-db-ja.com

行の挿入/削除時にExcelの数式が変更されないようにする

私は、13枚のシートを使用して個人の予算用の予算ワークブックを作成しようとしています。合計で1枚、毎月12枚です。月刊シートの1行に行を挿入すると、数式が変更される理由が一目でわかりません。ここに私が持っている数式の1つの例があります:

=SUMIF(JUN!$G$2:$G$500,"Utilities", JUN!$D$2:$D$500)

シートの上部に行を挿入すると、2から3にインクリメントされ、計算が破棄されます。数式が変更されないようにロックする方法はありますか?それは信じられないほどイライラさせられます。

5
Mike

理解する必要があるのは、_$_で指定されている絶対参照の絶対性が絶対的に絶対的ではないことです;-)

その舌ひねりが邪魔になったので、説明しましょう。

絶対性は、数式をコピーして貼り付けるか埋めるときにのみ適用されます。絶対参照範囲の上の行または左の列を挿入すると、範囲のアドレスが「シフト」され、data範囲が指すようになります同じまま。

さらに、範囲のmiddleに行または列を挿入すると、新しい行/列を含むように範囲が拡張されます。したがって、データの行を範囲(テーブル)に「追加」するには、最初のデータ行の後にを挿入する必要があります。

現在のデータ範囲の上にデータ行aboveを追加できるようにする最も簡単な方法は、常にヘッダー行を持ち、実際の範囲にヘッダー行を含めることです。これは、cybernetic.nomadが このコメント で提案したソリューションです。


しかし、まだ問題が残っており、の後にデータ行が追加されますテーブルのend。データの最後の行の後の行に新しいデータを入力するだけでは機能しません。最後の行の後に行beforeを挿入することもしません。

これに対する最も簡単な解決策は、特別な「最後の」行を使用し、その行をデータ範囲に含め、常にbeforeを挿入して新しい行を追加することです。特別な列。

通常、行の高さを下げ、セルを適切な色で塗りつぶします。

Worksheet Screenshot

たとえば、完全な「最も単純な」式は次のようになります。

_=SUMIF(JUN!$G$1:$G$501,"Utilities",JUN!$H$1:$H$501)
_


同じ目標を達成する別の方法は、テーブル内のデータ量に自動調整する動的な数式を使用することです。正確な状況に応じて、正確にテーブルに対して実行できる内容に応じて、これにはいくつかの異なるバリエーションがあります。

通常の場合と同様に(たとえば、例)、テーブルがワークシートの先頭から始まり、1行のヘッダーがあり、データがギャップなく隣接している場合、単純な動的数式は次のようになります。

_=SUMIF(INDEX(JUN!$G:$G,2):INDEX(JUN!$G:$G,COUNTA(JUN!$G:$G)),"Utilities",INDEX(JUN!$H:$H,2):INDEX(JUN!$H:$H,COUNTA(JUN!$G:$G)))
_

これは、INDIRECT()を使用するよりも優れたソリューションです。

  1. 不揮発性であるため、ワークシートの計算が速くなり、
  2. テーブルの左側に列を挿入しても壊れません。

名前付き式 で使用することにより、動的式の手法をさらに改善できます。



もちろん、bestソリューションは テーブルを適切なテーブルに変換する を使用して- 構造化参照

6
robinCTS