- ベストアンサー
VBからEXCELのセルの値を取得する方法
VBからEXCELファイルのあるセルの値を取得すると、本来の書式設定とは 違った形式で取得されてしまいます。 VBから値を取得する方法を教えて下さい。 *EXCELファイルのセルの設定 セルの書式設定-ユ-ザ-定義-[h]:mm (時刻ではなく、時間として設定しています) これをVBから普通に取得すると「1.7523548785」などといった 数値になってしまいます。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
[Worksheets(1).Cells(1,1).Value]や[Worksheets(1).Cells(1,1)] ではなく Worksheets(1).Cells(1,1).Text で取得
その他の回答 (6)
- imogasi
- ベストアンサー率27% (4737/17069)
私からすれば、こんなの当たり前です。エクセルは時刻はセルの「値」を24時間を1とする数値で持っているのは有名な話です。 書式で時刻のように見せてるだけです。それもセルに表示するときに限ります。時刻計算などは見た目の書式の有様(の量)で計算するのでなく、数「値」で計算します。ここをしっかり押さえないと。 VBからエクセル(VBAの)の世界に入って、左辺変数に=でセルの値を代入すれば、「値」をとるわけですから、数値になります。VBの世界に戻って扱えば、エクセルの書式の効力はなくなります。そこはプログラマーがVBの世界の書式設定の面倒を見なければなりません。 Format関数あたりがそれでしょう。 「マスク」については http://www.komonet.ne.jp/~vb/chap6.htm これはVB版だと思うが。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 #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)
変数sをstringで宣言して、 s = cells(y,x) で強引に"1:23:45"とかにならないかな。
- Somali_Shinji
- ベストアンサー率14% (45/305)
それでよいのです。Windows版エクセルでは、1.0は1990/1/1 0:0:0 をあらわします。2.0は1990/1/2 0:0:0 です。時間は小数点以下で表現されます。エクセルのヘルプ「日付と日付システムについて」を読んでみてください。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
値としては、正しい値でこれはしょうがないですね。 VBの方で、formatとかを使って書式を付けるしかないと思います。
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
CDate(Worksheets(1).Cells(1)) という方法もあり