- ベストアンサー
エクセルについて(関数)
2点教えて頂きたいことがありますのでお願いします。 1.A1に数字の1を入力した場合B1に4月、更にA2に1を入力した場合B1に5月、更にA3に1を入力した場合B1に6月・・・順に12月まで表示させるにはどうしたら良いのでしょうか。 この時、A1~A12は、1が入ったままです。 2.A1に4月入力した場合、A2からA31までのA列に4月1日から4月30日までの土曜日と日曜日と祝日(休日)を除いた日にちを表示すさせるにはどうしたら良いのでしょうか。 5月と入力した場合も同様です。 質問の2点は、別々のものです。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
1.の問題==>VLOOKUP関数の利用 B1 に =IF(A1=1,VLOOKUP(ROW(),{1,"4月";2,"5月";3,"6月";4,"7月"},2,FALSE),"") B12まで式を複写。 (),{1,"4月";2,"5月";3,"6月";4,"7月"},はその後手抜きしてます。 12,"12月"まで入れること。 ーーー 2。の問題 Sheet2 A列 B列 2008 4 <==年と月A1,B1 2008/4/1 3 1 2008/4/2 4 2 2008/4/3 5 3 2008/4/4 6 4 2008/4/5 7 2008/4/6 1 2008/4/7 2 5 2008/4/8 3 6 2008/4/9 4 7 2008/4/10 5 8 2008/4/11 6 9 2008/4/12 7 2008/4/13 1 2008/4/14 2 10 2008/4/15 3 11 2008/4/16 4 12 2008/4/17 5 13 2008/4/18 6 14 2008/4/19 7 2008/4/20 1 2008/4/21 2 15 2008/4/22 3 16 2008/4/23 4 17 2008/4/24 5 18 2008/4/25 6 19 2008/4/26 7 2008/4/27 1 2008/4/28 2 20 2008/4/29 3 21 2008/4/30 4 22 2008/5/1 5 2008/5/2 6 2008/5/3 7 ーーーー 上記B、C列は B2は =WEEKDAY(A2) C2は =IF(AND(MONTH(A2)=$B$1,NOT(OR(B2=1,B2=7))),MAX($C$1:C1)+1,"") それぞれ下方向に式を複写。 結果 上記B,C列の通り。 ーーーー Sheet1に置いて =INDEX(Sheet2!$A$2:$C$40,MATCH(ROW()-1,Sheet2!$C$2:$C$40,0),1) と入れて下方向に式を複写 結果 2008/4/1 2008/4/2 2008/4/3 2008/4/4 2008/4/7 2008/4/8 2008/4/9 ・・・ 2008/4/29 2008/4/30 #N/A #N/A ーーー 上記の手抜き (1)祝日を考慮 (2)Sheet1の#N/Aを出さない ーーー (2)は=IF(ROW()-1>max(Sheet2!$C$1:$C$40),"",上記式) (1)は祝日日付リストをある列につくり、VLOOKUP関数で検索し 今考えているSheet2のA列のhi日付けが祝日ならD列に1と出す。 =IF(AND(MONTH(A2)=$B$1,NOT(OR(B2=1,B2=7))),MAX($C$1:C1)+1,"") の式を =IF(AND(MONTH(A2)=$B$1,NOT(OR(B2=1,B2=7)),D2<>1)),MAX($C$1:C1)+1,"") に変える。 以上のやり方は、Sheet2という作業シートを使うので、自称 imogasi方式。 作業シートを使うが、やっていることが、エクセル関数中級の人にもわかると思ってあげます。 ーーー 小生ならVBAでプログラムを組んでやります。ロジックは上記とほぼ同じです。 日付決定(最初は月の1日) 祝日か、土日かーー>表示しない 聡でないA列に日付等書き込む 日付を+1して繰り返し つきが変わると終了
その他の回答 (2)
- grumpy_the_dwarf
- ベストアンサー率48% (1628/3337)
1. まず、条件の数があいません。B1の最終が12月なら、A列は9行だけ でおしまいです。A10以降のセルに入力があった時の処理は質問に 書いてありませんね。 次に、B列に表示させる値の形式が不明です。文字列「4月」なの か、特定の日付で表示形式が「m"月"」なのかで処理が大きく変わ ります。 さて、上記を勝手に今年度の4月から3月までの日付形式でやること にしますと、 B1: =date(2008, sum(A1:A12)+3, 1) で表示形式「m"月"」とすればオッケーです。A列に何も入力がない と昨年度の3月になるのはご愛嬌。 2. 年が確定しないのに曜日や祝日の話は出来ませんね。ちなみに祝日 なんてExcelは関知しませんので、何年何月何日が祝日なのかは、 自分で一覧表でも作って指定する必要があります。そこらをクリア すれば、分析ツールのworkday関数一発です。A1に質問1の様に日付 形式で入力し、A2は =workday(A1-1,1,祝日一覧)。A3以降は素直に =workday(A2,1,祝日一覧)。月末にかかりそうなあたりは月が変わ るなら""を返すとかそもそも前日が""なら無条件で""だとか、その へんを考慮して =if(A19="","",if(month(workday(A19,1,祝日一覧 ))<>month($A$1),"",workday(A19,1,祝日一覧)))な感じで。
1.B1: =IF(A1,SUM(A1:A12)+3-12*A10,"") 2.年は何処に入力しますか? 同じ2月でも年によって日数や曜日が異なりますよ。