• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB6で、表示させた時間をExcelのセルに書き込む際の質問です!)

VB6での時間表示とExcel書き込みの問題

このQ&Aのポイント
  • VB6で表示させた時間をExcelのセルに書き込む際の問題について質問です。
  • VB6でGetLapTimeという関数を作成し、時間を取得しています。
  • Excelに書き込む際にはxlSheet.Cells(a + 1, 2).Value = GetLapTimeというコードを使用していますが、正常に表示されない場合があります。なぜでしょうか?

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

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

エクセルの自動機能で数値表示されてしまうのでしょう。 セルの表示形式を文字列にして書き込んだらいかがですか? (予め、列ごと一括で書式変更してしまっても良いでしょう。) xlSheet.Cells(a + 1, 2).NumberFormatLocal = "@" xlSheet.Cells(a + 1, 2).Text = GetLapTime

dondada0607
質問者

お礼

ありがとうございます!! 正常に表示されました。

すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.3

方法1 xlSheet.Cells(a + 1, 2).Value = GetLapTime を xlSheet.Cells(a + 1, 2).Text = GetLapTime に変更する。 方法2 xlSheet.Cells(a + 1, 2).Value = GetLapTime を xlSheet.Cells(a + 1, 2).NumberFormatLocal = "@" xlSheet.Cells(a + 1, 2).Value = GetLapTime に変更する。 方法3 strTime = Format(intMinute, "00") & ":" & _ Format(intSec, "00") & ":" & _ Format(intMillsec, "000") を strTime = "00:" & _ Format(intMinute, "00") & ":" & _ Format(intSec, "00") & "." & _ Format(intMillsec, "000") に変更し xlSheet.Cells(a + 1, 2).Value = GetLapTime を xlSheet.Cells(a + 1, 2).NumberFormatLocal = "mm:ss.000" xlSheet.Cells(a + 1, 2).Value = GetLapTime に変更する。 おかしくなる原因は以下の通り。 ・エクセルでは「00:23.214」などの値は「時刻型」と判断する。そしてそれは「時:分:秒」と解釈する。 ・エクセルの「時刻型」は「24時間を1とした数値」なので、値の実体は「0.238217943」のような数値になる。 ・セルの書式が数値のままのセルに時刻を代入すると値は数値のまま表示される。 従って「00:23:214」は「0時間23分21秒」と解釈され、値は、0/24+23/1440+21/86400=0.016215278になります。 数値になってしまったセルの書式を「hh:mm:ss」にしてみると「秒が狂ったそれっぽい値」が表示される筈です。 因みに、10回に1回くらい成功するのは「ミリ秒の部分の末尾が0の時だけ、エクセルが時刻型として認識できず、文字列として代入されたから」です。「末尾が0になるのは10回に1回」なので「10回に1回成功する」のは当たり前です。 そういう訳で、貴方が「00:23:214は、0分23コンマ214秒」だと考えても、エクセルは「数字:数字:数字と来たら、それは時:分:秒」だと勝手に解釈して、勝手に「時刻型」にしてしまいます。 なので、 方法1:Textプロパティに文字列を強制代入する 方法2:書式を文字列にしてValueプロパティに代入する 方法3:書式を「mm:ss.000」に設定した上で、エクセルの書式に合わせ「時:分:秒.ミリ秒」のような「時刻型として解釈可能な値」をValue代入する 方法3は、当然ですが、秒とミリ秒の区切りは「.」しか使えません。エクセルは「数字:数字:数字と来たら、それは時:分:秒」だと勝手に解釈しますから「.」を「:」にしようとするとエラーになります。

dondada0607
質問者

お礼

すごい詳しい説明ありがとうございます!! とても勉強になりました。 ベストアンサーに選んだあとに確認してしまったので、ベストアンサーに出来ずすいませんでした! 方法3を使わせていただきました。

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.2

エクセルでは時刻は24時間(1日)を1とし、例えば3時なら3/24の小数点つき数でセルの値は持ちます。セルの値と見た目は分裂しているのです。 なぜこれが3:00:00に見えるというと、エクセルの日付・時刻の表示形式の機能が働くからです。 ーー この質問はこの基本事項を知らないために質問しているように見える。 メニューの書式ーセルの「表示形式」のタブのところでーセルの書式に時刻の表示形式を設定しておけば3:00:00のようにもみせられるし、ユーザー定義で 前もってでも事後でも h"時"m"分"s"秒"などを(色々表現は在る)設定すれば3時0分0秒 という見た目になる。 日付・時刻のセルでは、ユーザー定義では色々変わった風に見た目を設定できる場合がある。 VBに詳しくても、エクセルやエクセルVBAを扱うにはエクセルの勉強が必要な証左かと思う。 GooGleででも「エクセル 時刻 表示形式」出照会すれば沢山記事がある。 http://soumukouboo.blog91.fc2.com/blog-entry-117.html http://www.excel.studio-kazu.jp/lib/e3g/e3g.html VBプログラムでもじれつを作って実現するより、エクセルにおんぶしたほうが、安全(プロチョンなし)手軽です。 もちろんエクセルVBAで表示形式の設定はコードで出来ます。NumberFormatです。

dondada0607
質問者

お礼

参照サイトまで記載していただいてありがとうございます! Excelの表示形式の機能というものがあるとは知りませんでした。 次からはもっと調べてから質問したいと思います。 ありがとうございました!!

すると、全ての回答が全文表示されます。

関連するQ&A