「またまたExcelで教えてください。

日付を自動的に当日にすることは出来るのですが、どうしても末日にすることが出来ず、毎回入力しなくてはなりません。
自動的に末日にしたり毎月第2金曜日にしたりしたいのですが、、、出来ますか?

例えば第3木曜日だったら3月に開いた時に自動的に「3月15日」になったり。
末日なら3月に開いたら自動的に末日である日の「3月31日」になったり。それで末日が土日だったらこれまた自動的に金曜日に出来たらいいなぁと。。。
3月は31日が土曜日なので末日になるようにしてても土日だから自動的に30日になってほしい。

可能でしたら是非教えてください。そして初心者並みに解りやすくお願いします。 」
という質問をさせていただき、いろいろ教えていただいたのですが。。。祝日を考え忘れていました。グスン (ノ(ェ)'。)
土日祝祭日にかかる月は出てくると思いますので(何年先でも)それも自動的に平日になるように出来る方法を教えてください。
可能でしたら土日祝祭日の前日若しくは前前日と翌日、若しくは翌々日の両方を初心者レベルで解りやすくお願いします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2007/02/25 20:59:59
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答5件)

id:EddyYamanaka No.1

回答回数385ベストアンサー獲得回数1

ポイント20pt

=DATE(YEAR(TODAY()),MONTH(TODAY())+1,0)

つまり「来月の0日」でどうでしょう。」

id:kanachan

???来月の0日?とはどういう意味でしょうか

2007/02/25 17:00:08
id:EddyYamanaka No.2

回答回数385ベストアンサー獲得回数1

ポイント20pt

先程の回答は削除してください。

id:SALINGER No.3

回答回数3454ベストアンサー獲得回数969

ポイント20pt

祝日は無理とか言ってる人いるけど、それはExcelの関数に無いだけ。

祝日が変わるという意見も、現在の祝日を調べる関数を作ればいいだけ。

http://www.vector.co.jp/soft/win95/business/se189574.html

この方の祝日関数を使えば楽です。

以下このWhatDay()関数をコピーして

その月の最後の平日を求めるユーザー定義関数を作ればこんな感じ。

Function Heijitu() As Date
    Dim mydate As Date
    mydate = DateSerial(Year(Now()), Month(Now()) + 1, 1) - 1
    If WhatDay(mydate) = 0 Then
        Heijitu = ""
    ElseIf WhatDay(mydate) = 1 Then
        Heijitu = mydate
    Else
        While WhatDay(mydate) <> 1
            mydate = mydate - 1
        Wend
        Heijitu = mydate
    End If
End Function
id:kanachan

ごめんなさい!

どこに関数をどのように入れたら良いか解らなくて…

もう少し詳しいと助かります。

2007/02/25 17:52:50
id:SALINGER No.4

回答回数3454ベストアンサー獲得回数969

ポイント20pt

まず、VBAの始め方から

http://www.macrospread.com/introduction/images/VBA_Introduction_...

の標準モジュールにダウンロードしてきたエクセルのファイルのWhatDay()関数の全文をコピーして私の書いたコードもコピーします。

こんな感じ

Function WhatDay(日付) As Integer
・
・
・
End Function

Function Heijitu() As Date
・
・
・
End Function

そして、呼び出したいセルの数式に[=Heijitu()]と入れるだけ。

ついでにそのセルの書式設定を日付にしてね。

id:kanachan

…やっぱり途中で解らなくなります。Whatday()関数がどれかが解らなくてどこのセルに何の式を入れるのか?VBAも開いたはいいですが、何を入れるのか使った事がなくて不明です、、、

すみません

2007/02/25 19:03:26
id:Baku7770 No.5

回答回数2832ベストアンサー獲得回数181

ポイント20pt

 まず、末日ですが翌月1日の前日となりますので

=Today()+32-day(today())……a1

とでもすれば、今月32日(計算上の日付)が求まりますので、

=date(year(a1),month(a1),1)-1

が末日となります。ここまでを1本の式にしたければ、

=date(year(Today()+32-day(today())),month(Today()+32-day(today())),1)-1……b1

となります。

 で、この日が土日だったら除くのなら

=if(weekday(b1,2)>5,b1-weekday(b1,2)+5,b1)

で金曜日になります。

 第2金曜日はその月が土曜から始まる場合と、それ以外の曜日で始まる場合に分けます。

 土曜日で始まる場合は、6日が第2金曜日ですから、date関数を使えば簡単に作れます。

 それ以外の曜日なら、今月1日をc1とすれば

=c1+13-weekday(c1,1)

で計算できます。

id:kanachan

すみません、、、初心者レベルでお願いできますか?Excelは使用してますが関数はせいぜいSUMくらいで他は殆ど使用したことのないもので、、、

お恥ずかしい限りですがサッパリ解りません。

