回答No.25の続きです。
それで「MT損益計算 - テスト」の改良案に関してですが、まず「設定」シートに関しましては、回答No.10に対して質問者様が書かれたお礼コメント内容である
>そうしますと、右にずらし、
>「設定」シートのD3(サーバー時間の夏時間のGMT)
>「設定」シートのE3(サーバー時間の冬時間のGMT)
>「設定」シートのF3(夏時間の開始日時)
>「設定」シートのG3(夏時間の終了日時)
>とするのがよいかと思います。
に準じて「設定」シートのA列~G列を変更して下さい。
それに加えて「設定」シートに以下の様な変更点を追加して下さい。
まず、「設定」シートのI1セルとI2セルを結合して下さい。
そしてその結合セルに「夏時間 有無」と入力して下さい。
次に、「設定」シートのJ1セル~M1セルを結合して下さい。
そしてその結合セルに「夏時間開始日時」と入力して下さい。
次に、「設定」シートのN1セル~R1セルを結合して下さい。
そしてその結合セルに「夏時間終了日時」と入力して下さい。
次に、「設定」シートのJ3セルとO3セルに「月」と入力して下さい。
次に、「設定」シートのK3セルとP3セルに「週」と入力して下さい。
次に、「設定」シートのL3セルとQ3セルに「曜日」と入力して下さい。
次に、「設定」シートのM3セルとR3セルに「時刻」と入力して下さい。
次に、N3セルに「加算年」と入力して下さい。
次に「設定」シートのI3セルに次の関数を入力して下さい。
=IF($D3&$E3&$F3&$G3="","",IF(AND($D3>=-12,$D3<=14,COUNTIF($F3,"*?月???曜日*?:??"),ISNUMBER(("1904年"&LEFT($F3,FIND("月",$F3)))+
MATCH(MID($F3,FIND("月",$F3)+1,2),{"第1","第2","第3","第4","第5","最終"},0)+
FIND(MID($F3,FIND("曜日",$F3)-1,1),"月火水木金土日")+1/(REPLACE($F3,1,FIND("曜日",$F3)+1,)+0>=0)/(REPLACE($F3,1,FIND("曜日",$F3)+1,)+0<1)),COUNTIF($G3,"*?月???曜日*?:??"),ISNUMBER(("1904年"&REPLACE(LEFT($G3,FIND("月",$G3)),1,2*(LEFT($G3,2)="翌年"),))+
MATCH(MID($G3,FIND("月",$G3)+1,2),{"第1","第2","第3","第4","第5","最終"},0)+
FIND(MID($G3,FIND("曜日",$G3)-1,1),"月火水木金土日")+1/(REPLACE($G3,1,FIND("曜日",$G3)+1,)+0>=0)/(REPLACE($G3,1,FIND("曜日",$G3)+1,)+0<1))),"有",IF(AND($E3>=-12,$E3<=14,$D3&$F3&$G3=""),"無","無効な設定")))
次に「設定」シートのJ3セルに次の関数を入力して下さい。
=IF($I3="有",LEFT($F3,FIND("月",$F3)-1)+0,"")
次に「設定」シートのK3セルに次の関数を入力して下さい。
=IF($I3="有",IF(ISNUMBER(FIND("最終",$F3)),"最終",MID($F3,FIND("第",$F3)+1,1)+0),"")
次に「設定」シートのL3セルに次の関数を入力して下さい。
=IF($I3="有",MID($F3,FIND("曜日",$F3)-1,1),"")
次に「設定」シートのM3セルに次の関数を入力して下さい。
=IF($I3="有",REPLACE($F3,1,FIND("曜日",$F3)+1,)+0,"")
次に「設定」シートのN3セルに次の関数を入力して下さい。
=IF($I3="有",(LEFT($G3,2)="翌年")+0,"")
次に「設定」シートのO3セルに次の関数を入力して下さい。
=IF($I3="有",SUBSTITUTE(LEFT($G3,FIND("月",$G3)-1),"翌年",)+0,"")
次に「設定」シートのP3セルに次の関数を入力して下さい。
=IF($I3="有",IF(ISNUMBER(FIND("最終",$G3)),"最終",MID($G3,FIND("第",$G3)+1,1)+0),"")
次に「設定」シートのQ3セルに次の関数を入力して下さい。
=IF($I3="有",MID($G3,FIND("曜日",$G3)-1,1),"")
次に「設定」シートのR3セルに次の関数を入力して下さい。
=IF($I3="有",REPLACE($G3,1,FIND("曜日",$G3)+1,)+0,"")
次に「損益計算」シートに関してですが、このシートのみはレイアウトが変わりますので以下の様に作り直して下さい。
まず、「損益計算」シートのA1セルとB1セルを結合して下さい。
そしてその結合セルに「取引開始日時」と入力して下さい。
次に「損益計算」シートのC1セルとD1セルを結合して下さい。
そしてその結合セルに「取引終了日時」と入力して下さい。
次に「損益計算」シートのA2セルに「現地サーバー時間」と入力して下さい。
次に「損益計算」シートのA3セルに次の関数を入力して下さい。
=IF(OR(元データ!$A3="",元データ!$B3=""),"",IFERROR(SUBSTITUTE(元データ!$B3,".","/")/COUNTIF(元データ!$B3,"????.??.?? ??:??*"),"変換不能"))
次に「損益計算」シートのB2セルに「日本時間」と入力して下さい。
次に「損益計算」シートのB3セルに次の関数を入力して下さい。
=IF(ISNUMBER($A3),IF(OR(設定!$I$3="無",AND(IF(ISNUMBER(設定!$K$3),MONTH(DATE(YEAR($A3),設定!$J$3,8-WEEKDAY(YEAR($A3)&"/"&設定!$J$3,FIND(設定!$L$3,"日月火水木金土")+10)+(設定!$K$3-1)*7))=設定!$J$3,設定!$K$3="最終"),IF(ISNUMBER(設定!$P$3),MONTH(DATE(YEAR($A3)+設定!$N$3,設定!$O$3,8-WEEKDAY(YEAR($A3)+設定!$N$3&"/"&設定!$O$3,FIND(設定!$Q$3,"日月火水木金土")+10)+(設定!$P$3-1)*7))=設定!$O$3,設定!$P$3="最終"))),TEXT($A3+(9-IF(IF(設定!$I$3="有",AND($A3>DATE(YEAR($A3),設定!$J$3+(設定!$K$3="最終"),8-WEEKDAY(YEAR($A3)&"/"&設定!$J$3+(設定!$K$3="最終"),FIND(設定!$L$3,"日月火水木金土")+10)+(SUM(設定!$K$3)-1)*7)+設定!$M$3,$A3<DATE(YEAR($A3)+設定!$N$3,設定!$O$3+(設定!$P$3="最終"),8-WEEKDAY(YEAR($A3)+設定!$N$3&"/"&設定!$O$3+(設定!$P$3="最終"),FIND(設定!$Q$3,"日月火水木金土")+10)+(SUM(設定!$P$3)-1)*7)+設定!$R$3),FALSE),設定!$D$3,設定!$E$3))/24+0.000001,"yyyy/m/d h:m:s")+0,"変換不能"),"")
次に「損益計算」シートのC2セルに「現地サーバー時間」と入力して下さい。
次に「損益計算」シートのC3セルに次の関数を入力して下さい。
=IF(OR(元データ!$A3="",元データ!$I3=""),"",IFERROR(SUBSTITUTE(元データ!$I3,".","/")/COUNTIF(元データ!$I3,"????.??.?? ??:??*"),"変換不能"))
※まだ途中なのですが、そろそろこのサイトの回答欄に入力可能な文字数の限度を超えてしまいますので、残りは又後に投稿致します。
お礼
回答ありがとうございます。 申し訳ありません。 回答者様のおっしゃる通り、「損益計算」シートで再度調べたところ22日でした。 焦って確認したせいか抜けていた部分がありました。 日本時間では、2011年7月23日 0:31:00(開始日時)~2011年7月23日 1:06:00(終了日時)となっており、土曜日に行われていました。 土・日・元日は、取り引きが行われていないというのが一般的に言われていることなんですが、土曜日に限っては厳密に金曜日の23:59:59に終了というわけではなく、土曜日の早朝まで取り引きが行われていまして、本来ならそこまで計算に入れなければならなかったんです。 ですが、ここではもうそれができないため、新規の質問を検討したいと思います。 正しいご指摘、ありがとうございます。 また、この件に関しまして質問する際には是非とも回答をいただけたら大変ありがたいです。 ありがとうございました。