Webマクロで春分の日/秋分の日を計算してみた。
クライアントマクロやVBAで書くのは良いのだけど、Int/Fixが使えない条件でできるのかどうか確かめた。データマクロでFixを使用して計算したものと比較して結果は一致した。
1949~2150の間のみ。
<?xml version="1.0" encoding="UTF-16" standalone="no"?>
<UserInterfaceMacros xmlns="http://schemas.microsoft.com/office/accessservices/2009/11/application">
<UserInterfaceMacro MinimumClientDesignVersion="14.0.0000.0000">
<Statements>
<Action Collapsed="true" Name="SetTempVar">
<Argument Name="Name">tmpArg1</Argument>
<Argument Name="Expression">[FYear]</Argument>
</Action>
<StatementGroup Description="春分の日">
<Statements>
<ConditionalBlock>
<If>
<Condition>[TempVars]![tmpArg1]<=2150 And [TempVars]![tmpArg1]>=1949</Condition>
<Statements>
<Action Collapsed="true" Name="SetLocalVar">
<Argument Name="Name">lclYS</Argument>
<Argument Name="Expression">[TempVars]![tmpArg1]-1980</Argument>
</Action>
<Action Collapsed="true" Name="SetLocalVar">
<Argument Name="Name">StrDiv4</Argument>
<Argument Name="Expression">FormatNumber([LocalVars]![lclYS]/4-IIf([LocalVars]![lclYS]<0,0.75,0),2,-1,0,0)</Argument>
</Action>
<Action Collapsed="true" Name="SetLocalVar">
<Argument Name="Name">IntDiv4</Argument>
<Argument Name="Expression">CDbl(Left([LocalVars]![StrDiv4],InStr(1,[LocalVars]![StrDiv4],".")-1))</Argument>
</Action>
<ConditionalBlock>
<If>
<Condition>[TempVars]![tmpArg1]<=1979</Condition>
<Statements>
<Action Collapsed="true" Name="SetLocalVar">
<Argument Name="Name">Var1</Argument>
<Argument Name="Expression">20.8357+(0.242194*[LocalVars]![lclYS])-[LocalVars]![IntDiv4]</Argument>
</Action>
</Statements>
</If>
<ElseIf>
<Condition>[TempVars]![tmpArg1]<=2099</Condition>
<Statements>
<Action Collapsed="true" Name="SetLocalVar">
<Argument Name="Name">Var1</Argument>
<Argument Name="Expression">20.8431+(0.242194*[LocalVars]![lclYS])-[LocalVars]![IntDiv4]</Argument>
</Action>
</Statements>
</ElseIf>
<Else>
<Statements>
<Action Collapsed="true" Name="SetLocalVar">
<Argument Name="Name">Var1</Argument>
<Argument Name="Expression">21.851+(0.242194*[LocalVars]![lclYS])-[LocalVars]![IntDiv4]</Argument>
</Action>
</Statements>
</Else>
</ConditionalBlock>
<Action Collapsed="true" Name="SetLocalVar">
<Argument Name="Name">StrVar1</Argument>
<Argument Name="Expression">FormatNumber([LocalVars]![Var1],8,-1,0,0)</Argument>
</Action>
<Action Collapsed="true" Name="SetLocalVar">
<Argument Name="Name">lclDay</Argument>
<Argument Name="Expression">CDbl(Left([LocalVars]![StrVar1],InStr(1,[LocalVars]![StrVar1],".")))</Argument>
</Action>
<Action Name="MessageBox">
<Argument Name="Message">=DateSerial([TempVars]![tmpArg1],3,[LocalVars]![lclDay])</Argument>
</Action>
</Statements>
</If>
</ConditionalBlock>
</Statements>
</StatementGroup>
<StatementGroup Description="秋分の日">
<Statements>
<ConditionalBlock>
<If>
<Condition>[TempVars]![tmpArg1]<=2150 And [TempVars]![tmpArg1]>=1949</Condition>
<Statements>
<Action Collapsed="true" Name="SetLocalVar">
<Argument Name="Name">lclYS</Argument>
<Argument Name="Expression">[TempVars]![tmpArg1]-1980</Argument>
</Action>
<Action Collapsed="true" Name="SetLocalVar">
<Argument Name="Name">StrDiv4</Argument>
<Argument Name="Expression">FormatNumber([LocalVars]![lclYS]/4-IIf([LocalVars]![lclYS]<0,0.75,0),2,-1,0,0)</Argument>
</Action>
<Action Collapsed="true" Name="SetLocalVar">
<Argument Name="Name">IntDiv4</Argument>
<Argument Name="Expression">CDbl(Left([LocalVars]![StrDiv4],InStr(1,[LocalVars]![StrDiv4],".")-1))</Argument>
</Action>
<ConditionalBlock>
<If>
<Condition>[TempVars]![tmpArg1]<=1979</Condition>
<Statements>
<Action Collapsed="true" Name="SetLocalVar">
<Argument Name="Name">Var1</Argument>
<Argument Name="Expression">23.2588+(0.242194*[LocalVars]![lclYS])-[LocalVars]![IntDiv4]</Argument>
</Action>
</Statements>
</If>
<ElseIf>
<Condition>[TempVars]![tmpArg1]<=2099</Condition>
<Statements>
<Action Collapsed="true" Name="SetLocalVar">
<Argument Name="Name">Var1</Argument>
<Argument Name="Expression">23.2488+(0.242194*[LocalVars]![lclYS])-[LocalVars]![IntDiv4]</Argument>
</Action>
</Statements>
</ElseIf>
<Else>
<Statements>
<Action Collapsed="true" Name="SetLocalVar">
<Argument Name="Name">Var1</Argument>
<Argument Name="Expression">24.2488+(0.242194*[LocalVars]![lclYS])-[LocalVars]![IntDiv4]</Argument>
</Action>
</Statements>
</Else>
</ConditionalBlock>
<Action Collapsed="true" Name="SetLocalVar">
<Argument Name="Name">StrVar1</Argument>
<Argument Name="Expression">FormatNumber([LocalVars]![Var1],8,-1,0,0)</Argument>
</Action>
<Action Collapsed="true" Name="SetLocalVar">
<Argument Name="Name">lclDay</Argument>
<Argument Name="Expression">CDbl(Left([LocalVars]![StrVar1],InStr(1,[LocalVars]![StrVar1],".")))</Argument>
</Action>
</Statements>
</If>
</ConditionalBlock>
<Action Name="MessageBox">
<Argument Name="Message">=DateSerial([TempVars]![tmpArg1],9,[LocalVars]![lclDay])</Argument>
</Action>
</Statements>
</StatementGroup>
</Statements>
</UserInterfaceMacro>
</UserInterfaceMacros><DataMacros xmlns="http://schemas.microsoft.com/office/accessservices/2009/11/application">
<DataMacro Event="BeforeChange">
<Statements>
<ConditionalBlock>
<If>
<Condition>[FYear]<=1979</Condition>
<Statements>
<Action Collapsed="true" Name="SetField">
<Argument Name="Field">DataMacro1</Argument>
<Argument Name="Value">DateSerial([FYear],3,Fix(20.8357+0.242194*([FYear]-1980)-Fix(([FYear]-1983)/4)))</Argument>
</Action>
<Action Collapsed="true" Name="SetField">
<Argument Name="Field">DataMacro2</Argument>
<Argument Name="Value">DateSerial([FYear],9,Fix(23.2588+0.242194*([FYear]-1980)-Fix(([FYear]-1983)/4)))</Argument>
</Action>
</Statements>
</If>
<ElseIf>
<Condition>[FYear]<=2099</Condition>
<Statements>
<Action Collapsed="true" Name="SetField">
<Argument Name="Field">DataMacro1</Argument>
<Argument Name="Value">DateSerial([FYear],3,Fix(20.8431+0.242194*([FYear]-1980)-Fix(([FYear]-1980)/4)))</Argument>
</Action>
<Action Collapsed="true" Name="SetField">
<Argument Name="Field">DataMacro2</Argument>
<Argument Name="Value">DateSerial([FYear],9,Fix(23.2488+0.242194*([FYear]-1980)-Fix(([FYear]-1980)/4)))</Argument>
</Action>
</Statements>
</ElseIf>
<ElseIf>
<Condition>[FYear]<=2150</Condition>
<Statements>
<Action Collapsed="true" Name="SetField">
<Argument Name="Field">DataMacro1</Argument>
<Argument Name="Value">DateSerial([FYear],3,Fix(21.851+0.242194*([FYear]-1980)-Fix(([FYear]-1980)/4)))</Argument>
</Action>
<Action Collapsed="true" Name="SetField">
<Argument Name="Field">DataMacro2</Argument>
<Argument Name="Value">DateSerial([FYear],9,Fix(24.2488+0.242194*([FYear]-1980)-Fix(([FYear]-1980)/4)))</Argument>
</Action>
</Statements>
</ElseIf>
</ConditionalBlock>
</Statements>
</DataMacro>
</DataMacros>
0 件のコメント:
コメントを投稿