2007/02/25 19:06:40
  • id:luxon
    前の質問からの続きでコメント粘着です(笑)
    祝日対応というのは、月末だけでなく「第3水曜と言われたけれど、祝日なので前日(または翌日)にする」ってことも含めてですね。前日にずらした結果、それが日曜になったらさらに金曜に、というのもあるので、やはり workday を使って祝日テーブルを参照させることになりますかね。
    証券市場(大証)の休業日データ。
    http://www.ose.or.jp/profile/pr_gaky.html
  • id:kanachan
    すみません、、、workdayってなんでしょう???
  • id:taknt
    ま、祝日のデータベースを作って利用すればいいだけだけど
    そうしたら VBAを使わないと ちょっと無理。
  • id:taknt
    考慮するんだったら祝日だけではないと思う。
    ほかにも、年末年始や 会社独特の休日もあるはず。
    たとえば 創立記念日で休みとか。
    それらの 休みとなる日の一覧を どこかにもっておかないと
    処理できない。
  • id:kanachan
    ・・・という事は私には荷が重過ぎる状態ですよね><
    創立記念日なんて素敵な休みはないからいいけど。年末年始までは考えも付きませんでした。
    ただその時だけのものだから使用後また元に戻すということは出来るのかな?とは思いました。(保存せずに終了するとか)
    でも、、、やっぱりPCできないと厳しい状況ですよね。。。(・・,)グスン
  • id:SALINGER
    5の方は祝日には触れてないですね。
    質問文から会社の休日まで考慮する必要はあったかな?
    会社員かどうかも分かりせんしw
    祝日一覧なら毎年作り直さなくてはなりませんので作る気はありませんが。
    一応できるということだけ分かってもらえればいいです。
  • id:luxon
    kanachanさん、見てられないので書きますが(笑)
    ・前回の質問のURL
    http://q.hatena.ne.jp/1172380952
    を質問文に書いて、そちらを参照してから回答してもらわないと、最初のレベルまで(というか、それよりも下...)下がった回答が付いちゃいます。
    ・祝日を考慮しないという条件ならば、前回の回答とコメントで結論が出ています(eomonthを使うのがよいですね)。
    ・したがって、今回の回答では、SALINGERさん以外、問題外です。
    ・takntさんのおっしゃるとおり、祝日データはExcelというプログラムの内部には存在しないので、自分で祝日データをどこかに入力するか(私が口走ったworkday関数を使う方法)、もっと洗練された関数(SALINGERさんが紹介してくださったような)を使うかしなければなりません。
    通常の関数だけでは★絶対に無理★なので、上記のどちらかしかありません。それ以外の「簡単そうに見える方法」に惑わされないでくださいね。
    前回の回答と「SALINGER方式」を組み合わせれば、どちらも解決しそうなんだけど...私は年寄りで気力が(よぼよぼ)
  • id:luxon
    すみません、workday関数の機能を間違って覚えていました(汗)
    やっぱりSALINGERさんのおっしゃる方法しかなさそうですね。ごめんなさい。
  • id:kanachan
    Luxonさん
    本当に(汗
    自分のレベルの低さには恥ずかしい限りです(恥
    でも、皆様が手を尽くして教えてくださっているので本当にありがたいです。

    確かに「簡単そうに見える」っていうものに惑わされている気がします。マクロから勉強しないと理解できないかもしれませんね><
    私の頭の中「マクロって何??」の世界なので・・・

    本当にお手数おかけしてすみません<m(__)m>
  • id:kaiton
    もう、終了していますが
    =WORKDAY(DATE(YEAR(TODAY()),MONTH(TODAY())+1,1),-1,$E$1:$E$4)
    の数式でどうでしょうか?
    DATE(YEAR(TODAY()),MONTH(TODAY())+1,1) 来月の1日の日付を求めています。

    今回はWORKDAY関数で -1 日後(つまり前日)で土日・祝祭日を除く日を求めます。
    祝祭日は、月末に係るものだけをE1:E4に日付を指定します。(4/29,12/29,12/30,12/31等、5日以上あるならE4は増やしてください。)

    WORKDAY関数は、この説明をみてください。
    http://pc.nikkeibp.co.jp/pc21/tech/excel36/22/index.shtml
    http://www.relief.jp/itnote/archives/001105.php

    PS.
    E1:E4は、 =DATE(YEAR(TODAY()),4,29) 等とすると毎年修正する必要はなくなると思います。

    #1の方の回答の意味は
    http://www.relief.jp/itnote/archives/000490.php
    をみてみてください。エクセルの日付データは実際は数字で1日1ずつ増えていっています。

この質問への反応(ブックマークコメント)

トラックバック

  • kaitonの日記 2007-02-26 18:55:33
  • http://q.hatena.ne.jp/1172386603 にコメントで =WORKDAY(DATE(YEAR(TODAY()),MONTH(TODAY())+1,1),-1,$E$1:$E$4) とコメントしましたが、解説を日記で書いておきます。自分の備忘録がわり(^^;) 要件は満たしていると
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません