- ベストアンサー
ExcelのVBAで文字列データをシリアル値に変更する方法
- ExcelのVBAを使用して、文字列データ「h:mm」をシリアル値に変更する方法について教えてください。
- 現在、「h:mm」の文字列に":00"を付加することで、シリアル値に変換できることが分かりましたが、より効率的な方法はありますか?
- Excel2000から2003へのバージョンアップにより、現在の方法では処理速度が遅くなっています。速度的に満足できる方法があれば、教えてください。
- みんなの回答 (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 といった具合です ・・・
その他の回答 (2)
- redfox63
- ベストアンサー率71% (1325/1856)
;@は無くてもかまいません 入力された物が日付や時刻以外の物の場合文字列として表示させるための指定です h:mm;[赤]@ などとしておいてセルに『abc』と入力すると 赤で『abc』と表示されます
お礼
「@は文字列」と云う説明までは見つかってたのですが、 なるほど、期待するもの以外の入力の受けだったんですね。 迅速、かつ的確な回答に心から感謝いたします。 また次の素人質問にも懲りずにお付き合い下さい。 ありがとうございました。
- okormazd
- ベストアンサー率50% (1224/2412)
なぜ遅くなったのかわかりませんので、速くなるかどうかわかりませんが、シリアル値にするのなら、つぎ。 c.Value = TimeValue(c.Value)
お礼
回答ありがとうございました! TimeValueで自セルを変換すると、For Nextですべてのセルを変換せねばならず、 どうにか高速化を図りたいと考えております。 できることならば、指定範囲内を一括で文字列からシリアル値へと属性だけ変更できないものでしょうか? 引き続きどうぞよろしくお願いいたします。
お礼
redfox63さん、ありがとうございました! 素人ゆえ、チョット見、理解に苦しみましたがようやく理解できました。 私の発想は、フォーマットを指定すれば、元データが変わるものと思っていました。 先にフォーマットを指定しておき、そこに待避しておいた元データを流し込めば、変えられるんですね。 しかも、範囲全体を1変数に格納できるんですね。 たいへん勉強になりました。 最後にもう1点だけお付き合いください。 "h:mm;@" この@は、あるとなしとでどう違うのでしょうか? よろしくお願いいたします。