重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

現在使用中の 月・金 表示のカレンダーを 日水 表示に変更したい
式をみたのですが良く分かりませんでした。
どの値を変更すれば良いかご教授ください。

また式の意味の解説も併せてお願いします。

「月 カレンダー 月・金 表示 → 日・水」の質問画像

A 回答 (9件)

ANo.5です。



> 2011/8/1 に3を加え(WEEKDAY(DATE(D3,H3,1),2)>3)*4-WEEKDAY(DATE(D3,H3,1),2)
> とはどういう意味なのでしょう?

まぁ、演算を整理した結果なんですが
WEEKDAY(○)だと、日曜が1~土曜日が7ですが、WEEKDAY(○,2)とすると月曜が1~日曜が7になります。今回はこっちの方が使いやすいので使っています。

(WEEKDAY(DATE(D3,H3,1),2)>3)*4 は、指定した日(この場合8/1)が、月~水曜の場合0、木曜~日曜の場合4になります。

8/1が月曜日の場合:8/1 +3+0-1 →8/3 が水曜日
8/1が火曜日の場合:8/1 +3+0-2 →8/2 が水曜日
8/1が水曜日の場合:8/1 +3+0-3 →8/1 が水曜日
8/1が木曜日の場合:8/1 +3+4-4 →8/4 が日曜日
8/1が金曜日の場合:8/1 +3+4-5 →8/3 が日曜日
8/1が土曜日の場合:8/1 +3+4-6 →8/2 が日曜日
8/1が日曜日の場合:8/1 +3+4-7 →8/1 が日曜日

と、言う結果になります。
    • good
    • 0

質問者には関係ないかもしれないが、こういう問題はVBA向きだ。


回答の複雑な式を見ていてそう思う。
他に見る人の参考までに。
D4セルに2011,H4に8の場合
(月中の各日について、曜日を判定し月水だけセルに書き出す)
Sub test01()
d = DateSerial(Range("D4"), Range("h4"), 1)
MsgBox d
m = DateSerial(Range("D4"), Range("h4") + 1, 0)
MsgBox m
k = 5
For i = d To m
If Weekday(i) = 2 Or Weekday(i) = 4 Then
Cells(k, "A") = i
Cells(k, "B") = i
Cells(k, "B").NumberFormat = "aaa"
k = k + 1
End If
Next i
End Sub
ーー
結果
2011/8/1月
2011/8/3水
2011/8/8月
2011/8/10水
2011/8/15月
2011/8/17水
2011/8/22月
2011/8/24水
2011/8/29月
2011/8/31水
ーーー
別のやり方で
作業列を使って良いなら、別シートSheet2に
月中日を作って 式は=DATE($D$4,$H$4,ROW()-4) (Sheet2のD4,H4には年、月があるとする。)
2011/8/11
2011/8/2
2011/8/32
2011/8/4
2011/8/5
2011/8/6
以下略
B列のB5に=IF(OR(WEEKDAY(A5)=2,WEEKDAY(A5)=4),MAX(B$4:$B4)+1,"")
月末日まで式を複写。
該当の月・水曜の日付に上から連番を振る。
ーー
Sheet1のA5で =INDEX(Sheet2!$A$1:$A$35,MATCH(ROW()-4,Sheet2!$B$1:$B$35,0),1)
下方向に式を複写する。
B列はA列と同じ値を入れて表示形式の設定をaaaにする。
(imogasi方式)
    • good
    • 0

A5セル


=DATE(D4,H4,4+4*(WEEKDAY(DATE(D4,H4,1),2)>=4))-WEEKDAY(DATE(D4,H4,1),2)

始めに考えたのはIFで分岐
=IF(WEEKDAY(DATE(D4,H4,1),2)>=4,DATE(D4,H4,8)-WEEKDAY(DATE(D4,H4,1),2),DATE(D4,H4,4)-WEEKDAY(DATE(D4,H4,1),2))
一日の曜日で水・日どちらが先に来るか判定する
日曜なら8日からWEEKDAYの第2引数を2として、引き算し日曜を求める。
水曜なら4日からWEEKDAYの第2引数を2として、引き算し水曜を求める。
始めに書いたのは、それを短くしたもの

