ボックスタイプのカレンダー作成方法の例
A1セルに日付を入力するだけで、月毎のカレンダーを作成してみましょう。
ここで説明している数式は、第1週の日曜日を求めています。
横方向へは+1、縦方向は+7とすることでボックス型のカレンダーが作成できます。
該当しない「月」の日付部分はIF関数で「""」を返すような仕組みです。
A1セルに表示する月の日付を入力します。2006年11月なら「2006/11/1」と1日の日付と入力します。
[ホーム]タブの数値グループにあるダイアログボックス起動ツールをクリックします。
または、ショートカットキー [Ctrl]+[1]キーでセルの書式設定を開くことができます。
セルの書式設定で[表示形式]タブを選択します。
A1セルの表示形式をユーザー定義で「yyyy"年"m"月"」とします。
A2セルに「日」と入力し、右方向へオートフィルでコピーします。
A3セルに「=$A$1-WEEKDAY($A$1)+COLUMN(A1)+7*(ROW(A1)-1)」と入力し、G3セルまでオートフィルでコピーします。
更に(A3:G3が選択された状態で)8行目までオートフィルでコピーします。
この数式のCOLUMN(A1)とROW(A1)のA1は数値の「1」が必要なのでそれぞれA1から始めています。
この部分は数式を入力するセル番地とは一切関係がありませんのでご注意ください。
列方向へ1,2,3・・・と連続するような数値にするためにCOLUMN関数でCOLUMN(A1)としています。
同様に、行方向へ1,2,3・・・と連続するような数値にするためにROW関数でROW(A1)としています。
COLUMN関数は列番号を返すので「A」であればよく、A1でもA10でもA100でもよいことになります。
ROW関数は行番号を返すので「1」であればよく、B1でもAA1でもIV1でもよいことになります。
月初め(1日)の曜日をWEEKDAY($A$1)で求めます。
1日が日曜日なら「1」、月曜日なら「2」・・・、土曜日なら「7」が返されます。
=$A$1-WEEKDAY($A$1)+1 とすることで1行目の日曜日の日付を求めることができます。
(例では2006/10/29を求めます)
日曜日の日付はWEEKDAY関数で求めた値-1 となりますので、
=$A$1-(WEEKDAY($A$1)-1)となるのですが、括弧を外して =$A$1-WEEKDAY($A$1)+1としています。
日曜日は+1、月曜日は+2、火曜日は+3・・・とするため・・・つまり、同一行では、右へは+1すればよいので、
=$A$1-WEEKDAY($A$1)+COLUMN(A1) としました。
COLUMN(A1)を右方向(列方向)へコピーすることで+1、+2、+3・・・・といったことができています。
下の行方向は、+7ずつ増やせばよいので、+7*(ROW(A1)-1) を加えます。
+7*ROW(A1)で+7ずつ増やすことができますが、第1週は0、第2週は7・・・とするため、+7*(ROW(A1)-1) としています。
これらを合成すると、「=$A$1-WEEKDAY($A$1)+COLUMN(A1)+7*(ROW(A1)-1)」となります。
ここで説明している数式は、第1週の日曜日を求めています。
横方向へは+1、縦方向は+7とすることでボックス型のカレンダーが作成できます。
該当しない「月」の日付部分はIF関数で「""」を返すような仕組みです。
A1セルに表示する月の日付を入力します。2006年11月なら「2006/11/1」と1日の日付と入力します。
[ホーム]タブの数値グループにあるダイアログボックス起動ツールをクリックします。
または、ショートカットキー [Ctrl]+[1]キーでセルの書式設定を開くことができます。
セルの書式設定で[表示形式]タブを選択します。
A1セルの表示形式をユーザー定義で「yyyy"年"m"月"」とします。
A2セルに「日」と入力し、右方向へオートフィルでコピーします。
A3セルに「=$A$1-WEEKDAY($A$1)+COLUMN(A1)+7*(ROW(A1)-1)」と入力し、G3セルまでオートフィルでコピーします。
更に(A3:G3が選択された状態で)8行目までオートフィルでコピーします。
この数式のCOLUMN(A1)とROW(A1)のA1は数値の「1」が必要なのでそれぞれA1から始めています。
この部分は数式を入力するセル番地とは一切関係がありませんのでご注意ください。
列方向へ1,2,3・・・と連続するような数値にするためにCOLUMN関数でCOLUMN(A1)としています。
同様に、行方向へ1,2,3・・・と連続するような数値にするためにROW関数でROW(A1)としています。
COLUMN関数は列番号を返すので「A」であればよく、A1でもA10でもA100でもよいことになります。
ROW関数は行番号を返すので「1」であればよく、B1でもAA1でもIV1でもよいことになります。
月初め(1日)の曜日をWEEKDAY($A$1)で求めます。
1日が日曜日なら「1」、月曜日なら「2」・・・、土曜日なら「7」が返されます。
=$A$1-WEEKDAY($A$1)+1 とすることで1行目の日曜日の日付を求めることができます。
(例では2006/10/29を求めます)
日曜日の日付はWEEKDAY関数で求めた値-1 となりますので、
=$A$1-(WEEKDAY($A$1)-1)となるのですが、括弧を外して =$A$1-WEEKDAY($A$1)+1としています。
日曜日は+1、月曜日は+2、火曜日は+3・・・とするため・・・つまり、同一行では、右へは+1すればよいので、
=$A$1-WEEKDAY($A$1)+COLUMN(A1) としました。
COLUMN(A1)を右方向(列方向)へコピーすることで+1、+2、+3・・・・といったことができています。
下の行方向は、+7ずつ増やせばよいので、+7*(ROW(A1)-1) を加えます。
+7*ROW(A1)で+7ずつ増やすことができますが、第1週は0、第2週は7・・・とするため、+7*(ROW(A1)-1) としています。
これらを合成すると、「=$A$1-WEEKDAY($A$1)+COLUMN(A1)+7*(ROW(A1)-1)」となります。
※コメント投稿者のブログIDはブログ作成者のみに通知されます