- ベストアンサー
【至急】万年カレンダー作成におけるCOLUMN関数の解説
- 万年カレンダー作成時に使用するCOLUMN関数の解説を求めています。
- 現在、COLUMN関数の使い方について理解できておらず、解説が必要です。
- 質問文章の関数は、年月日のスタート位置と表示条件を指定するためのものです。解説が必要です。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
回答No.1ですが,解答で示した数式に誤記がありました。 訂正: 私ならF7に =IF(MONTH(DATE($B$4,$B$5,COLUMN(A7)))=$B$5,DATE($B$4,$B$5,COLUMN(A7)),"") と記入し,表示形式のユーザー定義で d を設定して使います。 ついでにF8に =TEXT(F7,"aaa;;;") を記入して,右にコピーします。 #参考 COLUMN(A7) で,F列には「1」を計算します 右にコピーすることで,2,3,4…を計算します DATE($B$4,$B$5,COLUMN(A7)) で,F列には年/月/1日を,G列には年/月/2日…をそれぞれ計算します 表示形式によって,その日付から「日」だけを表示します MONTH(DATE($B$4,$B$5,COLUMN(A7)))によって,各列の年/月/日の月を計算し,それが所定の月ではない列では""を計算します 一つ下のセルでは,各年/月/日の曜日文字列を計算します。一つ上のセルで年月日を計算していない(空白を計算している)セルでは,空白にします。 失礼しました。
その他の回答 (4)
- tom04
- ベストアンサー率49% (2537/5117)
No.2・3です! 何度もごめんなさい。 No.3の説明に間違いがありました。 >COLUMN()-COLUMN($F$7) は 7-7 となり「0」ということになります は >6-6 となり「0」ということになります が正解です。 結論としてはNo.3と同じコトになります。m(__)m
- tom04
- ベストアンサー率49% (2537/5117)
No.2です! たびたびごめんなさい。 数式の説明のご質問だったのですね! どうも失礼しました。 すでにNo.1さんがおっしゃっている通りなのですが、 COLUMN()は 数式を入れたセルの列番号にないますので、 F7に数式を入れた場合、 COLUMN()-COLUMN($F$7) は 7-7 となり「0」ということになります。 すなわち、DATE($B$4,$B$5,1)から「0」を加えると 数式を入れたセルは DATE($B$4,$B$5,1) そのものですので 2012/2/1 のシリアル値が表示されます。 それをオートフィルで右にコピーするたびに COLUMN(G7)=8 column(H7)=9 ・・・となり それからCOLUMN($F$7))=常に「7」を引いていますので 結論として、オートフィルするたびに「1」ずつプラスしていくことになります。 すなわち COLUMN()-COLUMN($F$7) は COLUMN()-7 としても全く同じ結果になります。 ※ お示しの数式は必ず最初に数式を入れるセル番地の列番号にしないと全く機能しない数式になります。 数式を少しにアレンジして =IF(MONTH(DATE($B$4,$B$5,COLUMN(A1)))=$B$5,COLUMN(A1),"") とすれば、どのセルに入力しても大丈夫だと思います。 どうも長々と失礼しました。m(__)m
- tom04
- ベストアンサー率49% (2537/5117)
こんにちは! せっかく数式をお考えのようですが・・・ 一例です。 シリアル値で操作し、表示形式のみを変える方法が何かと便利だと思いますので、 ↓の画像で、B4セルの表示形式はユーザー定義から 0年 としておいて、数値のみ(2012)を入力 B5セルの表示形式もユーザー定義から 0月 としておいて月の数値のみを入力します。 F7セルの表示形式はユーザー定義から d としておき、 =IF(MONTH(DATE($B$4,$B$5,COLUMN(A1)))=$B$5,DATE($B$4,$B$5,COLUMN(A1)),"") という数式を入れます。 F8セルは =IF(F7="","",TEXT(F7,"aaa")) という数式を入れ、F7・F8セルを範囲指定 → F8セルのフィルハンドルでAJ列までオートフィルでコピーします。 これでB4・B5セルの数値を入れ替えるだけで何とかご希望に近い形にならないでしょうか? 余計なお世話だったらごめんなさいね。m(__)m
- keithin
- ベストアンサー率66% (5278/7941)
F7以降でも,別にDATEが計算で出てきてるわけじゃありません。 1.「COLUMN()-COLUMN ($F$7)」を使い,F列以右に「ゼロから始まる1,2,3…」の数字を計算します F列がゼロです。 2.COLUMN()-COLUMN ($F$7)+1を使い,F列以右に「1,2,3…」の数字を計算します 実際にF列に現れるのはこの部分です 3.「DATE($B$4,$B$5,1)+COLUMN()-COLUMN($F$7)」によって,指定年,指定月の1日にプラス「ゼロ,1,2…」を計算します F列はDATE(年,月,1)の年月日日付のゼロ日後,つまり年/月/1日,G列は1日後,つまり年/月/2日を計算しています 4.それをMONTH関数で計算して月を出し,当月ではない日付の列では""を計算させています 関数の組み合わせを「内側から」順に紐解いて,ご自分の言葉で言い換えてみて下さい。 #ダメを出すなら関数を書いた人が解説すればイイと,端から見てると思いますけどね。 私なら F列に =IF(MONTH(DATE($B$4,$B$5,COLUMN(A7))=$B$5,DATE($B$4,$B$5,COLUMN(A7)),"") と記入し,F7に書式メニューのセルの書式設定の表示形式のユーザー定義で d と設定して使います。