ちょっとハマったので後々のためにメモ
ActiveDirectoryから csvde なんかで LastLogon を拾ってくると、1601/01/01からの経過ナノ秒が取得できるけど、Excelで扱うにはこの「1601/01/01からの経過ナノ秒」てのがどうにも扱いにくい。
Excelの日付は1900/01/01からの経過日数なので、単純に考えれば LastLogon の値を10,000,000 で割って(秒にする)、60で割って(分にする)、60で割って(時にする)、24で割って(日にする)やったもの(1601/01/01からの経過日数)に、1601/01/01から1900/01/01の経過日数を引いてやればいいはず。
ただ、Excelでは1900年より前の日付を扱えないから、肝心の「1601/01/01から1900/01/01の経過日数」が何日なのかわからない。
で、さんざん唸っていたんですが、http://okwave.jp/qa3239110.html をみて目からウロコが。
基準となる日付を1000年先に進めて、LastLogonの値を「2601/01/01からの経過日数」として計算することはExcelでも可能。ただ、このままだと結果の日付も1000年先になっちゃう。なので、1000年分の日数(2006/1/1から3006/1/1の日数)をこの値から引いてやるとばっちりなのではないかと。
ということで、あらためて Excel をいじってみると、
1900/1/1 から 2006/1/1 までの日数:256037日
2006/1/1 から 3006/1/1 までの10年間の日数:365242日
なので、最終的には、
<LastLogonのシリアル値>/10000000/60/60/24+256037-365242
で計算できそうです。ただ、閏日なんかの計算がこれで本当にあってるのかはわからないのであくまで近似値ということで。最終ログオン日がいつくらいなのかを知りたいだけなので、この程度の精度でいなば的には十分。
