[[20061108164506]] 『日付から、半期毎の期間を返したい』(一番干) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『日付から、半期毎の期間を返したい』(一番干)

 A列に日付が入っており、B列に2000年4月1日〜2000年9月30日なら「00年上期」、
 2000年10月1日〜2001年3月31日なら「00年下期」というふうに返していきたいのですが
 IF関数でやろうとした所、とてつもなく長くなってしまいそうだと気が付きました。
 下のように、半期毎に「**年上/下期」を返せる関数などありますでしょうか?
 よろしくお願いいたします。

  日付	   期
 04/11/29 04下期
 05/07/11	 05上期
 06/08/08	 06上期
 06/08/08	 06上期
 05/10/15	 05下期


 =IF(COUNT(A1),RIGHT(YEAR(A1+275)-1,2)&IF(OR(MONTH(A1)={4,5,6,7,8,9}),"上期","下期"),"")
 これでどうですか?
 (ROUGE)

 衝突しました。
 =IF(COUNT(A2)=0,"",IF(MONTH(EDATE(A2,-3))<=6,TEXT(A2,"yy上期"),TEXT(EDATE(A2,-3),"yy下期")))
 ちょっと短く。
 =IF(COUNT(A2)=0,"",TEXT(EDATE(A2,-3),IF(MONTH(EDATE(A2,-3))<=6,"yy上期","yy下期")))
