よろしくお願いいたします。
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.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;@" この@は、あるとなしとでどう違うのでしょうか?
よろしくお願いいたします。
No.3
- 回答日時:
;@は無くてもかまいません
入力された物が日付や時刻以外の物の場合文字列として表示させるための指定です
h:mm;[赤]@ などとしておいてセルに『abc』と入力すると
赤で『abc』と表示されます
「@は文字列」と云う説明までは見つかってたのですが、
なるほど、期待するもの以外の入力の受けだったんですね。
迅速、かつ的確な回答に心から感謝いたします。
また次の素人質問にも懲りずにお付き合い下さい。
ありがとうございました。
お探しの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で=より左の文字を一括で...
-
エクセルでアルファベットか数...
-
VBAでの Replace関数で、ワイル...
-
Excelで指数表現しないようにす...
-
Excelで3E8を3.00E+8にしない方...
-
文字列からタブコードを取り除...
-
エクセルで文字列をtxtファイル...
-
エクセルで文字列の最大値を抽...
-
VBの「As String * 128」とは?
-
エクセル 数値データを桁をそ...
-
Left関数とRight関数を合わせた...
-
textboxユーザーコントロールの...
-
ORCLEでの小数の表示方法の変更...
-
同一セル内に関数と文字列を同...
-
アクセスで特定の数字以外(複...
-
16進数を10進数に簡単に変換す...
-
Msgboxの×が押されたとき
-
VBA2005 16進を2桁で表示したい。
-
【Excel VBA】複数ある特定の文...
-
NULLの定義について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
VBAでの Replace関数で、ワイル...
-
文字列からタブコードを取り除...
-
Excelで3E8を3.00E+8にしない方...
-
Excelで指数表現しないようにす...
-
エクセルで文字列の最大値を抽...
-
エクセル 数値データを桁をそ...
-
エクセルで文字列をtxtファイル...
-
同一セル内に関数と文字列を同...
-
VBA2005 16進を2桁で表示したい。
-
VBの「As String * 128」とは?
-
sedなどで、特定の文字列の後の...
-
MS SQLServer のSQLで文字列の...
-
Left関数とRight関数を合わせた...
-
Msgboxの×が押されたとき
-
アクセスで特定の数字以外(複...
-
【Excel VBA】複数ある特定の文...
-
エクセルでセル内の文字列の最...
-
C#で年月を比較する
おすすめ情報