こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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

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

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

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

投稿日時 - 2005-07-11 17:42:15

QNo.1506523

困ってます

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

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

Worksheets(1).Cells(1,1).Text
で取得

投稿日時 - 2005-07-11 17:48:06

ANo.1

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(7)

ANo.7

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

投稿日時 - 2005-07-11 22:13:13

ANo.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 プロパティが必要です。

投稿日時 - 2005-07-11 19:23:38

ANo.5

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

投稿日時 - 2005-07-11 17:55:09

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

投稿日時 - 2005-07-11 17:52:42

ANo.3

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

投稿日時 - 2005-07-11 17:49:25

ANo.2

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

投稿日時 - 2005-07-11 17:49:05

あなたにオススメの質問