• ベストアンサー

日にちの隣の列を書き出すには?

A列に日付(西暦、月、日)、B列には曜日(祝日は祝と反映)が一年分入力されています。(2009年とは限りません) C1セルにある日にちを月と日だけで入力(たとえば1月1日)したときにD1セルに対応する日付の曜日の欄のセル番号(1月1日の場合は B1、2月1日の場合はB32)と表示させる方法を教えて下さい。(なぜB1と表示させたいのかというと、 B1 をindex関数で参照して別の作業をしたいからです) 以下は私がチャレンジしてダメだった内容です。 難しいのは、A列の日付が過去の日付という事です。C1セルにはただ単に1月1日、とだけ入力するようにしたいので、セルの日にちは自動的に「今年の」1月1日になってしまいます。A列が昨年以前の日付だとすると、C1=A列にはならないので、簡単なlookup関数などでは処理できません。 E列に=month(A1)、F列に=day(A1) 、として下までコピーし、month(C1)とday(C1)と同じものを探す、なんていうやり方は頭にあるのですが、それを表現できません。 また、A列でヒットした場合、B列のセル番号を返す、(A123が同じだった場合にB123と返す)というのが私の知識では及びません。(1つ下のセル、なら、row+1ですが、1つ右のセル、だと、column+1ではできない) いろいろなやり方があると思いますが、これを使って1年分の売り上げ分析を一枚のシートでやろうと思っているので、なるべくこの部分で複雑な展開にはしたくありません(ファイルが重たくなる)。 皆さんのお知恵をお願いいたします。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.6

こんばんは! 解釈が違っていたらごめんなさい。 単純に、E1・F1セルに月と日を入力するとB列の何行目か? という表示させるだけの回答になります。 ↓の画像で説明させていただくと、 今年だけではなく以前の年度の場合もあるということなので データとは関係ないところに年度と月(1/1からA1セルに表示させたいと言うことなので、とりあえず1)を入力すると A列に日付・B列に曜日・C列にE1~F1に月日のデータを入力すると行番号が表示されるようにしてみました。 A1セルに =IF(COUNTBLANK($H$1:$J$1)>0,"",DATE($H$1,$J$1,ROW(A1))) としてセルの表示形式のユーザー定義から d に B1セルに =IF(A1="","",A1) として、同じくユーザー定義から aaa に C1セルに =IF(A1=DATE($H$1,$E$1,$F$1),ROW(A1),"") という数式を入れ、A1~C1セルを範囲指定し、C1セルのフィルハンドルで 下へオートフィルで366行目(うるう年の関係のため)までコピーします。 そして、D1セルに =IF(COUNTBLANK(E1:F1)>0,"","B"&MIN(C:C)) という数式が入っていますので、 E1・F1セルに月と日を入力すると、H1セルの年度の 何行目かというのが、B○○ と表示されるはずです。 尚、アップした画像の中にも書いていますが、 J列・K列は非表示の方が良いかも知れません。 もし、1月以外からはじめるとエラーになると思います。 以上、参考になれば幸いですが、 的外れなら読み流してくださいね。m(__)m

pi-man
質問者

お礼

なるほど、いろいろな考え方がありますね。 実は私が「こんな感じでできないかな・・」と漠然と考えていたのは、ご回答のようなやり方でした。 いろいろと勉強してみます、どうもありがとうございました。

その他の回答 (5)

  • sige1701
  • ベストアンサー率28% (74/260)
回答No.5

実際にやりたいことを記載した方がよりよい回答を得られると思います >C1セルにある日にちを月と日だけで入力(たとえば1月1日)したときに >D1セルに対応する日付の曜日の欄のセル番号(1月1日の場合は B1、 >2月1日の場合はB32)と表示させる方法を教えて下さい。 (なぜB1と表示させたいのかというと、 B1 をindex関数で参照して 別の作業をしたいからです) A列は同じ年度の連続した日にちが入力されているのでしょうか? 連続でない場合、A列に重複する日付はあるのでしょうか 単にB列の値が分かれば 良いだけのようにも思いますが・・・ 参考までに ="B"&MATCH(TEXT(C1,"mmdd"),INDEX(TEXT(A1:A366,"mmdd"),),0) =INDEX(B:B,MATCH(DATE(YEAR(A1),MONTH(C1),DAY(C1)),A1:A365,0)) =TEXT(DATE(YEAR(A1),MONTH(C1),DAY(C1)),"aaa") エラー処理、閏年を考慮していません

pi-man
質問者

