アプリ版:「スタンプのみでお礼する」機能のリリースについて

よろしくお願いいたします。

ExcelのVBAにて、文字列セル「h:mm」をシリアル値に変更したいのです。
現在、「h:mm」の文字列に":00"を付加することで、「h:mm:00」となり、シリアル値になるようです。
 For Each c In Range()
  c.Value = c.Value & ":00"
 Next c
また、シート側では、F2キーにより編集状態にして、特に内容を変更することなくEnterキーを入力することで、文字列を時刻のシリアル値だと認識し直します。

余談ですが、Excel2000から2003へのバージョンアップにより、
上記For Nextに負荷がかかりとても遅くなりました。
よって、「& ":00"」の追加でも動作的には思い通りなのですが、速度的に満足できておりません。

文字列をシリアル値だと認識させる簡潔な方法がありましたらご教授ください。
初心者ゆえ、基本がわかっていない部分あるとおもいます。
よろしくお願いいたします。

A 回答 (3件)

For...Nextで回すのを止めて RangeオブジェクトのValueプロパティで取得して 書式設定を変更した上で書き戻してみてはいかがでしょう



Sub ValueChange( r as Range )
  dim arData
  Application.ScreenUpdating = False
  arData = r.Value
  r.NumberFormat = "G/標準"
  ' または時間用のフォーマットを指定する
  'r.NumberFormat = "h:mm;@"
  r.Value = arData
  Application.ScreenUpdating = True
End Sub
といった具合です ・・・
    • good
    • 0
この回答へのお礼

redfox63さん、ありがとうございました!

素人ゆえ、チョット見、理解に苦しみましたがようやく理解できました。
私の発想は、フォーマットを指定すれば、元データが変わるものと思っていました。
先にフォーマットを指定しておき、そこに待避しておいた元データを流し込めば、変えられるんですね。
しかも、範囲全体を1変数に格納できるんですね。
たいへん勉強になりました。

最後にもう1点だけお付き合いください。
"h:mm;@" この@は、あるとなしとでどう違うのでしょうか?
よろしくお願いいたします。

お礼日時:2008/06/03 04:33

;@は無くてもかまいません


入力された物が日付や時刻以外の物の場合文字列として表示させるための指定です
h:mm;[赤]@ などとしておいてセルに『abc』と入力すると
赤で『abc』と表示されます
    • good
    • 0
この回答へのお礼

「@は文字列」と云う説明までは見つかってたのですが、
なるほど、期待するもの以外の入力の受けだったんですね。

迅速、かつ的確な回答に心から感謝いたします。
また次の素人質問にも懲りずにお付き合い下さい。
ありがとうございました。

お礼日時:2008/06/03 09:11

なぜ遅くなったのかわかりませんので、速くなるかどうかわかりませんが、シリアル値にするのなら、つぎ。



c.Value = TimeValue(c.Value)
    • good
    • 0
この回答へのお礼

回答ありがとうございました!

TimeValueで自セルを変換すると、For Nextですべてのセルを変換せねばならず、
どうにか高速化を図りたいと考えております。

できることならば、指定範囲内を一括で文字列からシリアル値へと属性だけ変更できないものでしょうか?

引き続きどうぞよろしくお願いいたします。

お礼日時:2008/06/03 01:19

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