A6:A12セル
=A5+3+(WEEKDAY(A5,2)=3)
1つ上の行の曜日を求めて 3か4を足す

A13セル
=IF(DAY(A12+3+(WEEKDAY(A12,2)=3))=DAY(A12)+3+(WEEKDAY(A12,2)=3),A12+3+(WEEKDAY(A12,2)=3),"")
足し算したときの日付と 日付に足し算したものを比較し、
同じなら今月なので 1つ上の行の曜日を求めて 3か4を足す
違うなら今月ではないので表示しない
「月 カレンダー 月・金 表示 → 日・水」の回答画像7
    • good
    • 0

ANo.5です。


失礼、A6に入れる式、先ほどのは編集中の全然無関係の式でした。
これを入れてください
=IF(MONTH(A$5+INT((7*COUNT(A$5:A5)+1*(WEEKDAY($A$5,2)=3))/2))=H$3,A$5+INT((7*COUNT(A$5:A5)+1*(WEEKDAY($A$5,2)=3))/2),"")
    • good
    • 0

いろいろなアプローチがあって面白いですね。


なるべく元の式を生かしたほうがいいのかなと思って補足を待っていたのですが、まだ無いので取り合えずこんな感じで。

A5に =DATE(D3,H3,1)+3+(WEEKDAY(DATE(D3,H3,1),2)>3)*4-WEEKDAY(DATE(D3,H3,1),2)
D3の年、H3の月を使い、その月の第一日曜日、第一水曜日の早いほうを表示しています。

A6に =IF(MONTH(A$5+INT((6+WEEKDAY(A$5))*COUNT(A$5:A5)/2))=H$3,A$5+INT((6+WEEKDAY(A$5))*COUNT(A$5:A5)/2),"")
と、入れて下にコピーしてください。

A$5+INT((6+WEEKDAY(A$5))*COUNT(A$5:A5)/2) でA5の日付以降の水曜日と日曜日を計算しています。
この計算で出された月がH3の月数と一致しなければ空白を表示します。

この回答への補足

=DATE(D3,H3,1)+3+(WEEKDAY(DATE(D3,H3,1),2)>3)*4-WEEKDAY(DATE(D3,H3,1),2)

2011/8/1 に3を加え(WEEKDAY(DATE(D3,H3,1),2)>3)*4-WEEKDAY(DATE(D3,H3,1),2)
とはどういう意味なのでしょう?

補足日時:2011/07/29 19:10
    • good
    • 0

A5セルには次の式を入力しては下方にオートフィルドラッグします。



=IF(MONTH(IF(AND(WEEKDAY(DATE(D$4,H$4,1))>1,WEEKDAY(DATE(D$4,H$4,1))<=4),IF(MOD(ROW(A1),2)=1,DATE(D$4,H$4,0)+8+(ROUNDUP(ROW(A1)/2,0)-1)*7-WEEKDAY(DATE(D$4,H$4,4)),IF(MOD(ROW(A1),2)=0,DATE(D$4,H$4,0)+8+(ROUNDUP(ROW(A1)/2,0)-1)*7-WEEKDAY(DATE(D$4,H$4,7)))),IF(MOD(ROW(A1),2)=1,DATE(D$4,H$4,0)+8+(ROUNDUP(ROW(A1)/2,0)-1)*7-WEEKDAY(DATE(D$4,H$4,7)),IF(MOD(ROW(A1),2)=0,DATE(D$4,H$4,0)+8+(ROUNDUP(ROW(A1)/2,0)-1)*7-WEEKDAY(DATE(D$4,H$4,4)),""))))<>H$4,"",IF(AND(WEEKDAY(DATE(D$4,H$4,1))>1,WEEKDAY(DATE(D$4,H$4,1))<=4),IF(MOD(ROW(A1),2)=1,DATE(D$4,H$4,0)+8+(ROUNDUP(ROW(A1)/2,0)-1)*7-WEEKDAY(DATE(D$4,H$4,4)),IF(MOD(ROW(A1),2)=0,DATE(D$4,H$4,0)+8+(ROUNDUP(ROW(A1)/2,0)-1)*7-WEEKDAY(DATE(D$4,H$4,7)))),IF(MOD(ROW(A1),2)=1,DATE(D$4,H$4,0)+8+(ROUNDUP(ROW(A1)/2,0)-1)*7-WEEKDAY(DATE(D$4,H$4,7)),IF(MOD(ROW(A1),2)=0,DATE(D$4,H$4,0)+8+(ROUNDUP(ROW(A1)/2,0)-1)*7-WEEKDAY(DATE(D$4,H$4,4)),""))))
    • good
    • 0