お礼

説明がなっていなくてすみませんでした。 A列の日にちは1月1日から12月31日まで連続しています。 実際のファイルではそれに対応する売り上げデーターがC列以降に並んでいます。 曜日を知ることが目的ではないので3つ目の式は違うと思います。 1と2は、・・・・ MATCH関数をあんまり理解していないので、そこから勉強してみます。 どうもありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

質問が読みずらい。実例を一部あげること。 余分な記述がある。 失敗談は注書きにし希望は回答が出てから、採用で吟味すればよいだろう。 私としては、聞く立場で色々注文はつけてほしくない。多様な回答は勉強になると確信している。 ーーーー A列には「ある年」だけの!1年分の日付がある。 A列 2008/1/1 2008/1/2 ・・・ 2008/12/30 2008/12/31 と日付が入力されているとする。 普通の/での入力で、日付シリアル値であるものとする。文字列の入力でないことが肝心。日付の表示形式はどれでもよい。 セルの値は日付シリアル値という整数である これなら、この年はYear($a$2)で判る。 日付シリアル値を扱うときは、年を確定しないと話しにならない。 ーーー C1に探したい任意の月日を入れる。 ただし、月日だけ入れるのはエクセルでは文字列になって面倒。 普通に3/1と入力し、C1の書式はm/dにして2009などを見えなくし、2009は使わないようにするのがよかろう(2009は今年C1に入力での話しだが)。 であるから 検索する日(=整数)はDATE(YEAR($A$2),MONTH($C$1),DAY($C$1) である(セルの値の実態は整数値。日付シリアル値。)。 関数で検索するのは、セルの値で、やるのだと言うことをしっかり認識のこと。 A表のデータにあわせた日付を作ったことになる。 するとA列での行は =MATCH(DATE(YEAR($A$2),MONTH($C$1),DAY($C$1)),$A$2:$A$100,0)+1 でもとまる。+1は2008/1/1を第2行目から始めているから。 これが判れば、隣の曜日列の曜日はINDEX関数で簡単に取れる。 式は =INDEX($A$2:$B$366,MATCH(DATE(YEAR($A$2),MONTH($C$1),DAY($C$1)),$A$2:$A$366,0),2) VLOOKUP関数でも同じように出来る。INDEXの第2引数が第1になり、第1引数がVLOOKUPの第2引数になり、第4が加わって「FALSE]を入れるだけ。

pi-man
質問者

お礼

質問、読みずらいようですみませんでした。 エクセルの前に国語の勉強も必要かもしれませんね・・・ 教えていただいた数式は、じっくり読みこんで研究してみます。 コピペで答えが出ればそれでOKという性格ではないもので、仕組みを理解してから使いたいと思っています。 どうもありがとうございました。

  • chiizu2
  • ベストアンサー率41% (164/400)
回答No.3

すみません 書き忘れですが C1に2月29日を入力するときだけ 2008/2/29と閏年の西暦を含めて入力すれば 問題なく表示します セルの書式設定で 日付→○月○日を選択しておけば m"月"d"日";@ C1は2008/2/29でも2月29日と表示されます

  • chiizu2
  • ベストアンサー率41% (164/400)
回答No.2

No.1の回答者の方の補足をいたします 表が1月1日に始まるのであればNo.1の回答者の方の式で 問題ないと思いますが >1年分の売り上げ分析を一枚のシート ということなので 会計年度 4月1日~3月31日 ということを前提にすると 表は4月1日に始まり1月1日以降は翌年ということになります そこで =ADDRESS(MATCH(DATE(IF(MONTH(C1)<=3,YEAR(A1)+1,YEAR(A1)),MONTH(C1),DAY(C1)),A1:A365,0),2) とすれば1月~3月はA1の年の翌年の1月~3月を表示することができます MONTH(C1)<=3の3は会計年度の終わりの月なので この数字を変えれば任意の月に変えることができます 閏年の問題ですが その年が閏年でない場合C1に2月29日と入力するとエラーとなります 2008/2/29→OK 2009/2/29→エラー

pi-man
質問者

お礼

ご指摘ごもっともでした。 私の場合は1月1日からで計算しています。 が、おっしゃるように4月1日からも考えられますし、1年のうちのある一定期間を対象とする場合、また年をはさんで期間を取りたい場合などには必要になってくると思われます。 どうもありがとうございました。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

