Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1193 / 13645 ツリー ←次へ | 前へ→

【75741】時間表示 yoyo 14/6/25(水) 12:57 質問[未読]
【75742】Re:時間表示 γ 14/6/25(水) 20:25 回答[未読]
【75744】Re:時間表示 yoyo 14/6/25(水) 22:27 お礼[未読]
【75743】Re:時間表示 ichinose 14/6/25(水) 20:57 発言[未読]
【75745】Re:時間表示 yoyo 14/6/25(水) 22:30 お礼[未読]

【75741】時間表示
質問  yoyo  - 14/6/25(水) 12:57 -

引用なし
パスワード
   エクセルVBAのフォームで時間表示することで
つまづいてます。

エクセルのセルから値を取得しフォームで下記のように指定してます。
nt = Format(nt, "hh:mm")
基本、表示できているのですが値が12:00の時だけ
思うような表示になりません。

nt=セルの値
セルには12:00と入ってます。セルの書式は[h]:mmで
値を取得した時は0.5と表示されます。
ここまではいいのですが、nt = Format(nt, "hh:mm")にしたとたん
00:05と表示されます。
セルの値が12:01の時はちゃんと12:01表示されますが
12:00の場合のみの症状です。
何か原因があるのでしょうか?

当方、Win7 excel2010にて作業してます。

【75742】Re:時間表示
回答  γ  - 14/6/25(水) 20:25 -

引用なし
パスワード
   こんにちは。不思議ですね。
こちらでは、そうしたことは起きませんねえ。

こちらでも再現できるようなコードを提示してもらえませんか?
文章ではなく、
Sub で始まり、End Subで終わる、変数の宣言も含めたものを
提示しませんか?

【75743】Re:時間表示
発言  ichinose  - 14/6/25(水) 20:57 -

引用なし
パスワード
   こんばんは。

>エクセルVBAのフォームで時間表示することで
>つまづいてます。
>
>エクセルのセルから値を取得しフォームで下記のように指定してます。
>nt = Format(nt, "hh:mm")
>基本、表示できているのですが値が12:00の時だけ
>思うような表示になりません。
このntを説明する記述がありませんね!!
このntが何なのか? の説明をしてくださいね。
質問者がご自分が分からないところまで閲覧者を導く記述をする
これ、よい訓練になりますよ!!
>
>nt=セルの値
>セルには12:00と入ってます。セルの書式は[h]:mmで
>値を取得した時は0.5と表示されます。
>ここまではいいのですが、nt = Format(nt, "hh:mm")にしたとたん
>00:05と表示されます。
>セルの値が12:01の時はちゃんと12:01表示されますが
>12:00の場合のみの症状です。
>何か原因があるのでしょうか?
この現象が発生する場合のntは、

ntがString型の変数
ユーザーフォームという記述がありますから、
ntがテキストボックスコントロールの場合などこのような現象が
おこりますね!!

仮にntが文字列型変数の場合

sub test()
  dim nt as string
  nt=range("a1").value 'セルa1に12:00という時刻が入っているとすると
 'ntは、0.5という文字列が格納されます。0.5という数値ではありません。
 '困ったことに 文字列0.5は、0時5分と解釈してしまいます。よって、
 '記述されたような現象が発生します。ntがテキストボックスの場合も
 '同じです。
 msgbox format(nt,"hh:mm")
End sub
セルA1に6:00という時刻が入力されていても同じような現象が発生します

はっきり時刻型に変換してあげましょう


sub test2()
  dim nt as string
  nt=cdate(range("a1").value)
  nt=format(nt,"hh:mm")
  msgbox nt
end sub

【75744】Re:時間表示
お礼  yoyo  - 14/6/25(水) 22:27 -

引用なし
パスワード
   ▼γ さん:
>こんにちは。不思議ですね。
>こちらでは、そうしたことは起きませんねえ。
>
>こちらでも再現できるようなコードを提示してもらえませんか?
>文章ではなく、
>Sub で始まり、End Subで終わる、変数の宣言も含めたものを
>提示しませんか?

γ様

ご回答ありがとうございました。
また、文章にわかりにくい質問でご迷惑かけました。
状況はichinose様が記載されている通りの状況でした。
ichinose様の記載通りで解決できました。
お手間かけました。

【75745】Re:時間表示
お礼  yoyo  - 14/6/25(水) 22:30 -

引用なし
パスワード
   ▼ichinose さん:
>こんばんは。
>
>>エクセルVBAのフォームで時間表示することで
>>つまづいてます。
>>
>>エクセルのセルから値を取得しフォームで下記のように指定してます。
>>nt = Format(nt, "hh:mm")
>>基本、表示できているのですが値が12:00の時だけ
>>思うような表示になりません。
>このntを説明する記述がありませんね!!
>このntが何なのか? の説明をしてくださいね。
>質問者がご自分が分からないところまで閲覧者を導く記述をする
>これ、よい訓練になりますよ!!
>>
>>nt=セルの値
>>セルには12:00と入ってます。セルの書式は[h]:mmで
>>値を取得した時は0.5と表示されます。
>>ここまではいいのですが、nt = Format(nt, "hh:mm")にしたとたん
>>00:05と表示されます。
>>セルの値が12:01の時はちゃんと12:01表示されますが
>>12:00の場合のみの症状です。
>>何か原因があるのでしょうか?
>この現象が発生する場合のntは、
>
>ntがString型の変数
>ユーザーフォームという記述がありますから、
>ntがテキストボックスコントロールの場合などこのような現象が
>おこりますね!!
>
>仮にntが文字列型変数の場合
>
>sub test()
>  dim nt as string
>  nt=range("a1").value 'セルa1に12:00という時刻が入っているとすると
> 'ntは、0.5という文字列が格納されます。0.5という数値ではありません。
> '困ったことに 文字列0.5は、0時5分と解釈してしまいます。よって、
> '記述されたような現象が発生します。ntがテキストボックスの場合も
> '同じです。
> msgbox format(nt,"hh:mm")
>End sub
>セルA1に6:00という時刻が入力されていても同じような現象が発生します
>
>はっきり時刻型に変換してあげましょう
>
>
>sub test2()
>  dim nt as string
>  nt=cdate(range("a1").value)
>  nt=format(nt,"hh:mm")
>  msgbox nt
>end sub


ichinose様
ご回答ありがとうございました。
また、わかりにくい文章で申し訳ありませんでした。
発生していた状況はまさにichinose様の予測通りで
変数はstringで宣言しておりテキストボックスにて発生しておりました。
記載して頂いたように変更すると改善されました。
ありがとうございました。

1193 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free