『today()で入力した過去の日付を変更させない方法を教えてください』(Earl) 例えば昨日 today()で入力したセルがあるとします。 翌日、次のセルにもtoday()で入力します。 そのとき昨日入力した日付を変更させたくないのです。 関数はtoday()で無くてもかまわないのですが、例えば日記のように、エクセルを開いた日に入力するセルは当日で自動入力、過去の日付も自動入力はされているのですが、当日の入力時に過去の日付を変えたくないのです。 説明が難しいのですが、方法をご存じでしたら教えてください。 また、できればマクロは使わないようにお願いします。 < 使用 Excel:Excel2007、使用 OS:WindowsXP > ---- 関数(=Today() )ではなく、Ctl+; で日付を直接入力するようにしてどうでしょうか。 (Mook) 2014/09/16(火) 19:32 ---- ありがとうございます。 複数の人間で、使うので年配の方にはCtl+; がちょっと・・・なのです。 入力の際に入力時メッセージで表示していますがなかなかなのです。 (Earl) 2014/09/17(水) 12:00 ---- Ctrl+;が難しくて=TODAY()は入力できるんですか? 年配の人に案内するなら;より「Ctrl+れ」の方がわかりやすいかも知れませんね。 もしくはもうテンキーで2014/9/17とベタ打ちしてもらう。条件付き書式で今日と違う日付なら 色がつくようにする、とか。 (コナミ) 2014/09/17(水) 12:26 ---- =Today()を使う限り、そのセルは毎日変わってしまいます。 そうではなく、先頭日を入力しておき、次のセルからは+1する数式にしてはどうですか? 例えば、A1セルに先頭の日付。A2セルは =A1+1。A2セルを下方向に必要なだけコピー。 (???) 2014/09/17(水) 12:52 ---- どこかに=TODAY()を入れたセルを作っておき、日付を入れるセルには入力規則のリストで そのセルを参照しておく。 プルダウンにはその日の日付しか出てこないが、選択すると値として日付が入るから 日が変わっても変化はしない。 プルダウンは明日になると明日の日付になる。 こんなのは如何でしょうか? (コナミ) 2014/09/17(水) 13:08 ---- 『昨日入力した日付を変更させたくないのです』 これはつまり  ・ご年配の方がいらっしゃるので、日付欄の入力方法はできるだけ簡易化したい  ・ただし一度日付欄に日付を入れたらそのセルの変更を許可しない ということですか。 簡易な入力方法ということであれば、皆さんからいただいている解決方法で何とかなりそうですが、 過去に入力した日付を変更させないというのは  ・運用ルールで対応する  ・「特定のセルに入力した際に、日付欄が空白だったら当日の日付を入力する」マクロを作る  ・ファイル管理者が毎日日付欄の入力有無を確認し、入力済みの場合は当該セルの保護を行う とかの案しか浮かびません。 あっ、Earlさんの要件を誤認識していたらすみません。 (ryopo^2) 2014/09/17(水) 15:19 ---- 皆さんありがとうございます。 やりたいのは物品の持ち出し返却管理で、品物を持ち出したとき、日付を自動入力、返却したときに返却日を自動入力。また持ち出しが全くない日もありで、毎日誰かがファイルを開くとは限らない。同じ日に別の人が別な品物を持ち出すこともある。 入力はできるだけ簡素化したいので、自動化できるところは自動化したい、 最終的には返却時に確認者をプルダウンで入力したらそのレコードを変更禁止。修正の場合は返却確認者を一度消してから。 の、様な感じです。 日付以外はできているのですが、気がついたら全部の日付が今日になってしまって、そうだ!!ってなったんです。 皆さんの意見を参考に、もう少し頑張ってみます。本当に助かります。 少し見えてきた気がします。 明日から出張で見れませんので、帰ってからまたやってみます。 ありがとうございます (Earl) 2014/09/17(水) 18:11 ---- 先ほど、改めてやってみました。 (コナミ) 2014/09/17(水) 13:08さんの手法はうまくいきましたが、 一部の人から、プルダウンの▼にカーソルを合わせる手間が増えた(なんとわがままな・・・) と言う意見が出て、勝手にしろ!!って感じになってます。 「Ctrl+れ」で手を打とうかとも考えていますが、他でも使えそうなので、頑張ります。 後から私以外の人でもデバッグできるように、数式にこだわっていましたが、VBAを埋め込む 方法も検討しています。 こんな感じ。 Private Sub Worksheet_Change(ByVal Target As Range) '除外条件 If Intersect(Target, Range(Range(Range("A4", Cells(Rows.Count, 1)), Range("H4", Cells(Rows.Count, 8))), Range("J4", Cells(Rows.Count, 10)))) Is Nothing Then Exit Sub 'A,H,J列以外 If Target.Count > 1 Then Exit Sub '複数セル If Target.Value = "" Then Exit Sub '何も入れない場合 '実行 Application.EnableEvents = False If Not Intersect(Target, Range("A4", Cells(Rows.Count, 1))) Is Nothing Then Target.Offset(, 2).Value = Date If Not Intersect(Target, Range("A4", Cells(Rows.Count, 1))) Is Nothing Then Target.Offset(, 3).Value = Date If Not Intersect(Target, Range("H4", Cells(Rows.Count, 8))) Is Nothing Then Target.Offset(, 1).Value = Date If Not Intersect(Target, Range("J4", Cells(Rows.Count, 10))) Is Nothing Then Target.Offset(, 1).Value = Date Application.EnableEvents = True End Sub テストはうまくいっています。 問題はデバッグ・・・ (Earl) 2014/09/24(水) 22:35 ---- わ、わがまま…… まぁ、PCに不馴れな方にはそういう意見が出るみたいですね。 プルダウンでやるなら、Alt+↓キーでプルダウンリストが 出ますが、それも面倒と言われちゃいますかね(^_^;) 大変ですね。 (コナミ) 2014/09/25(木) 06:58 ---- 全体の操作や入力の件数がわからないのですが、キー入力主体なのでしょうか。 データ入力だけをしているのであれば、途中でマウス操作は面倒ですね。 マウス操作主体であれば、キー入力は面倒でしょう。 一日数十件も入力する作業では、操作手順がワンステップ増えるだけでも面倒に感じる というのは理解できます。 ですので、日付入力一つとっても、何がベストかはケースバイケースでしょう。 マクロの案も実装方法によっては有効だと思いますが、まずは実際の使い方を確認して どのような入力インタフェースにするのが良いか決めるのが良い気がします。 (Mook) 2014/09/25(木) 11:11 ---- Excelのオプションの数式タブで計算方法の設定内の「反復計算を行う」に チェックを入れて「最大反復回数」を「1」とする。 B1セルに =IF(A1<>"",IF(B1="",TODAY(),B1),"") と入力するとA1セルに何か入力された日付を表示、その後はA1セルの値を 変えたりいったん保存して別の日に開きなおしても日付は変わらない。 ただしA1セルをクリアするとB1セルもクリアされる。 TODAY()をNOW()にすれば本当にそうなるか簡単に確かめれる。 なお、そのブックで(他のシートも含めて)入力間違いなどで循環参照を 行っても (C1セルの数式でC1セル自信を参照など)エラーメッセージが 出なくなるので注意が必要。 (ねむねむ) 2014/09/25(木) 11:22 ---- マクロは使いますが 日付入力セルが空白なら、ダブルクリックで日付が入力されるとか でいいんではないかな? (あかさな) 2014/09/25(木) 13:21 ---- キー入力 にも対応で Worksheet_Change を追加で  ** enter で 日付入力セルが空白なら日付が入力 でどうだ  ** の部分は自由に変更してね (あかさな) 2014/09/25(木) 13:42 ---- 皆様 ありがとうございます。 現在の所、ねむねむさんのご案内が最も簡単にできそうです。ありがとうございます。 循環参照でうまく行かず、マクロに走ってしまいました。 ワークシートは、時々バックアップはしますが、レコードは永遠に増えていく予定です(会社が存在する間)。 やりたいのは、備品の持ち出し管理。 Aのセルで、備品の大項目をプルダウンで選択。その時点で持ち出し日と、持ち出し確認日に仮で当日が入ります。 次にAのセルの項目ごとの小項目がBのセルにプルダウンで選択・入力します。Cのセルには持ち出し日、Dには確認日です。 大項目から小項目への選択肢を変えるのはできています。なおリストも簡単に追加できるようにしています(件数はとりあえず”これだけあればいい”、ぐらいの件数までは特に修正しなくてもできるようにしています)。 最終的には、返却確認者に名前が入ると、そのレコードをグレーに塗りつぶし、返却していないものをわかりやすくするようにしています。 もっと言えば確認者に入力されたら、持ち出しのグレーになった所を変更できないように保護したいのですが、これも実はまだできていません。今調べているところです。 なおこれらは、リストからプルダウンです。キーボードから入力するのは、リストに無い物を入力するとき、または持ち出しや確認の日付が、当日と違う場合。マウスでの入力を基本としています。 (Earl) 2014/09/28(日) 23:31 ---- ねむねむさんの案は、パソコンごとに設定してあげる必要があると思うのですが、 1台のパソコンで実施するのでしょうか? みんなが使うファイルなんですよね? いろいろ仕様読んでいますが、アクセスの標準機能を使ったほうが簡単ですよ? エクセルで実現しようと思うと、ほぼほぼVBAに頼ることになります。 ( 稲葉) 2014/09/29(月) 07:44 ---- 稲葉さん、 確かに複数台で入力するのならばそれぞれでの設定が必要になるね。 しかも使う人がExcelに詳しくないのであれば、オプションをいじる方法は避けたほうがよいか。 (ねむねむ) 2014/09/29(月) 09:25 ---- あ、ねむねむさん気を悪くしたらごめんなさい。 質問者さんに当てたメッセージでしたが、読み返してみるとだれ宛かわかりませんね・・・ セルイベントに関しても、セキュリティ設定をいじることに関してオプション変更(都度が常か) することには変わりませんので、 私はコナミさんの「リスト」でTODAY関数が入ったセルをリスト範囲にする方法が一番無難だと 思っています。 (稲葉) 2014/09/29(月) 09:35 ---- 稲葉さん 別に気を悪くしたのではなく、こちらの考え不足だったということで感謝の意です。 (ねむねむ) 2014/09/29(月) 11:21 ---- 皆様 ありがとうございます。 一点、私の思い違いがあるかもです。 この管理表は、基本的には1台のPCで入力が前提でした。 以前のファイルを今回改修し、今回の質問に至ったわけですが、1台のPCと言う約束ごとがいつの間にかうやむやになって、なおかつ排他制御ができないので、 他のPCで開いたままで、どのPCが犯人かを捜し回ることも良くあります。 本来ならアクセスが良いのでしょうが、誰でもデバッグできるようにという事からするとハードルが高い気がします (備品管理なので、ホイホイ修正されてしまうのもセキュリティーとしてはいかがなものかとは思いますが)。 なおファイル自体はイントラのサーバー上に置いてあり共有してあります。 そこで、思い違いの件ですが、このファイル(Book)の循環参照の設定は、他のファイル(Book)にも影響を与えるのでしょうか? 当方では循環参照自体レアケースなのであんまり影響は出ないと思いますが、そもそもファイル(Book)単位での設定で、開けば循環参照も反映すると思っていました。 (Earl) 2014/09/30(火) 08:48 ---- すまない。 どうも反復計算の設定はExcelそのものの設定だと勘違いしていたようだ。 いま確認したのだが反復計算の設定はブックに保存されるため別のブックには影響しない。 ただし、反復計算のブックを開いている状態で別のブックを開いて保存するとその別のブックも 反復計算の設定がなされてしまうようだ。 結果的に嘘を書いてしまってすまなかった。 (なぜかかなり昔から反復計算の設定はブックではなくExcel本体の設定だと思い込んでいた) (ねむねむ) 2014/09/30(火) 09:17 ---- ---- えっと……リスト案はすでに出てて、マウスで一々選択するのが 面倒と言われているのですが…… (コナミ) 2014/10/05(日) 17:16 ---- あら、削除されたんですね。 コナミ一人で何書いてるんだ?状態ですね。 (コナミ) 2014/10/05(日) 17:59 ---- いまさらですが、反復計算オプションなんていじることないので、私も本体の設定だと勘違いしていた ようです。 というか確かめてすらいないのですが・・・ ねむねむさん、すみませんでした。 ただ気になるのは、たとえば同じ項目にある「数式の自動計算」は、設定してあるブックを開いておくと、 同時に開いたブックも影響受けて、その状態で保存すると影響を受けたブックがその状態で保存されてしまう という現象が起きたような・・・ 2007のサーバーファイルだけなのかわかりませんが、一概にほかのブックに影響を与えないとは言えない気が します。 でもすみませんでした・・・ ( 稲葉) 2014/10/05(日) 19:12 ---- 割り込み失礼。 コナミさん提案の入力規則のリストを該当セルに設定し プルダウンリストを表示する簡単なイベントマクロを仕込んでおいては いかがでしょう。該当のシートモジュールへ登録します。 下記はC列、及びD列の任意のセルを選択したときにプルダウンリストを表示します。 Option Explicit Private Sub Worksheet_SelectionChange(ByVal Target As Range) Select Case Target.Column Case Is = 3, 4 Application.SendKeys "%{DOWN}", True Case Else End Select End Sub マウス入力が主だ、とのことですが、他の列にも拡張すれば 日付以外の列でのリスト選択でも使えますので、キーボード入力に 切り替えることができます。 難点は、リスト以外のものを入力するときに いちいちEscキーを押す必要があることでしょうか。 (みやほりん) 2014/10/07(火) 18:30 ---- 諸事情があり、返信が遅くなりました。 申し訳ありません。 最終的には、 「反復計算を行う」に チェックを入れて「最大反復回数」を「1」とする の方法を使うことにしました。 これだと、他の人にも簡単に修正できますので。 皆様、本当にありがとうございます。 (Earl) 2014/10/16(木) 15:44