No2の回答には誤りがありました。



このケースでは、以下のような配列を使った数式にしたほうが簡単ですね。

A5セル(この数式を下方向にオートフィル)
=SMALL(IF(WEEKDAY(DATE($C$4,$H$4,0)+ROW($A$1:$A$31))={1,4},DATE($C$4,$H$4,0)+ROW($A$1:$A$31),""),ROW(A1))

配列数式ですので、入力後Ctrl+Shift+Enterで確定してください。

数式の意味は、C4とH4セルで表示されている月の前月の末日(=その月の0日)に1~31の数を加え(翌月の候補になる日付の配列)、この日付の曜日が日曜(1に相当)、水曜(4に相当)に該当する場合はそれぞれの日付を、そうでない場合は空白を返す配列を取得し、最後にこの配列の中から小さい順にデータを求めています。

また、この場合も、MONTH関数などを使って該当しないデータを空白表示するようにしてください。

例:(A6セルに入力する数式)
=IF(OR(A5="",MONTH(A5+7)<>$H$4),"",上記の数式のROW(A1)をROW(A2)にした数式)
    • good
    • 0

添付画像の数式が一部不鮮明でわからないのですが(配列数式を利用しているようですね)、水曜と金曜の日付を取得するなら、それぞれA5セル、A6セルに以下の数式を入力し、その2つのセルを下方向にオートフィルしたほうが簡単なように思います。



A5セル
=DATE($C$4,$H$4,1)+MOD(7-WEEKDAY(DATE($C$4,$H$4,0),2)+2,7)+INT((ROW(A1)-1)/2)*7

A6セル
=DATE($C$4,$H$4,1)+MOD(7-WEEKDAY(DATE($C$4,$H$4,0),2)+4,7)+INT((ROW(A2)-1)/2)*7

月が変わった部分を表示したくないなら、上記の関数の日付の「月」がH4セルと等しくない場合は空白に、そうでない場合は上記の数式を入力するような数式になります。

=IF(MONTH(上記の式)<>$H$4,"",上記の式)

数式を複雑化しないようにするなら、数式を使った条件付き書式で「=MONTH(A5)<>$H$4」として、フォントを白くすることで対応するのが良いと思います。
    • good
    • 0

補足願います。


式は画像では見づらいうえに入力が面倒です。
コピペ出来るように実際の式を補足に貼り付けてください。

この回答への補足

A5:=DATE(D3,H3,7-WEEKDAY(DATE(D3,H3,0)-(OR(WEEKDAY(DATE(D3,H3,1))={3,4,5,6}))*4,3))

A6:=IF(A5="","",IF(MONTH(A5+IF(WEEKDAY(A5)=2,4,3))=$H$3,A5+IF(WEEKDAY(A5)=2,4,3),""))

A7:=IF(A6="","",IF(MONTH(A6+IF(WEEKDAY(A6)=2,4,3))=$H$3,A6+IF(WEEKDAY(A6)=2,4,3),""))

遅れまして申し訳ありません。
<(_ _)>

補足日時:2011/07/29 18:46
    • good
    • 0

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