『日付の入力方法』(PPM) こんにちは。お教え頂きたいのですが、今、セルA1に、=DAY(TODAY()) と入力しているものとします。そのとき、セルA1には、当然今日の日時が入りますが、保存後、明日になると、明日の日付に変わっています。保存後、直接入力しないと日付が変わらないようにしたいのですが、どのようにすればよろしいでしょうか。お分かりの方、宜しくお願いします。 ---- こんばんは >直接入力しないと日付が変わらないようにしたいのですが、 TODAY関数を使用する限り、日付は変わってしまうのはやむをえないのでは? 値貼り付けなどで確定する必要がありますが、 直接日付を入力しても大して手間は違わない気はします。 最初から直接日付入力する以外、手はないような気はします。 マクロを埋め込むという方法はありますけれども。 (KAMIYA) ---- KAMIYAさんの言うとおりだと思います。日付を簡単に入力するにはCtrl+;で出来ます。 http://www.excel.studio-kazu.jp/lib/e2aw/e2aw.html#today 他にも色々な便利ショートカットキーが有りますよ。(ケン) ---- KAMIYAさん、ケンさん、ありがとうございます。やはりそうですか。。。 では、KAMIYAさんのお言葉に甘えまして、VBAお教え頂けないでしょうか。マクロでも、変わってしまうような気がするのですが。。。出来れば、こんな形に出来ればうれしいです。 1.たとえばA1セルに年、A2に月、A3に日を、マクロで入力 2.保存するときに1.のマクロ命令文を削除(?)する こんなことって、出来るのですか?VBA、あんまり詳しくないので、”そんな無茶な・・・”って質問かもしれませんが。。。 よろしくお願いします。    (PPM) ---- どんな時に日付を上書きしたいのか分かりませんが Sub test() Range("A1").Value = Year(Now) Range("B1").Value = Month(Now) Range("C1").Value = Day(Now) End Sub こんな感じで出来ると思います。ボタンを作りボタンを押すとマクロが動き日付が更新 される様にするとか・・(ケン) ---- ご相談のブックの運用方法にもよります。 TODAY関数を使用しているということはいちいち関数を入力しているわけでは なさそうです。 作業のもとになるようなブックが用意してあって、 入力が終わったら「名前をつけて保存」をしているような雰囲気ですが。 それであとで開いてみると、日付が変わってしまって・・・と受け取っていたのですが。 一ヶ所や二ヶ所なら、やはり日付入力したほうがよいかと思いますよ。 VBAは便利ですが、メンテナンスできて何ぼのものですので・・・。 通常機能、例えば他の入力セルに入力規則を設定して日付を入力しないと 先に進めないような制限をつける工夫はできます。 その場しのぎのVBAより入力を促す方向性ではだめですか? (KAMIYA) ---- >その場しのぎのVBA >メンテナンスできて何ぼのものですので・ あちゃ、すいません。(ケン) ---- いえ、ケン様のことではありません。 誤解されたらゴメンナサイ。 以前WebMasterさまにお叱りをいただいたことがあるので、 自分に対する戒めです。はい。 マクロの記録を卒業していそうな方には勧めてもよいかな、 と思っているのですが。 (KAMIYA) ---- いえいえ。私のVBAレベルはその程度の物です。勉強さしてもらいました。 KAMIYA様、有難う御座います。それとケン様はやめてください、ケンさん、もしくは ビリケンで構いませんよ。ちくしょゥゥゥ〜〜〜! (ケン) ---- おはようございます。KAMIYAさん、ケンさん、どうもありがとうございます。 ケンさんがおっしゃるように、コマンドボタンを作ってみるのもいいですね。保存と日時入力を同時に行うような・・・。ボタンを押さないと、マクロは動きませんし・・・。 私のしたかった事は、KAMIYAさんがおっしゃるとおりです。元になる原本がありまして、そこにさまざまなデータを入力します。一日に、約200件程度の入力を行います。200件程度すべてに、今日の日付を入れるのが面倒でしたので、色々と考えておりました。 ただし、やはり、入力ミスもあります。そのときには、後日作成しなおすのですが、日時は変えたくありません。ケンさんの方法でしたら、変更するときには、上書き保存になりますよね。 なにやら、頭が痛いです。やはり、一件一件入力がいいのでしょうか?   (PPM) ---- おはようございます。 >200件程度すべてに、今日の日付を入れるのが面倒でしたので、色々と考えておりました。 一箇所や二箇所じゃなかったんですね。 その日の入力しかしないのであれば、一箇所だけ日付を入力しておくようにして、 他のセルに日付を入力したセルを参照させておく方法では? (KAMIYA) ---- 今日の日付を入れる一番簡単確実効率的な方法は先にケンさんが案内されていた方法です。 @操作は今日の日付入力範囲を選択して、Ctrlキーを押しながら;キー、Enterで確定します。 この間Ctrlキーを押したまま行います。 ACtrl+;で今日の日付を入力後このセルを含めた範囲選択して、Ctrl+Dで確定します。 BCtrl+;で今日の日付を入力後Ctrlキーを押しながら、フィルハンドルをドラッグしてコピーします。 CCtrl+;で今日の日付を入力後右ボタンでフィルハンドルをドラッグして、メニューの「セルコピー]を選択します。 事務処理には欠かせない当日日付入力で例えば昨日の日付入力にはCtrl+;は使えないので 入力範囲選択後 11/25 と入力し、Ctrl+Enterで確定すれば100でも200行でも一瞬に入力完了 例えば、図書の貸出日と返却日、未返却と返却済の一連の処理は日付が基準になります。 簡単入力は上記のどれを採用されますか? (シニア) ---- 様々な方々からのアドバイス、どうもありがとうございます。私の説明不足で申し訳ありませんが、200件のデータは、エクセル一つのブックあるいはシートに入力する訳ではないのです。一つの原本を用いて、一日に200件のデータを200件のブックに一つずつ入力するのです。ですので、原本に、上記のような関数あるいはVBAを組み入れようと考えたわけでありますが・・・。 KAMIYAさんのログで、 >他のセルに日付を入力したセルを参照させておく方法では? これ、ちょっと気になるのですが、マクロでどうにかなりますか? 贅沢な質問で申し訳ありません。 あと、シニアさん、ありがとうございました。2番の方法は、知りませんでした・・・。   (PPM) ---- >一日に200件のデータを200件のブックに一つずつ入力するのです。 なるほど、そういうことでしたか。 たしかに、面倒です。 が、個人的には確定データとして日付入力をするべきだと思います。 原本の設定例を提示します。 A1に年、A2に月、A3に日を表示するのでしたら、 A2に「=A1」、A3に「=A1」とA1へのセル参照式。 表示形式をユーザー定義で A1に「yyyy」、A2に「mm」、A3に「dd」 としておいて、 どこか使用していないセルへ(例としてZ1)「=TODAY()」 A1へ入力規則の設定 「入力値の種類」を「リスト」 「元の値」を「=$Z$1」 これでA1選択時のドロップダウンリストからその日の日付を入力し、 なおかつその部分の日付は定数にできます。 マクロそのものはひどく難しいものではありませんが、 マクロを登録したボタンを押すことと、ドロップダウンリストから選択することの (今回の場合は)手間はそれほど違わないだろう、ということです。 加えて、ブックを開くときの確認メッセージのわずらわしさがマクロにはあります。 (マクロに反対しているわけではありません。 マクロの記録やコードの編集をある程度やってみて 「これならいけるっ」って言う場合は協力いたします。念のため。) (KAMIYA) ---- 割り込みゴメン。 下のコードは開いているシートのA1に当日の日付を入力してファイルを閉じるコー ドです。 ファイルを閉じる時は×印をクリックして「保存するかどうかの」の問い合わせに答え て閉じますが、コレは全て保存します。マクロボタンに登録しておくと便利です。 そのボタンで総ての作業をすませてくれますからね。 そのブックの特定のシートに日付を入力する場合はそのシート名を検索して日付を入力 するようにマクロを組み直して下さい。  Sub hiduke() Range("a1") = Now() Range("a1").NumberFormatLocal = "yyyy/m/d" ThisWorkbook.Save ThisWorkbook.Close End Sub   (弥太郎) ---- >弥太郎さま 開いているブックをそのまま保存ならいいと思うのですが、 今回の場合、元ブックへは保存しないらしいので、 多分事前に「名前をつけて保存」しなきゃいけなくなります。 ということは逆に1回保存する手間が増えることになるので、 ならば、GetSaveAsFilenameなんかを追加すれば・・・ と、欲が出てきてしまうんですよねぇ。 >PPMさま 私は今回は保存のからむマクロなので、少し慎重です。 マクロは用意してあるのですが、下手に使うと保存してあるデータに 上書きしちゃうので。 (KAMIYA) ---- すいません。お返事、遅くなりました。 KAMIYA様、出来ました。ありがとうございます。この方法で行きます。 弥太郎様、色々と勉強になります。今後も、お知恵をお貸しください。 あと、KAMIYA様、 >多分事前に「名前をつけて保存」しなきゃいけなくなります。 については、顧客名と番号と日付を"−(ハイフン)"でつないだファイル名で、コマンドボタンから保存するようにしてあります。また、一応原本は読み取り専用にはしてあります。今後の勉強のためにも、”GetSaveAsFilename”って?すいません、勉強不足でして・・・。あと、参考になりそうなマクロとかあれば、よろしければ、お教えください。   (PPM) ---- >コマンドボタンから保存するようにしてあります。 それが出来てれば問題ないですね。 GetSaveAsFilenameは「名前を付けて保存」ダイアログボックスを開く命令です。 任意のフォルダに任意のファイル名で保存する場合は便利です。 以下はご参考までに Sub TEST_20031126C() '変数宣言、作業ディレクトリを設定 Dim MYNAME As String ChDir "C:\My Documents" 'A1が空白以外のときは処理回避 If Range("A1").Value = "" Then 'A1へ日付入力 Range("A1").Formula = Format(Now(), "yyyy/mm/dd") '「名前を付けて保存」でファイル名設定 '有効値が入力されるまで繰り返し Do MYNAME = Application.GetSaveAsFilename Loop While MYNAME = "False" '同名ファイルがないかチェック Application.FileSearch.Filename = MYNAME If Application.FileSearch.Execute() = 0 Then ActiveWorkbook.SaveAs Filename:=MYNAME ActiveWorkbook.Close Else MsgBox ("同名ファイルがあります。保存を回避します。") Exit Sub End If Else MsgBox ("このボタンは使わないでください。") End If End Sub (KAMIYA) ---- どうもありがとうございました。今後のためにも、勉強してみます。また、宜しくお願い致します。       (PPM)