プロが教える店舗&オフィスのセキュリティ対策術

VBからEXCELファイルのあるセルの値を取得すると、本来の書式設定とは
違った形式で取得されてしまいます。
VBから値を取得する方法を教えて下さい。

*EXCELファイルのセルの設定

 セルの書式設定-ユ-ザ-定義-[h]:mm
  (時刻ではなく、時間として設定しています)

これをVBから普通に取得すると「1.7523548785」などといった
数値になってしまいます。

A 回答 (7件)

[Worksheets(1).Cells(1,1).Value]や[Worksheets(1).Cells(1,1)]


ではなく

Worksheets(1).Cells(1,1).Text
で取得
    • good
    • 4

私からすれば、こんなの当たり前です。

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

こんばんは。



#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 プロパティが必要です。
    • good
    • 0

変数sをstringで宣言して、


s = cells(y,x)
で強引に"1:23:45"とかにならないかな。
    • good
    • 0

それでよいのです。

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

値としては、正しい値でこれはしょうがないですね。


VBの方で、formatとかを使って書式を付けるしかないと思います。
    • good
    • 0

CDate(Worksheets(1).Cells(1))


という方法もあり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A