- ベストアンサー
エクセルで日付同日連続
- エクセルで日付同日連続する方法について質問です。B列4行目以降に月の初めを入力すると、同日が連続するようにしたいです。
- 具体的には、日付は月の初めから月末まで連続させたり、週の初めから1週間分を連続させたりしたいです。
- どのような条件を設定すれば、B列4行目以降の日付を連続させることができるでしょうか?エクセル2000を使用しています。
- みんなの回答 (14)
- 専門家の回答
質問者が選んだベストアンサー
回答番号ANo.9,11です。 >n行おきにセルに色をつけるやりかたの=MOD(ROWS(A$2:A2)-1,行数×2)<行数とは又違う意味でしょうか? MOD関数とROWS関数を利用して、周期性を持たせている、という意味においては、一部に同じ原理を利用してはおりますが、全体としては違うものです。 =MOD(ROWS(A$2:A2)-1,行数×2)<行数 は、「先頭の行から数えた行数」を「周期の2倍の数」で割った余りが、「周期の数」以下である場合には色を付け、「周期の数」を超えている場合には色を付けないというものです。 つまり、n行ごとに色を着けたり、着けなかったりを繰り返したい場合において、nの2倍の数の周期性を持たせた上で、1周期の中の前半部分では色を着け、後半部分では色を着けない、という事を行っています。 因みに、私だったら =MOD(ROWS($2:2),n*2)<=n とします。 又、1行目~n行目の範囲は色を着けずに、(n+1)行目~2n行目には色を着ける、という繰り返しを行う場合には、 =MOD(ROWS($2:2),n*2)>n となります。 これに対して、ANo.11で示したB5セルの数式中の B4+(MOD(ROWS($5:5),2)=0) という部分に関してですが、Excelでは、判定式が成り立っている場合には、その判定式が記されている箇所を数値の1と見做して計算し、判定式が成り立っていない場合には、その判定式が記されている箇所を数値の0と見做して計算します。 $5:5の範囲に含まれている行の数は1行ですから、 ROWS($5:5) の計算結果は1となります。 MOD関数は MOD(数値, 除数) の形式で記入する関数で、数値を序数で割った際の余りを求める関数です。 数値の部分に入力されているROWS($5:5)の部分の計算結果が1で、除数には2が入力されていますから、 MOD(ROWS($5:5),2) の計算結果は、1を2で割った時の余りである1となります。 そして、1は0と等しい値ではありませんから、 1=0 という判定は、成り立っていないという事になりますので、 MOD(ROWS($5:5),2)=0 もまた、成り立ってはいない事となりますから、 (MOD(ROWS($5:5),2)=0) の部分は、計算においては数値の0として扱われます。 つまり、 B4+(MOD(ROWS($5:5),2)=0) = B4+(MOD(1,2)=0) = B4+(1=0) = B4+0 = B4 という事で、B5セルには、B4の値に0を加えた値が表示されます。 そして、B5セルをコピーして、B6セルに貼り付けますと、関数はExcelの機能によって、自動的にB6セルに合わせた形に修正されますから、B5セルにおいては B4+(MOD(ROWS($5:5),2)=0) となっていた箇所は、B6セルに貼り付けますと、 =B5+(MOD(ROWS($5:6),2)=0) へと、自動的に書き換えられます。 B5+(MOD(ROWS($5:6),2)=0) = B5+(MOD(2,2)=0) = B5+(0=0) = B5+1 なのですから、B6セルの関数は、B5セルの値に1を加えた数が表示されます。 つまり、この関数は、「5行目から数えた行数」が周期の倍数と等しくなった場合にのみ、「1つ上のセルに入力されている日付」に1日を加算した日付を表示し、それ以外の場合には「1つ上のセルに入力されている日付」と同じ日付を表示させる関数となっています。
その他の回答 (13)
- tom04
- ベストアンサー率49% (2537/5117)
No.5です。 >行数を変更したければ >=IF(OR(B4="",MONTH($B$4+INT(ROW(A1)/2))<>・・・ >IF(OR($C$4="",$B$4=""),"",$C$4+INT(ROW(A1)/2)) >の除数2を3(n行)に変更すればよろしいでしょうか? とありましたので、再び顔を出しました。 結論としてはその通りです! 余計なお世話かもしれませんがわざわざ数式を変更せずに↓の画像のようにA1セルに表示させたい行数を入力すると表示されるようにしてみました。 方法は前回同様ですが、数式が当然かわります。 B4・C3セルは手入力になります。 A4セルは =IF(B4="","",TEXT(B4,"aaa")) としてとりあえずA5セルまでオートフィルでコピーしておきます。 C4セルは =IF(OR(A1="",C3=""),"",INDEX(B:B,MATCH(C3,A:A,0))) B5セルに =IF(OR($A$1="",$B$4=""),"",IF(MONTH($B$4+INT(ROW(A1)/$A$1))=MONTH($B$4),$B$4+INT(ROW(A1)/$A$1),"")) C5セルに =IF(OR($C$4="",7*$A$1-1<ROW(A1)),"",$C$4+INT(ROW(A1)/$A$1)) として、A5~C5セルを範囲指定 → C5セルのフィルハンドルでまとめて下へずぃ~~~!っとコピー! これでもかっ!というくらいコピーしておきます。 これでA1セルの数値を変えるだけで好みの行数分だけ同じ日付が表示されるはずです。 以上、長々と失礼しました。m(_ _)m
お礼
補足質問回答ありがとうございます。 >余計なお世話かもしれませんが・・・・ 全然そのような気持ちはありません。 画像添付していただき、ご丁寧にありがとうございます。
[No.10補足]へのコメント、 》 のROW()>19の「19」はどのような意味を持つのでしょうか? 指定の月曜日から次週の同曜日までを4行目から表示始めると「19」行目で終る次第。 「19」行目を超える場合は空白表示にするための条件として「ROW()>19」を使用しています。 5行目から始めるなら「19」は「20」に変更すればOK。
お礼
補足質問回答ありがとうございます。 >指定の月曜日から次週の同曜日までを4行目から表示始めると「19」行目で終る次第。 「19」行目を超える場合は空白表示にするための条件として「ROW()>19」を使用しています。 5行目から始めるなら「19」は「20」に変更すればOK。 ・・・・・理解できました。 アドバイスいただいたやり方、結構便利だなあ~と思いました。 ありがとうございます。
- kagakusuki
- ベストアンサー率51% (2610/5101)
>アドバイスいただいた式を入力しましたが「0」を返しM33年1月0日(土)を表示します。 申し訳御座いません、当方の入力ミスで、B4セルを指定すべき箇所がB5になっておりました。(動作確認済みの関数をコピー&ペーストした筈なのですが、何故この様なずれが生じたのかは判りません) 【誤】 =IF(AND(ISNUMBER(B$4),ROWS($5:5)<8*2),B5+(MOD(ROWS($5:5),2)=0),"") =IF(AND(ISNUMBER(B$4),ROWS($5:5)<8*3),B5+(MOD(ROWS($5:5),3)=0),"") =IF(AND(ISNUMBER(B$4),ROWS($5:5)<8*n),B5+(MOD(ROWS($5:5),n)=0),"") 【正】 =IF(AND(ISNUMBER(B$4),ROWS($5:5)<8*2),B4+(MOD(ROWS($5:5),2)=0),"") =IF(AND(ISNUMBER(B$4),ROWS($5:5)<8*3),B4+(MOD(ROWS($5:5),3)=0),"") =IF(AND(ISNUMBER(B$4),ROWS($5:5)<8*n),B4+(MOD(ROWS($5:5),n)=0),"")
補足
補足質問回答ありがとうございます。 セル指定間違いだったのですか・・・私にはまったく分かりませんでした。 再び補足質問にさせて頂きます。 アドバイスいただいた式の =IF(AND(ISNUMBER(B$4),ROWS($5:5)<8*n),B4+(MOD(ROWS($5:5),n)=0),"") ・・・・+(MOD(ROWS($5:5),n)=0),"")の中の MOD(ROWS($5・・・は ネットで調べましたが n行おきにセルに色をつけるやりかたの =MOD(ROWS(A$2:A2)-1,行数×2)<行数とは又違う意味でしょうか? 当初の質問から外れているかもしれませんが よろしければお願いします。
添付図参照 A4: =IF(MONTH(DATE(A$1,A$2,ROW(A2)/2))<>A$2,"",DATE(A$1,A$2,ROW(A2)/2)) D4: =IF(ROW()>19,"",DATE(D$1,D$2,D$3*7-WEEKDAY(DATE(D$1,D$2,0),3)+(ROW(D1)-1)/2)) 1行目、2行目は、それぞれ西暦年、月 を入力 D列の3行目は「第3月曜」の「3」の意味です。
補足
早々にご回答ありがとうございます。 ご丁寧に画像までつけていただきありがとうございます。 画像をみたら、少々お時間かけていただいた感じに受け取れ、 ここまでして頂き、ありがとうございます。 早速、アドバイスいただいた式を入力いたしました。 バッチリです。感動です! 西暦、月、月曜日の何週目か、とても分かりやすいです。 素人につき関数の意味は分かりませんが、 =IF(ROW()>19,"",DATE(D$1,D$2,D$3*・・・・ のROW()>19の「19」はどのような意味を持つのでしょうか? よろしければアドバイスお願いします。
- kagakusuki
- ベストアンサー率51% (2610/5101)
B5セルに次の数式を入力してから、B5セルをコピーして、B6以下に貼り付けると良いと思います。 =IF(AND(ISNUMBER(B$4),ROWS($5:5)<8*2),B5+(MOD(ROWS($5:5),2)=0),"") 因みに、同じ日付が並ぶ行数が3行の場合には、次の様な関数となります。 =IF(AND(ISNUMBER(B$4),ROWS($5:5)<8*3),B5+(MOD(ROWS($5:5),3)=0),"") つまり、同じ日付が並ぶ行数がn行の場合には、次の様な関数となります。 =IF(AND(ISNUMBER(B$4),ROWS($5:5)<8*n),B5+(MOD(ROWS($5:5),n)=0),"")
補足
早々にご回答ありがとうございます。 アドバイスいただいた式を入力しましたが 「0」を返しM33年1月0日(土)を表示します。 アドバイスいただいた式の入力方法でどこかを間違えていますでしょうか? よろしければアドバイスお願いします。
- chonami
- ベストアンサー率43% (448/1036)
あれ?何で8にしたんだろう。 何度もすみません。 =IF(ROW()>7*$C$2+3,"",$B$4+INT(ROW(A1)/$C$2)) C2セルにn日おきの数値を入れるセルをつくりました。2とか3とか入力するとその数だけ同じ日付がつづいた1週間分の日付がでます。 前半式の+3はB1からB3までのセル数です。 それから、曜日入りの日付は表示形式でできるのはもちろんご存知と言うことでいいんですよね。
補足
ご親切に n日を入力出来るようにして頂きありがとうございます。 すごく便利です! No.6でアドバイスいただいた式を =IF($D$4="","入力待ち",$D$4+INT(ROW(A1)/$C$2))に変更してみました。 エラー回避方法はネットで調べましたがこれでよいでしょうか? D4セルが未入力の場合は、「入力待ち」表示にしたいです。 今回、アドバイスいただいた式のエラー回避方法(未入力時)は??です。 質問からはずれているかもしれませんが よろしければアドバイスお願いします。 又、式の意味もよければお願いします。
- chonami
- ベストアンサー率43% (448/1036)
あ、1週間分でしたね。 では、 B5に =IF(ROW()>8*3+2,"",$B$4+INT(ROW(A23)/3)) 3日ずつの式です。 これで下の方にコピーしても1週間分の日付だけが出るはずです。 8*3の後ろの3がn日ずつの数になりますので2日ずつなら8*2としてください。 やはり、n日ずつの数を入れるセルを作った方がやりやすいかもしれませんね。
補足
No.8での補足質問で1週間用の式のエラー回避は =IF(B4="","入力待ち",IF(ROW()>7*$C$2+3,"",$B$4+INT(ROW(A1)/$C$2))) でよろしいでしょうか? またいでの補足質問をしていますが よろしければアドバイスお願いします。
- chonami
- ベストアンサー率43% (448/1036)
B4に最初の日付を入力 B5に =$B$4+INT(ROW(A1)/2) と入力して、下に必要なだけコピー ※ROW(A1)は数式を入れる場所に関係なくそのまま入力してください。 これで同じ日付が2つずつできます。 3つずつにしたい場合は ROW(A1)/2のスラッシュの後ろを3にして =$B$4+INT(ROW(A1)/3) とします。そして下にコピー。 どこかに○行おきみたいな入力セルを作っておいてそこを参照してもいいかも知れません。 そうすればいちいちコピーしなおさなくていいですから。 多分、こういうことが言いたかったのではないかと思いますが如何でしょう?
お礼
早々にご回答ありがとうございます。 思っていた通りに出来ました。 ありがとうございます。
- tom04
- ベストアンサー率49% (2537/5117)
こんにちは! 一例です。 ↓の画像のようのA列を作業用の列として使用しています。 (実際は遠く離れた列にするか、列を非表示にした方がよいかもしれません。) B4セルとC3セルだけは手入力とします。 B5セルに =IF(OR(B4="",MONTH($B$4+INT(ROW(A1)/2))<>MONTH($B$4)),"",$B$4+INT(ROW(A1)/2)) という数式を入れオートフィルでずぃ~~~!っと下まで(65行目まで)コピー! A4セルは =IF(B4="","",TEXT(B4,"aaa")) としてこれもオートフィルで下へコピー! C4セルに =IF(OR(C3="",$B$4=""),"",INDEX(B4:B65,MATCH(C3,A4:A65,0))) C5セルは =IF(OR($C$4="",$B$4=""),"",$C$4+INT(ROW(A1)/2)) として7日分(17行目)までオートフィルでコピー! これで画像のような感じになります。 以上、参考になれば良いのですが・・・m(_ _)m
補足
早々にご回答ありがとうございます。 親切に画像までつけていただきありがとうございます。 アドバイスいただいた式を入力しましたら うまくできました。 行数を変更したければ =IF(OR(B4="",MONTH($B$4+INT(ROW(A1)/2))<>・・・ IF(OR($C$4="",$B$4=""),"",$C$4+INT(ROW(A1)/2)) の除数2を3(n行)に変更すればよろしいでしょうか? 大変参考になりました。
- chiizu2
- ベストアンサー率41% (164/400)
補足です 3行分というのであれば B6にも=B4 B7に=B4+1として B5~B6の3行分をスマートフィルでコピーすれば良いのですが 上行と同日を自由に設定したいというのであれば B5に=B4+1と入力してやり下にコピーして 同日にしたい行だけ手作業で 式の中の+1を消してやる方が簡単かと思います
- 1
- 2
お礼
お礼が大変遅くなりました。 補足質問に対して、ご丁寧に説明頂きありがとうございます。 一度には理解できませんが、勉強の参考になります。 No.14さんの場を借りて申し訳ありませんが 今回、ご回答頂いた内容はそれぞれの場で使用(適用)させて頂きます。 ありがとうございました。 ベストアンサーは最後までお付き合いいただきました、回答番号ANo.9,11、14さんにさせて頂きます。