電子書籍の厳選無料作品が豊富!

万年カレンダーを作成する事になり以下の関数の解説を
しなければならなくなりました。。。
万年カレンダー作成者の説明では理解できず、
解説をしようにも出来ません。

その関数とやらがこれです。

=IF(MONTH(DATE($B$4,$B$5,1)+COLUMN()-COLUMN($F$7))=$B$5,COLUMN()-COLUMN ($F$7)+1,""

足りない頭で考えまくって出した答えが
「簡単に言うと、COLUMN関数は、【何列目であるか】を求める関数です。
【+COLUMN()-COLUMN($F$7)】これはDATE関数で求めた(年,月,日)がどの
場所からスタートするのかの基準を表します。
この場合、F列の7行目にDATEが始まる。ということになります。
その後に続く【=$B$5,COLUMN()-COLUMN($F$7)+1,""】は
左上の月の部分(今回であれば2月)に+1つきされると3月になるが、
その場合は表示しない。という意味になります。
因みに、【""】とは空欄(表示しない)という意味です。」

と解説したところ、全然違うとのこと・・・。
これ以上上手く説明出来る自信が有りません・・・・。
関数が得意な方、どうかお助け下さい!!!

「【至急】COLUMNについて・・・」の質問画像

A 回答 (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)))によって,各列の年/月/日の月を計算し,それが所定の月ではない列では""を計算します

一つ下のセルでは,各年/月/日の曜日文字列を計算します。一つ上のセルで年月日を計算していない(空白を計算している)セルでは,空白にします。


失礼しました。
    • good
    • 0

No.2・3です!


何度もごめんなさい。

No.3の説明に間違いがありました。

>COLUMN()-COLUMN($F$7) は
7-7 となり「0」ということになります


>6-6 となり「0」ということになります

が正解です。
結論としてはNo.3と同じコトになります。m(__)m
    • good
    • 0

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
    • good
    • 1

こんにちは!


せっかく数式をお考えのようですが・・・
一例です。

シリアル値で操作し、表示形式のみを変える方法が何かと便利だと思いますので、

↓の画像で、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
「【至急】COLUMNについて・・・」の回答画像2
    • good
    • 0

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
と設定して使います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報