A1セルから下方にある年の日付が1月1日から下方に入力されているとします。B列には日付に対応した曜日が表示されているとします。 C1セルに1月1日と入力したときにA列での1月1日を探しそれに対応する曜日のセル番号をD1セルに表示させるには次の式をD1セルに入力すればよいでしょう。 =ADDRESS(MATCH(DATE(YEAR(A$1),MONTH(C1),DAY(C1)),A:A,1),2) この式ではADDRESS関数を使っていますが、そこでは最初の引数として行番号、次の引数は列番号としています。 行番号は月と日にちについてはC1セルの値を使っていますが年についてはA1セルに入力した年を使って日付を求め、その日付がA列で一致する行を求めています。その際にMATCH関数を使っていますがそこではうるう年などを考慮して引数の中で1を使っています。これはうるう年などでその日付が存在しない場合にはその日付の前の日付を検索するようにするためです。 式の中で引数の2は表の2列目を意味しB列をさしています。 上記の式で表示されるセル番地は絶対参照の形で表示されます。 1月1日の場合でしたら$B$1と表示されます。 このセル番地を相対参照にする場合には次のような式になります。 =ADDRESS(MATCH(DATE(YEAR(A$1),MONTH(C1),DAY(C1)),A:A,1),2,4) 引数の4が新たに追加されています。 なお、このセル番地の曜日を他のセルで使用する場合にはINDEX関数ではなくINDIRECT関数で=INDIRECT(D1)のように使うことになるでしょう。

pi-man
質問者

お礼

丁寧なご説明、ありがとうございます。 数式を読んで仕組みを研究してみます。 どうもありがとうございました。 >INDEX関数ではなくINDIRECT関数で=INDIRECT(D1)のように使うことになるでしょう 私の間違えでした、indsexでなくindirectでした。

