[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『日付から、半期毎の期間を返したい』(一番干)
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.