行ごとに、その行のサブセットである範囲を合計します。これは、列Bの「開始月」によって決定されます。まず、範囲のテキストによる説明を取得し、公式に表現します。これを行うために、我々は、私が直接それをする方法を知っていません12までの番号、1月の名前を変換する必要がありますが、それはから月数を抽出するのは簡単です、日付、と私たちは変えることができます数字(月の日)を追加して、月名を日付に追加します。例えば、
- 場合
B2
でMarch
、その後、
B2 & "1"
でありMarch1
、
MONTH(B2 & "1")
です3
。
- お使いのバージョンのExcelでこれが機能しない場合は、を試してください
MONTH(DATEVALUE(B2 & "1"))
。
OK、質問は月の月数 -3から月の数 +3 を合計するように求めます。たとえば、ユーザー2(行3)のB3
「4月」(つまり4)の場合、1月(1)から7月(7)までの合計が必要です(4-3 = 1および4 + 3 = 7であるため)。ただし、問題があります。必要な7か月のすべてがシートにあることが保証されているわけではありません。ユーザー1(行2)B2
は「3月」であるため、(前の年の)12月から6月が必要です。前年と翌年のデータは利用できないため、範囲を1月から6月に切り捨てます。これを行うには、開始月を1以上、終了月を12以下に強制します。
1つのモノリシック式でこれを行うと、実際には判読できなくなります。「ヘルパー列」を使用して中間値を保存する方がはるかに明確です。だから、設定
P2
–に対応する月番号B2
:
=MONTH(B2 & "1")
Q2
–範囲の開始月:
=MAX(P2-3, 1)
R2
–範囲の終了月:
=MIN(P2+3, 12)
選択したセルを強調表示することは、巧妙なトリックであり、実行したいことを実行していることを確認するのに役立ちます。の式で条件付き書式を設定する
=AND((COLUMN())-2>=$Q2, (COLUMN()-2)<=$R2)
データマトリックスでは、次のようになります。
(画像は、それ自体の大きなコピーへのリンクです。)
Excelでダイナミックレンジを生成するための優れたツールは次のOFFSET
関数です。
OFFSET(参照、行、列、[ 高さ ]、[ 幅 ])
これは、他のセルに対する相対的な位置によって、セルの長方形の領域(単一のセル、つまり1×1の長方形、場合によってはそれより大きい)を識別します。たとえばOFFSET(B2, 0, 1, , 6)
、範囲を識別するC2:H2
ため、
- セルから
B2
、0行下に移動し、1列右に移動するとC2
、
- 高さのデフォルトは1なので、範囲は完全に行2にあります。
- 幅6: 、
C2
、D2
、E2
、F2
、G2
およびH2
、またはC2:H2
短いため、6列です。
範囲の幅は、単に終了列番号から開始列番号を引いたものに1を加えたものです。したがって、求める結果は単純に
=SUM(OFFSET(B2, 0, Q2, , R2-Q2+1))
そして、それをColumnに入れることができますO
:
上記はテキスト形式であるため、コピーして貼り付けることができます。
Username StartMo January February March April May June July August September October November December The Answer
Andy March 102 202 402 1002 2002 4002 10002 20002 40002 100002 200002 400002 =SUM(OFFSET(B2,0,Q2,,R2-Q2+1)) =MONTH(B2&"1") =MAX(P2-3,1) =MIN(P2+3,12)
Bob April 103 203 403 1003 2003 4003 10003 20003 40003 100003 200003 400003 =SUM(OFFSET(B3,0,Q3,,R3-Q3+1)) =MONTH(B3&"1") =MAX(P3-3,1) =MIN(P3+3,12)
Charlie April 104 204 404 1004 2004 4004 10004 20004 40004 100004 200004 400004 =SUM(OFFSET(B4,0,Q4,,R4-Q4+1)) =MONTH(B4&"1") =MAX(P4-3,1) =MIN(P4+3,12)
テキストとしてWordに貼り付けてから、コピーしてExcelに貼り付ける必要がある場合があります。