アプリ版:「スタンプのみでお礼する」機能のリリースについて

B列4行目以降 (同日が2行連続した日付)に、例えば月の初めを入力すると
下記のように同日が連続(ここでは2行分)させる方法はどのようにしたら
よろしいでしょうか?

1,日付は月の初めから月末まで。
2,日付は週の初め(月曜日)から1週間分(次週の月曜日)。
3,2,の日付は不特定日(但し、月曜日から)です。
 等々といろいろ条件が出来てしまいますが、
ここでは1,から3,を行いたいです。

B列4行目以降の日付
H23年9月1日(木)
H23年9月1日(木)・・・・上行と同日
H23年9月2日(金)
H23年9月2日(金)
H23年9月3日(土)
H23年9月3日(土)
H23年9月4日(日)
H23年9月4日(日)
H23年9月5日(月)
H23年9月5日(月)
H23年9月6日(火)
H23年9月6日(火)
H23年9月7日(水)
H23年9月8日(木)
H23年9月8日(木)
   ・
   ・
   ・

エクセル2000です。
3行分など自由行にしたい場合は、改めて質問させていただく方がよろしいいでしょうか?

初心者ですがよろしくお願いします。

A 回答 (14件中1~10件)

 回答番号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つ上のセルに入力されている日付」と同じ日付を表示させる関数となっています。
    • good
    • 0
この回答へのお礼

お礼が大変遅くなりました。

補足質問に対して、ご丁寧に説明頂きありがとうございます。

一度には理解できませんが、勉強の参考になります。

No.14さんの場を借りて申し訳ありませんが
今回、ご回答頂いた内容はそれぞれの場で使用(適用)させて頂きます。
ありがとうございました。

ベストアンサーは最後までお付き合いいただきました、回答番号ANo.9,11、14さんにさせて頂きます。

お礼日時:2011/09/21 10:10

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
「エクセルで日付同日連続」の回答画像13
    • good
    • 0
この回答へのお礼

補足質問回答ありがとうございます。

>余計なお世話かもしれませんが・・・・

全然そのような気持ちはありません。

画像添付していただき、ご丁寧にありがとうございます。

お礼日時:2011/09/17 10:03

[No.10補足]へのコメント、



》 のROW()>19の「19」はどのような意味を持つのでしょうか?

指定の月曜日から次週の同曜日までを4行目から表示始めると「19」行目で終る次第。
「19」行目を超える場合は空白表示にするための条件として「ROW()>19」を使用しています。

5行目から始めるなら「19」は「20」に変更すればOK。
    • good
    • 0
この回答へのお礼

補足質問回答ありがとうございます。

>指定の月曜日から次週の同曜日までを4行目から表示始めると「19」行目で終る次第。
「19」行目を超える場合は空白表示にするための条件として「ROW()>19」を使用しています。

 5行目から始めるなら「19」は「20」に変更すればOK。

・・・・・理解できました。


アドバイスいただいたやり方、結構便利だなあ~と思いました。

ありがとうございます。

お礼日時:2011/09/17 10:11

>アドバイスいただいた式を入力しましたが「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)<行数とは又違う意味でしょうか?

当初の質問から外れているかもしれませんが
よろしければお願いします。

補足日時:2011/09/17 10:33
    • good
    • 0

添付図参照



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」の意味です。
「エクセルで日付同日連続」の回答画像10

この回答への補足

早々にご回答ありがとうございます。

ご丁寧に画像までつけていただきありがとうございます。
画像をみたら、少々お時間かけていただいた感じに受け取れ、
ここまでして頂き、ありがとうございます。

早速、アドバイスいただいた式を入力いたしました。

バッチリです。感動です!
西暦、月、月曜日の何週目か、とても分かりやすいです。

素人につき関数の意味は分かりませんが、
=IF(ROW()>19,"",DATE(D$1,D$2,D$3*・・・・
のROW()>19の「19」はどのような意味を持つのでしょうか?

よろしければアドバイスお願いします。

補足日時:2011/09/16 16:55
    • good
    • 0

 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日(土)を表示します。

アドバイスいただいた式の入力方法でどこかを間違えていますでしょうか?

よろしければアドバイスお願いします。

補足日時:2011/09/16 16:17
    • good
    • 0

あれ?何で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セルが未入力の場合は、「入力待ち」表示にしたいです。

今回、アドバイスいただいた式のエラー回避方法(未入力時)は??です。

質問からはずれているかもしれませんが
よろしければアドバイスお願いします。

又、式の意味もよければお願いします。

補足日時:2011/09/16 14:51
    • good
    • 0

あ、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)))
でよろしいでしょうか?

またいでの補足質問をしていますが
よろしければアドバイスお願いします。

補足日時:2011/09/16 15:14
    • good
    • 0

B4に最初の日付を入力



B5に

=$B$4+INT(ROW(A1)/2)

と入力して、下に必要なだけコピー
※ROW(A1)は数式を入れる場所に関係なくそのまま入力してください。

これで同じ日付が2つずつできます。

3つずつにしたい場合は

ROW(A1)/2のスラッシュの後ろを3にして

=$B$4+INT(ROW(A1)/3)

とします。そして下にコピー。

どこかに○行おきみたいな入力セルを作っておいてそこを参照してもいいかも知れません。
そうすればいちいちコピーしなおさなくていいですから。

多分、こういうことが言いたかったのではないかと思いますが如何でしょう?
    • good
    • 0
この回答へのお礼

早々にご回答ありがとうございます。

思っていた通りに出来ました。

ありがとうございます。

お礼日時:2011/09/16 12:58

こんにちは!


一例です。

↓の画像のようの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
「エクセルで日付同日連続」の回答画像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行)に変更すればよろしいでしょうか?

大変参考になりました。

補足日時:2011/09/16 16:04
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!