EXCEL2007(他ヴァージョンは分かりません)にて、コロンを使用した時刻を入力すると、勝手に書式が変わって、表示は時刻のままですが、値がシリアル値になってしまいます。これが機能しないようにしたいです。
元々数式が入力されているセルで、必要に応じて時刻を手入力しているので、書式を文字列にするのは不可です(手入力後はマクロで元の数式を入れてます)。
要は通常は数式を使用し、コロン「:」を使用して入力した時は文字列としたいのです。
コロンを使用しないで、例えば15:00を1500のように入力すれば、目的は果たせるのですが、他の(EXCELの知識がない)作業者が使用するファイルのためどちらの入力方法でも稼働するようにしたいのです。同じ理由でシングルクォートの使用も不可です。
条件付き書式やTEXT関数を使用しても、シリアルへの変換後に機能するためかうまくいきませんでした。
No.3
- 回答日時:
「手入力後はマクロで元の数式を」
ということなので、VBAはいくらか使えるのだと思います。
で、
何でこのようにしなければならないのか理解に苦しみますが、
どうしてもというなら、
下記のようにすればよろしいのではと思います。
理由がいまいち不明なので、これでいいかどうかは、わかりません。
そのシートモジュールに、イベントプロシージャ、
Private Sub Worksheet_Change(ByVal Target As Range)
Dim isect As Range, mystr As String, c As Integer
Application.EnableEvents = False
Set isect = Application.Intersect(Range("A1:A10"), Target)
If isect Is Nothing Then End
c = InStr(Target.Text, ":")
If c > 0 Then
Target.NumberFormat = "@"
mystr = Format(Target.Text, "hh:mm:ss")
Range(Target.Address) = mystr
End If
Application.EnableEvents = True
End Sub
適用rangeは適宜変更のこと。
この回答への補足
理由については、下の回答に補足しましたので参照ください。
VBAは、自動マクロ記録を中心に参考書をめくりながら作成するレベルです。系統だって勉強したわけではないので素人に毛が生えた程度とお思いください。
ですので、お書き頂いたコードについてなんとなくしか分かりません。
ワークシートのチェンジイベント使って、入力したセルの値に合わせて型を変更している様ですが、Application.EnableEventsのtrueとfalseの位置が悪いのでしょうか?うまく稼動しません。
試してみたのは、適用rangeをA10のみとし、A10に"=A1&A2"、A1に"1"、A2に"2"を入力しました。A10には"12"が入力されますが、A10に"10:00"を入力すると、やはり文字列ではなくシリアル値に変更(表示は10:00)されてしまいました。
No.2
- 回答日時:
この前の質問も同じようなものがありました。
数字と「:」が入った一部の数字が、シリアル値にはなるのですが、それを、型のキャスティングといいます。本来は、それを起させないということが、VBAとして必要かどうか、という疑問があります。
ご質問には、必要であるという、その理由が抜けているようです。
>同じ理由でシングルクォートの使用も不可です。
シングルクォート(')を、Rangeオブジェクトの値と共に入れた後は、文字列になります。こうすると、シングルクォート(')は、PrefixCharacter プロパティに入りますから、その後は、見えるけれども、印刷等には出ません。また、CSV にも表れません。この前の質問者さんも、これを認めようとしなかったけれども、もともとLotus123との互換性のある書式文字列です。それがダメだという理由はなぜなのでしょうか、Excelでは、ある程度は、こちらは詳しいと思っていますが、どうも分かりません。それとも、Excelの仕様が変わったとでも言うのでしょうか。
'-------------------------------------------
Sub Test1()
With Range("A1")
.Value = "'" & "11:10"
If InStr(1, .Value, "'", vbBinaryCompare) > 0 Then
MsgBox "シングルクォートは存在します。", vbInformation
End If
End With
End Sub
もし、これで、メッセージが出るのでしょうか?
PreFixCharacter に入っていれば、このシングルクォートを検索や置換出来ないはずです。
その入力した部分を、数式バーで、再取得すれば、シングルクォートは出せるはずですが、そこまで必要かどうかです。
それを難しい方法で解決するというのは、理由が書かれていない以上、私が間違っていなければ、何かご質問者さんに誤解があるように思っています。しかし、それ以上に、VBAは、Textプロパティというもので、表示を取る方法があるので、特別なことがない限りは、そのままでも良いはずなのです。私は、マクロ中心の回答者ですが、特別な方式が必要になったことはありません。
あえて、それをするなら、以下のようになります。
'-------------------------------------------
Sub Test2()
With Range("A2")
.ClearFormats
.Value = "11:12" & Chr(9) 'このように特別なコードをおけばキャスティングは働きません。
End With
End Sub
この回答への補足
目的は「他の(EXCELの知識がない)作業者が使用するファイルのためどちらの入力方法でも稼働するようにしたいのです。」と書いていましたが、分かりにくいようなので補足します。
作成しているファイルは、指定のセルへ条件(ロットの情報)を入力すると、作業条件が自動出力するというものです。元々紙面での作業条件表で作業していた(させていた)のですが、ミス防止や効率化のためにEXCELの関数とVBAで自動化したものです。
実際に使用するのは、パソコンの基本知識がほとんどない作業者になります。当然複数ですし、人事異動や採用などできた新人も使えるようにする必要があります。つまり「時刻の入力」という作業が、言ってみれば小学生でもできるレベルにする必要があるのです。
以上の理由により、「シングルクォート」は使用不可ですし、時刻の入力も15:00という入力だけでなく、1500と入力しても正常に既定の条件を出力することが望まれます。
回答の終わりにお書き頂いたコードを試してみましたが、入力された値を文字列形式になりますが、その後同じセルへコロンを使用した時刻を入力するとキャスティング(というのですね始めて知りました)は働いてしまいました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【再々投稿】VBAのプログラムで動作しなくて困っています 8 2022/10/14 09:06
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Excel(エクセル) マクロ/VBAについて教えてください。 10 2022/05/27 12:59
- Excel(エクセル) Excelの複数人での参照について 2 2022/06/01 13:38
- Excel(エクセル) Excelで行削除をすると… 1 2023/07/26 11:57
- Excel(エクセル) エクセルで条件付き書式を使わずにセルの文字の色を変える方法を教えて下さい 8 2023/07/28 01:15
- Excel(エクセル) Excelの文字列を数字に変換する方法について 6 2023/07/31 21:18
- Excel(エクセル) COUNTIFSについて 2 2022/08/30 14:48
- Excel(エクセル) エクセルで計算結果が0でないときのみセルを更新したい 4 2022/07/30 11:58
- Excel(エクセル) Excel2019、2021の日付、曜日の表示について 2 2022/11/29 15:01
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【EXCEL】画像の黄色部分の抽出...
-
文字2桁、3桁交じりの文字列...
-
Excelについての質問です。 B2...
-
絶対参照
-
マクロエクセルのブロック解除
-
Excelで表を作ったところに文字...
-
職場の人から聞かれており、こ...
-
DATE関数で現在の年齢を出した...
-
エクセルのクイックアクセスツ...
-
エクセルのクイックアクセスツ...
-
Excelピボットテーブルの1行目
-
REGEXREPLACE関数について、
-
ユーザー定義関数をアドイン登...
-
Excel関数-文字列で自動作成さ...
-
スプレッドシートで使う数式を...
-
在庫管理表に使うエクセルの関...
-
エクセルで表
-
エクセルの関数について教えて...
-
スプレッドシート、Excelでの数...
-
(マクロ)vlookupの元データを同...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA、別ブックへ転記す...
-
エクセルでの作業計算方法について
-
時間によってファイル名が変わ...
-
【関数】適切な文字数の数字を...
-
Excelについて教えてください
-
エクセル初心者です 関数の入れ...
-
【マクロ】ファイル名の変更に...
-
UNIQUE関数が使えないバージョ...
-
エクセルの計算
-
【関数】先頭だけにある、半角...
-
Excelで、決まった行を繰り返し...
-
Excelでセルの値が同じか...
-
LOOKUP関数を使えばいいのでし...
-
Excel
-
はがきについて。
-
エクセルの条件付き書式につい...
-
エクセルのデーターが2か月前の...
-
エクセル②
-
エクセルで「-0.0」と表示さ...
-
Microsoft1Officeの互換ソフト...
おすすめ情報