• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ExcelのVBAにて、文字列データ「h:mm」をシリアル値に変更したい。)

ExcelのVBAで文字列データをシリアル値に変更する方法

このQ&Aのポイント
  • ExcelのVBAを使用して、文字列データ「h:mm」をシリアル値に変更する方法について教えてください。
  • 現在、「h:mm」の文字列に":00"を付加することで、シリアル値に変換できることが分かりましたが、より効率的な方法はありますか?
  • Excel2000から2003へのバージョンアップにより、現在の方法では処理速度が遅くなっています。速度的に満足できる方法があれば、教えてください。

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

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 といった具合です ・・・

taizans
質問者

お礼

redfox63さん、ありがとうございました! 素人ゆえ、チョット見、理解に苦しみましたがようやく理解できました。 私の発想は、フォーマットを指定すれば、元データが変わるものと思っていました。 先にフォーマットを指定しておき、そこに待避しておいた元データを流し込めば、変えられるんですね。 しかも、範囲全体を1変数に格納できるんですね。 たいへん勉強になりました。 最後にもう1点だけお付き合いください。 "h:mm;@" この@は、あるとなしとでどう違うのでしょうか? よろしくお願いいたします。

その他の回答 (2)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

;@は無くてもかまいません 入力された物が日付や時刻以外の物の場合文字列として表示させるための指定です h:mm;[赤]@ などとしておいてセルに『abc』と入力すると 赤で『abc』と表示されます

taizans
質問者

お礼

「@は文字列」と云う説明までは見つかってたのですが、 なるほど、期待するもの以外の入力の受けだったんですね。 迅速、かつ的確な回答に心から感謝いたします。 また次の素人質問にも懲りずにお付き合い下さい。 ありがとうございました。

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.2

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

taizans
質問者

お礼

回答ありがとうございました! TimeValueで自セルを変換すると、For Nextですべてのセルを変換せねばならず、 どうにか高速化を図りたいと考えております。 できることならば、指定範囲内を一括で文字列からシリアル値へと属性だけ変更できないものでしょうか? 引き続きどうぞよろしくお願いいたします。

関連するQ&A