• ベストアンサー

VBからEXCELのセルの値を取得する方法

VBからEXCELファイルのあるセルの値を取得すると、本来の書式設定とは 違った形式で取得されてしまいます。 VBから値を取得する方法を教えて下さい。 *EXCELファイルのセルの設定  セルの書式設定-ユ-ザ-定義-[h]:mm   (時刻ではなく、時間として設定しています) これをVBから普通に取得すると「1.7523548785」などといった 数値になってしまいます。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

[Worksheets(1).Cells(1,1).Value]や[Worksheets(1).Cells(1,1)] ではなく Worksheets(1).Cells(1,1).Text で取得

その他の回答 (6)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.7

私からすれば、こんなの当たり前です。エクセルは時刻はセルの「値」を24時間を1とする数値で持っているのは有名な話です。 書式で時刻のように見せてるだけです。それもセルに表示するときに限ります。時刻計算などは見た目の書式の有様(の量)で計算するのでなく、数「値」で計算します。ここをしっかり押さえないと。 VBからエクセル(VBAの)の世界に入って、左辺変数に=でセルの値を代入すれば、「値」をとるわけですから、数値になります。VBの世界に戻って扱えば、エクセルの書式の効力はなくなります。そこはプログラマーがVBの世界の書式設定の面倒を見なければなりません。 Format関数あたりがそれでしょう。 「マスク」については http://www.komonet.ne.jp/~vb/chap6.htm これはVB版だと思うが。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

こんばんは。 #1 さんにかぶりますが、ちょっと試してみました。 「[h]:mm 」 こういう書式ですと、Text のほうが後処理が簡単のようです。 サンプルコード Dim objXlApp As New Excel.Application With objXlApp  .Workbooks.Open "D:\testtime.xls" Debug.Print .Worksheets("Sheet1").Range("A1").Text  .ActiveWorkbook.Close True  .Quit End With ただ、その下の桁の時間情報まで使うとなれば、.Value プロパティが必要です。

  • gugux
  • ベストアンサー率16% (68/413)
回答No.5

変数sをstringで宣言して、 s = cells(y,x) で強引に"1:23:45"とかにならないかな。

回答No.4

それでよいのです。Windows版エクセルでは、1.0は1990/1/1 0:0:0 をあらわします。2.0は1990/1/2 0:0:0 です。時間は小数点以下で表現されます。エクセルのヘルプ「日付と日付システムについて」を読んでみてください。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

値としては、正しい値でこれはしょうがないですね。 VBの方で、formatとかを使って書式を付けるしかないと思います。

回答No.2

CDate(Worksheets(1).Cells(1)) という方法もあり

関連するQ&A