関連するQ&A

  • エクセルの関数式の設定。

    セルB1~M1に月(1~12月)を入力しておきます。 セルA1に任意の日付を入力すると(例えば1/21と入力)セルB2~M2のうち対応するセル(C2(2月の下))に○印、その他のセルは空白になるように関数を使いたいのですが、どのように式をたてればよいか、分かるかた教えてください。 A列に任意の日付を入力すると、B~M列の対応する月のセルに○印が自動的に入れたいのです。 MONTH関数やDAY関数で月と日を別のセルに取り出すようにして、IF関数を使ってやってみても式をどうたててよいのか分からず、全然ダメです。 任意の日付が12月21日~1月20日の場合は1月に○       1月21日~2月20日の場合は2月に○       2月21日~3月20日の場合は3月に○ といった具合に、20日締めにしたいのです。 年度は気にしません。 よろしくお願いします。

  • 日時を文字列にしたい

    こんにちは。 以下の内容で困っています。 アドバイス宜しくお願いします。 ○内容 セルA1に「2008/11/10 09:08」と入力されている日付のデータがあります。 これをB1に「200811100908」という文字列にしたいのですが、関数を利用して対応できないでしょうか? ○環境 Excel2000 ※西暦部分に関しては以下の方法で文字列にすることができました。 1.B1=YEAR(A1)*10000+MONTH(A1)*100+DAY(A1) 2.出力した値を標準書式にする

  • エクセル日にち間隔で日曜日を除いた値

    B列3行目以降        C列        D列             E列 (日付)         (日にち間隔数)    (日曜日除く間隔数)  (データ値)  H23年6月22日(水) H23年6月30日(木)      8           7 H23年7月1日(金)      1           1 H23年8月1日(月)      31           26 H23年8月28日(日)      27           24(28日の日曜日は含む) H23年9月30日(金)      33           28 日付入力は2011/6/21 B列表示形式はge"年"m"月"d"日"(aaa) 日付間隔は=IF(OR(ISBLANK(B3),ISBLANK(B4)),"",DATEDIF(B3,B4,"d")) の式を ネットで調べ、B列に不特定日を入力し、各、日にち間隔の数値を出しています。 ・行いたいのは  データの記録表を作成していますが、B列に不特定日を入力し、日曜日だけを除いた  日にち間隔の数値をD列に出したいです。  但し、B列に入力した日付が日曜日の場合は、その日も含みます。 エクセル素人につき、 <WEEKDAY関数は、曜日に対応した数値を返します。数値と曜日の対応> などをどのように利用して良いか分かりません。 エクセルは2000です。 アドバスの程よろしくお願いします。 過去(質問番号:6992865)で同じような質問させていただきましたが、質問内容が 悪く、締め切らせていただいてます。 (ご回答頂いた方々ありがとうございました。)

  • Excelでカレンダーを作成。日にちを自動的に・・・

    Excel2000でカレンダーを作成中なのですが質問です。 Sheet1に2006年1月、Sheet2に2月・・・とシートごとにひと月。 日にちはB列、曜日を右隣のC列に縦に入力。 E2に○月と月の数字を入力したたけで、B/C列の日付け・曜日を自動的に入力させる方法はありますか? 出来れば、土曜日の日にち・曜日を紺・日曜日はピンクと書式の色を変えたいので、その作業も自動的にしてくれると大変ありがたいのです。 ヘルプやサイト検索などしてみましたが、よく分かりませんでした・・・。 出来れば夕方までには完成させたいです。 お時間のある方、宜しくお願い致します。

  • 日付を表示

    H3に日付を入力してます。 B6にこの関数を入力してます。 =IF(DATE(YEAR($H$3),MONTH($H$3),1)*DATE(YEAR($H$3),MONTH($H$3),-5+ROW()),DATE(YEAR($H$3),MONTH($H$3),-5+ROW()),"") これをB6~↓にコピペしてます。 なんだか違う気もしますが、無事に表示されてます。 やりたい事は、月によって日数が変わるとき例えば 29日や31日など この時現在は空いたセルによく月の1日や2日が表示されるのを空白にしたいのです。 後上記の関数以外の用方法がありますか! ちなみにC列には、WEEKDAY関数で曜日を表示させてます。 おねがいします。

  • エクセルで、A列に日付をB列に曜日、C列からF列までにデータを入れるよ

    エクセルで、A列に日付をB列に曜日、C列からF列までにデータを入れるように作成しています。 条件付書式で土日祭日の場合はC列からF列に色を表示させています。 この色付セル(土日祭日)の場合にはデータ入力が無いので自動で0を表示させ、なおかつデータ入力が出来ないようにしたいのですが、そのようなことは出来るでしょうか。エクセルは2003を使ってます。

  • エクセルで英数の文字列から日にちを表示させたい。

    以下のような2文字からなる英数字から、日にちを表示させたいのですが、エクセルでどのような関数をしようしたら良いのでしょうか? 一番目の文字はA~Lで、 A=1月 B=2月 C=3月 D=4月 L=12月 を示しています。 で、2番目の数字は0~9で、年度を示しています。 例えばC6ですと → ”2006年3月”、     F7ですと → ”2007年6月” という具合に、文字列を参照して隣のセルに日にちを表示させたいです。 すみませんがどなたか良い方法があれば教えていただけませんか?

  • エクセル2000 セルの表示設定

    エクセル2000 セルの表示設定で同一のセルで、日にちと曜日を表示させる事は出来ますか? 表示形式で日付を選ぶと和暦、西暦で日にちを表示できますが、曜日まで表示できません。ユーザー定義を設定して同一のセルで日にちと曜日を表示させる方法を教えていただけますか、お願いします。 また、出来ない場合セルのA1に日にちを入力してセルのB1に曜日を表示させる関数を教えてください。 よろしくお願いします。

  • DATE関数 余分な日にちを非表示にさせる方法

    エクセルの達人の方、教えてください。 DATE関数でカレンダーを自動表示させ、ある集計をしています。 A1 に西暦、B1 に月の数値を入れると、以後の列毎に( C1、D1、E1---)1行目に"日付"、2行目に"曜日"を表示させています。 但し、締め日を起点にしている為、毎月16日~翌15日まで表示をさせており、31日分を表示させなければなりませんが、2月は元より、4月、6月、9月、11月の30日の月の表示の際、どうしても翌月が"16日"まで余分に表示してしてしまいます。 "16日"の表示を非表示にする方法を試行錯誤しています。 関数は、日付けと曜日の最初のセルにDATE関数を入れ、順次(=C1+1、=D1+1---)となっています(セルは表示形式と条件書式で日付けと曜日表示させています)。 最後の31個目(31日目)のセルに、条件書式やIF関数を入れてみたのですが、セルの値がシリアル値の為、引数を他の関数でうまく出来ません。 宜しくお願いします。。。

  • 末尾から指定した文字列を省く関数はありますか?

    末尾から指定した文字列を省く関数はありますか? 一つのセル内に 4/9(月) 4/10(火) と日付が並んでいる場合、括弧と曜日だけ省きたいのですが・・・ RIGHT関数だと曜日だけ抜き取ってしまいますし、LEFT関数だと日付が1二桁になったら変えないといけないしで困っています。

専門家に質問してみよう