(純丸)(o^-')b

 レスありがとうございました。
 ROUGE様の関数、すごいですね!うまくいきました!+275というのは何の基準なので
 しょうか?お手間でなければ教えて下さい。
 純丸様の関数も使わせて頂いたのですが、なぜか#NAME?のエラーがでてしまいます。
 EDATEという関数は初めてみるのですが、EXCEL2000でも対応しているのでしょうか?
 (一番干)

 EDATE関数を使うには、セットアップ プログラムを実行して分析ツールを組み込み、
 [ツール] メニューの [アドイン] コマンドを使ってその分析ツールを登録する必要があります。
 (dack)

 大変失礼しました。dackさん、フォローありがとうございます。
(純丸)(o^-')b

 >+275というのは何の基準なのでしょうか?
 4月〜12月の日数ですb
 (ROUGE)

 YEAR(A1-90) としたいが
 365-1月 2月 3月の日数を引いた数字
YEAR(A1+275)-1,  -1年 閏年を考慮し逆算した結果
(JJJ)
31+28+31を引けば 1月 2月 3月 前年になるが
31+29+31 の年を考慮
なら
 =IF(COUNT(A1),RIGHT(YEAR(A1+275)-1,2)&IF(INT((MONTH(A1)+2)/6)=1,"上期","下期"),"")
                                                        ^^^ずらしてみました
でも  ちょっと変更

 JJJさん、1月でも上期になってしまいませんか?(ROUGE)

 参考までに=TEXT()の三分岐を利用するものです。               (JOKEUP)

 =TEXT(TEXT(A2,"m;;"),"[<4]"""
 &TEXT(TEXT(A2,"y")-1,"00")&"""下期;[>9]"""
 &TEXT(A2,"y")&"""下期;"""&TEXT(A2,"y")&"""上期")

 >4月〜12月の日数ですb
勝手に、ROUGEさんのに補足・・・  と書き込んでたら衝突。。。

 4/1〜12/31 の日数は 275日です。[ ="2006/12/31"-"2006/4/1"+1 ]※どの年でも同じ。
3/31に +275日すると、同年の12/31になります。(1/1〜3/31は全て同年)
4/1に +275日すると、翌年の1/1になります。(4/1〜12/31は全て翌年)
これを利用し、YEAR(A1+275)-1 -1する事で、
1/1〜3/31は、入力された年の前年に、
4/1〜12/31は、入力された年を  年度の表記としています。

 JJJさん、
閏年の事を考えすぎて、勘違いされた思いますが、9/29(閏年除く)や9/30が下期になっちゃいます。

 ちなみに、私などが考えると、IF関数で
=IF(COUNT(A1),IF(MONTH(A1)<=3,RIGHT(YEAR(A1)-1,2)&"下期",IF(MONTH(A1)>=10,RIGHT(YEAR(A1),2)&"下期",RIGHT(YEAR(A1),2)&"上期")),"")
こんなのに・・・・www ながっ_orz
(sin)

 元の式をいじられた様なので、下記の点に関しては、無視して読んでください。
・sinの書き込み
 >閏年の事を考えすぎて、勘違いされた思いますが、9/29(閏年除く)や9/30が下期になっちゃいます。
・ROUGEさんの書き込み(またまた勝手に・・・)
 >1月でも上期になってしまいませんか?

 でないと、矛盾の悩みに陥ります。。。
(sin)

 ・・・凄すぎて着いていけてませんが、275日の回答と補足をどうもありがとう
 ございました。私などの関数初級者からすると、どこぞに下のような表を作って
 それをどうにかして返すのかと・・・。275日など全く考え付きもしませんでしたが 
 こんな表を作ってBからCの間ならAを返す・・・という関数などあるものでしょうか?
 皆様の論議の最中に割り込んでしまって(?)申し訳ありませんが、もし差し支えなければ
 今後の為に教えて下さい。(こちらなら私レベルでもできそうな気がしますので)

   A     B    C 
 04下期	04/10/01	05/03/31
 05上期	05/04/01	05/09/30
 05下期	05/10/01	06/03/31
 06上期	06/04/01	06/09/30

 (一番干)

 リスト表  sheet1!
	A	B
1	2006 	
2	2006/1/1	05下期
3	2006/4/1	06上期
4	2006/10/1	06下期
5	2007/1/1	06下期
6	2007/4/1	07上期
 リスト表作成数式 (A1にその年度入力)で下記数式で上記リスト
  A                         B
1  2006	
2  =DATE(A$1,1,1)	         =RIGHT(A$1-1,2)&"下期"
3  =DATE(A$1,4,1)	         =RIGHT(A$1,2)&"上期"
4  =DATE(A$1,10,1)	         =RIGHT(A$1,2)&"下期"
5  =DATE(A$1+1,1,1)	=RIGHT(A$1,2)&"下期"
6  =DATE(A$1+1,4,1)	=RIGHT(A$1+1,2)&"上期"
 sheet2で
 =IF(A1="","",VLOOKUP(A1,sheet1!$A$2:$B$6,2))

 リスト表  sheet1!
	A	B
1	2006     この年(数値)を変えれば次年度も対応
(JJJ)	


 一番干さんが提示されている表をベースにすると、こんなのも・・・
  	A	B	  C	   D	  E	   F
 1	期	開始	  終了			
 2     04下期   2004/10/1	2005/3/31		2005/4/1	  05上期
 3     05上期   2005/4/1	2005/9/30			
 4     05下期   2005/10/1	2006/3/31			
 5     06上期   2006/4/1	2006/9/30	
E2セルに日付を入力し、F2セルに
=IF(OR(COUNT(E2)=0,MAX($B$2:$C$5)<E2,MIN($B$2:$C$5)>E2),"該当なし",INDEX($A$2:$A$5,MATCH(E2,$B$2:$B$5,TRUE)))
エラー処理してるので、やっぱり長いけど・・・(メインは、INDEX 以降の部分です。)
※表は、間があかずに昇順で並んでいる事が絶対条件です。>MATCH関数ヘルプをご覧下さい。
 また、表の並べ方を変えれば、↓これも参考になります。
http://www.excel.studio-kazu.jp/lib/e1tw/e1tw.html
(sin)


 スレッドの流れをまったく無視してます。長くても解りやすい?
 =IF(AND(MONTH(A1)>=4,MONTH(A1)<=9),
  RIGHT(YEAR(A1),2)&"上期",
  RIGHT(YEAR(A1)-IF(YEAR(A1)<4,-1,0),2)&"下期")
 BJ


 皆様ありがとうございます。
 でもやっぱり難しいですね・・・。(T_T) プリントアウトしてじっくり解析しながら
 勉強させて頂きます。
 (一番干)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.