よろしくお願いいたします。
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"」の追加でも動作的には思い通りなのですが、速度的に満足できておりません。
文字列をシリアル値だと認識させる簡潔な方法がありましたらご教授ください。
初心者ゆえ、基本がわかっていない部分あるとおもいます。
よろしくお願いいたします。
No.2
- 回答日時:
なぜ遅くなったのかわかりませんので、速くなるかどうかわかりませんが、シリアル値にするのなら、つぎ。
c.Value = TimeValue(c.Value)
回答ありがとうございました!
TimeValueで自セルを変換すると、For Nextですべてのセルを変換せねばならず、
どうにか高速化を図りたいと考えております。
できることならば、指定範囲内を一括で文字列からシリアル値へと属性だけ変更できないものでしょうか?
引き続きどうぞよろしくお願いいたします。
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
といった具合です ・・・
redfox63さん、ありがとうございました!
素人ゆえ、チョット見、理解に苦しみましたがようやく理解できました。
私の発想は、フォーマットを指定すれば、元データが変わるものと思っていました。
先にフォーマットを指定しておき、そこに待避しておいた元データを流し込めば、変えられるんですね。
しかも、範囲全体を1変数に格納できるんですね。
たいへん勉強になりました。
最後にもう1点だけお付き合いください。
"h:mm;@" この@は、あるとなしとでどう違うのでしょうか?
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel VBA 書式変更で困ってます。 オートフィルターの日付フィルターを用いて データの絞り込 2 2022/07/26 22:16
- Visual Basic(VBA) 【再投稿】VBAで動作しなくて困っています 2 2022/10/11 11:05
- Visual Basic(VBA) 【再々投稿】VBAのプログラムで動作しなくて困っています 8 2022/10/14 09:06
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Excel(エクセル) Excelの操作方法を教えてください!頭文字2~8文字で特定の値に返す方法 8 2022/07/14 11:26
- Visual Basic(VBA) VBAで時間(00:00形式)を積算(足し算)したい 1 2022/11/15 17:04
- Visual Basic(VBA) Excel VBAの解読について質問があります。 概要は、マクロでチェックボックスにチェックすると日 1 2023/02/10 07:50
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでアルファベットか数...
-
Excelはなんで先頭の0を消すん...
-
VBAでの Replace関数で、ワイル...
-
Excelで3E8を3.00E+8にしない方...
-
文字列からタブコードを取り除...
-
Excelで指数表現しないようにす...
-
EXCELで=より左の文字を一括で...
-
php言語の脆弱性について
-
エクセル 数値データを桁をそ...
-
[C言語]fputsとfprintfの違い
-
Left関数とRight関数を合わせた...
-
GASに文字列として関数を入れる...
-
googleスプレッドシートでカッ...
-
エクセルで文字列をtxtファイル...
-
MS SQLServer のSQLで文字列の...
-
[大学数学 形式言語]回文を受理...
-
VBAでCSVを文字列として取り込...
-
VBA テキストボックスの計算
-
エクセルで文字列の最大値を抽...
-
excel vba 17桁の数字が表示で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
文字列からタブコードを取り除...
-
Excelで3E8を3.00E+8にしない方...
-
VBAでの Replace関数で、ワイル...
-
Excelで指数表現しないようにす...
-
[C言語]fputsとfprintfの違い
-
エクセルで文字列をtxtファイル...
-
同一セル内に関数と文字列を同...
-
エクセルで文字列の最大値を抽...
-
Excelはなんで先頭の0を消すん...
-
MS SQLServer のSQLで文字列の...
-
エクセル 数値データを桁をそ...
-
Left関数とRight関数を合わせた...
-
VBA2005 16進を2桁で表示したい。
-
VBの「As String * 128」とは?
-
Msgboxの×が押されたとき
-
sedなどで、特定の文字列の後の...
-
【Excel VBA】複数ある特定の文...
-
OnTime 使用時のプロシージャへ...
おすすめ情報