by まっ » 2008年2月18日(月) 00:56
''''' DataValueString6 日付・日付値・日付文字列取得・6桁
Function ZDTEVS6(ZDTV as long) as string
ZDTEVS6="" : If ZDTV<=37986 then Exit Function
Dim ZYAR as long , ZMON as long , ZDAY as long , ZURU as long , ZVAL as long
ZDAY=ZDTV-37986 : ZYAR=Int((ZDAY-1)/1461) : ZDAY=ZDAY-(ZYAR*1461) : ZYAR=ZYAR*4
ZURU=1 : If ZDAY>366 then ZYAR=ZYAR+1 : ZDAY=ZDAY-366 : ZURU=0 : ZVAL=Int((ZDAY-1)/365) : ZYAR=ZYAR+ZVAL : ZDAY=ZDAY-(ZVAL*365)
If ZDAY<=31 then ZMON=1 else ZDAY=ZDAY-31 : If ZDAY<=(28+ZURU) then ZMON=2 else ZDAY=ZDAY-(28+ZURU) : If ZDAY<=31 then ZMON=3 else ZDAY=ZDAY-31 : If ZDAY<=30 then ZMON=4 else ZDAY=ZDAY-30 : If ZDAY<=31 then ZMON=5 else ZDAY=ZDAY-31 : If ZDAY<=30 then ZMON=6 else ZDAY=ZDAY-30 : If ZDAY<=31 then ZMON=7 else ZDAY=ZDAY-31 : If ZDAY<=31 then ZMON=8 else ZDAY=ZDAY-31 : If ZDAY<=30 then ZMON=9 else ZDAY=ZDAY-30 : If ZDAY<=31 then ZMON=10 else ZDAY=ZDAY-31 : If ZDAY<=30 then ZMON=11 else ZDAY=ZDAY-30 : ZMON=12
ZYAR=ZYAR+4 : ZDTEVS6=Str$(ZDAY) : ZDTEVS6=ZSTRRGZ(ZDTEVS6,2) : ZDTEVS6=Str$(ZMON)+ZDTEVS6 : ZDTEVS6=ZSTRRGZ(ZDTEVS6,4) : ZDTEVS6=Str$(ZYAR)+ZDTEVS6 : ZDTEVS6=ZSTRRGZ(ZDTEVS6,6)
End Function
戻値 ZDTEVS6
yymmdd の6桁の文字列。
引数 ZDTV
だいたいのWindowsソフトで共通の日付値です。と思います。エクセルで検証しました。
年
西暦です。2000年以降の年しか考慮していません。
西暦で
通常は年365日。4で割れる年は366日。100で割れる年は365日。400で割れる年は366日。。。だったと思う。
~Ptrの使い方がイマイチ勉強不足で string型 を使用してます。カンベンして。
と思います。が多くてすいません。だいぶ前に作ったので多少のコメント違いはあるかもしれませんが、コードは現在進行形で使用中ですので間違いは無いと思います。と思います。
''''' StringRightZero 文字列・右・頭0整形
Function ZSTRRGZ(ZSTR as string, ZLEN as long) as string
ZSTRRGZ=String$(ZLEN,"0")+ZSTR : ZSTRRGZ=ZSTRRGT(ZSTRRGZ,ZLEN)
End Function
''''' StringRight 文字列・右
Function ZSTRRGT(ZSTR as string, ZLEN as long) as string
Dim ZLEN as long
ZSTRRGT="" : If ZLEN<1 then Exit Function
ZLEN=Len(ZSTR) : If ZLEN<1 then Exit Function
ZSTRRGT=ZSTR : If ZLEN<=ZLEN then Exit Function
ZSTRRGT=ZeroString(ZLEN) : memcpy(StrPtr(ZSTRRGT),StrPtr(ZSTR)+ZLEN-ZLEN,ZLEN)
End Function
''''' DataValueString6 日付・日付値・日付文字列取得・6桁
Function ZDTEVS6(ZDTV as long) as string
ZDTEVS6="" : If ZDTV<=37986 then Exit Function
Dim ZYAR as long , ZMON as long , ZDAY as long , ZURU as long , ZVAL as long
ZDAY=ZDTV-37986 : ZYAR=Int((ZDAY-1)/1461) : ZDAY=ZDAY-(ZYAR*1461) : ZYAR=ZYAR*4
ZURU=1 : If ZDAY>366 then ZYAR=ZYAR+1 : ZDAY=ZDAY-366 : ZURU=0 : ZVAL=Int((ZDAY-1)/365) : ZYAR=ZYAR+ZVAL : ZDAY=ZDAY-(ZVAL*365)
If ZDAY<=31 then ZMON=1 else ZDAY=ZDAY-31 : If ZDAY<=(28+ZURU) then ZMON=2 else ZDAY=ZDAY-(28+ZURU) : If ZDAY<=31 then ZMON=3 else ZDAY=ZDAY-31 : If ZDAY<=30 then ZMON=4 else ZDAY=ZDAY-30 : If ZDAY<=31 then ZMON=5 else ZDAY=ZDAY-31 : If ZDAY<=30 then ZMON=6 else ZDAY=ZDAY-30 : If ZDAY<=31 then ZMON=7 else ZDAY=ZDAY-31 : If ZDAY<=31 then ZMON=8 else ZDAY=ZDAY-31 : If ZDAY<=30 then ZMON=9 else ZDAY=ZDAY-30 : If ZDAY<=31 then ZMON=10 else ZDAY=ZDAY-31 : If ZDAY<=30 then ZMON=11 else ZDAY=ZDAY-30 : ZMON=12
ZYAR=ZYAR+4 : ZDTEVS6=Str$(ZDAY) : ZDTEVS6=ZSTRRGZ(ZDTEVS6,2) : ZDTEVS6=Str$(ZMON)+ZDTEVS6 : ZDTEVS6=ZSTRRGZ(ZDTEVS6,4) : ZDTEVS6=Str$(ZYAR)+ZDTEVS6 : ZDTEVS6=ZSTRRGZ(ZDTEVS6,6)
End Function
戻値 ZDTEVS6
yymmdd の6桁の文字列。
引数 ZDTV
だいたいのWindowsソフトで共通の日付値です。と思います。エクセルで検証しました。
年
西暦です。2000年以降の年しか考慮していません。
西暦で
通常は年365日。4で割れる年は366日。100で割れる年は365日。400で割れる年は366日。。。だったと思う。
~Ptrの使い方がイマイチ勉強不足で string型 を使用してます。カンベンして。
と思います。が多くてすいません。だいぶ前に作ったので多少のコメント違いはあるかもしれませんが、コードは現在進行形で使用中ですので間違いは無いと思います。と思います。
''''' StringRightZero 文字列・右・頭0整形
Function ZSTRRGZ(ZSTR as string, ZLEN as long) as string
ZSTRRGZ=String$(ZLEN,"0")+ZSTR : ZSTRRGZ=ZSTRRGT(ZSTRRGZ,ZLEN)
End Function
''''' StringRight 文字列・右
Function ZSTRRGT(ZSTR as string, ZLEN as long) as string
Dim ZLEN as long
ZSTRRGT="" : If ZLEN<1 then Exit Function
ZLEN=Len(ZSTR) : If ZLEN<1 then Exit Function
ZSTRRGT=ZSTR : If ZLEN<=ZLEN then Exit Function
ZSTRRGT=ZeroString(ZLEN) : memcpy(StrPtr(ZSTRRGT),StrPtr(ZSTR)+ZLEN-ZLEN,ZLEN)
End Function