データをテーブルとしてフォーマットした場合、A1 フォーマット (A1、$C2 など) の代わりにテーブル式 ([@ABC] など) を使用できます。ただし、説明する 2 つのトリックがあります。
まず、前の行の表数式構文はありません。代わりに、Excel はデフォルトで A1 形式に戻りますが、以下に示すように、オフセット数式を使用して現在のセルを前の行に移動できます。ただし、この場合、「ABC」に +1 できないため、# 値エラーが返されます。
ABC
1 =OFFSET([@ABC],-1,0)+1
2 =OFFSET([@ABC],-1,0)+1
3 =OFFSET([@ABC],-1,0)+1
4 ....
したがって、2 番目のトリックは、if ステートメントを使用して値を初期化し、前の行の値 = 見出しの値かどうかを確認することです。同じ場合は初期値を使用し、それ以外の場合は増分を追加します。テーブルの名前が Table1 であると仮定することに注意してください
ABC
1 =IF(OFFSET([@ABC],-1,0)=Table1[[#Headers],[ABC]],42,OFFSET([@ABC],-1,0)+1)
2 =IF(OFFSET([@ABC],-1,0)=Table1[[#Headers],[ABC]],42,OFFSET([@ABC],-1,0)+1)
3 =IF(OFFSET([@ABC],-1,0)=Table1[[#Headers],[ABC]],42,OFFSET([@ABC],-1,0)+1)
4 ....
以下のように、初期値をテーブル外のセルに設定して、初期値 ($A$1 など) とインクリメント ($A$2 など) を定義できることに注意してください。
ABC
1 =IF(OFFSET([@ABC],-1,0)=Table1[[#Headers],[ABC]],$A$1,OFFSET([@ABC],-1,0)+$A$2)
2 =IF(OFFSET([@ABC],-1,0)=Table1[[#Headers],[ABC]],$A$1,OFFSET([@ABC],-1,0)+$A$2)
3 =IF(OFFSET([@ABC],-1,0)=Table1[[#Headers],[ABC]],$A$1,OFFSET([@ABC],-1,0)+$A$2)
4 ....
私はこの IF OFFSET の組み合わせを、テーブルの反復とループに常に使用しています。
最初の行であるかどうかを判断する必要がある列がたくさんある場合は、最初の行であるかどうかを 1 つの列でテストし、残りの列をより単純な if で機能させることができます。たとえば、ABC は最初の行に true を返し、他の行には false を返し、DEF は初期値をインクリメントします
ABC DEF
1 =OFFSET([@ABC],-1,0)=Table1[[#Headers],[ABC]] =IF([@ABC],$A$1,OFFSET([@DEF],-1,0)+$A$2)
2 =OFFSET([@ABC],-1,0)=Table1[[#Headers],[ABC]] =IF([@ABC],$A$1,OFFSET([@DEF],-1,0)+$A$2)
3 =OFFSET([@ABC],-1,0)=Table1[[#Headers],[ABC]] =IF([@ABC],$A$1,OFFSET([@DEF],-1,0)+$A$2)
4 ....
それが役立つことを願っています