tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルエクセル上の時間表示データの取得方法
記事No6437
投稿日: 2007/10/13(Sat) 11:18
投稿者
いつもお世話になります。
VB.netを始めて3ヶ月ちょっとのKと申します。
開発環境はWindowsXP Pro VB.net2003です。

エクセルに登録されているデータをVB.netを使って
ACCESSで作成したデータベースに登録をしようとしているのですが
エクセル上で時間で表示されているデータを取り込むと
小数点の数字で取り込んでしまいます。
例)エクセル上データが10:22
  VB.netで取得したデータ:0.4319444444
CDate関数を使ってみたりしたのですが
「型'Doble'から型'Date'へのキャストが有効ではありません。」
とエラーが出てしまします。
これを時間に変換する方法はあるのでしょうか?
それとも、ちゃんと時間で取り込む方法はあるのでしょうか?
自分で、時間に変換する関数を作るしかないのでしょうか?

ご教授、よろしくお願いいたいます。

[ツリー表示へ]
タイトルRe: エクセル上の時間表示データの取得方法
記事No6440
投稿日: 2007/10/14(Sun) 02:04
投稿者魔界の仮面弁士
> 例)エクセル上データが10:22
>   VB.netで取得したデータ:0.4319444444
VBA の世界で言えば、
 Debug.Print CDbl(#10:22:00 AM#)
は「0.431944444444444」なので、内部表現としては同じ値ですね。

> 「型'Doble'から型'Date'へのキャストが有効ではありません。」
> とエラーが出てしまします。
.NET の世界で言えば、
 Debug.WriteLine(#10:22:00 AM#.ToOADate())
は「0.431944444444444」ですし、
 Debug.WriteLine(Date.FromOADate(0.431944444444444R).ToString("hh\:mm"))
は「10:22」です。

> それとも、ちゃんと時間で取り込む方法はあるのでしょうか?
時刻データではなく、日付(または日付と時刻)のデータであれば、
Data 型で受け取れるのですが、時刻のみのデータについては、
そもそも「時刻型」や「時間型」が存在しないせいか、Range.Value が
Double 値になってしまうようですね。

[ツリー表示へ]
タイトルRe^2: エクセル上の時間表示データの取得方法
記事No6452
投稿日: 2007/10/19(Fri) 13:22
投稿者
魔界の仮面弁士様、いつもありがとうございます。
返答が遅くなり、申し訳ありません。
ToStringで、フォーマットを指定すればいいんですね。
いつも勉強になります。
これを参考にして、やってみます。
ありがとうございましたm(__)m

> > 例)エクセル上データが10:22
> >   VB.netで取得したデータ:0.4319444444
> VBA の世界で言えば、
>  Debug.Print CDbl(#10:22:00 AM#)
> は「0.431944444444444」なので、内部表現としては同じ値ですね。
>
> > 「型'Doble'から型'Date'へのキャストが有効ではありません。」
> > とエラーが出てしまします。
> .NET の世界で言えば、
>  Debug.WriteLine(#10:22:00 AM#.ToOADate())
> は「0.431944444444444」ですし、
>  Debug.WriteLine(Date.FromOADate(0.431944444444444R).ToString("hh\:mm"))
> は「10:22」です。
>
> > それとも、ちゃんと時間で取り込む方法はあるのでしょうか?
> 時刻データではなく、日付(または日付と時刻)のデータであれば、
> Data 型で受け取れるのですが、時刻のみのデータについては、
> そもそも「時刻型」や「時間型」が存在しないせいか、Range.Value が
> Double 値になってしまうようですね。

[ツリー表示へ]