- ベストアンサー
VBAでNOWから年と秒をはぶきたい
- VBAでボタンを押したら特定のセルに現在の月と日時を表示するコードを作成しましたが、年と秒が取り込まれてしまいます。年と秒を除いて表示する方法を教えてください。
- Range関数とFormat関数を使用して、VBAで特定のセルに現在の月と日時を表示するコードを作成しましたが、年と秒が取り込まれてしまいます。年と秒を除いて表示する方法を教えてください。
- VBAでNOW関数を使用して現在の月と日時を取得し、特定のセルに表示するコードを作成しましたが、年と秒も表示されてしまいます。年と秒を除いて表示する方法を教えてください。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
>ボタンを押したらD4に月/日スペース時:分(10/20 17:07)が入るようにしました。 >Range("D4").Value = Format(Now, "mm/dd hh:mm") ここにちょっとした勘違いがありますね。 Format で成形しようが、D4セルには「2017/10/20 17:07:00」を示す、シリアル値が入ります。 既にD4セルの書式が "mm/dd hh:mm" になっているため、「10/20 17:07」に見えますが、もしD4セルの書式を"G/標準"などにしていると、一行目を実行しても、D4セルには「2017/10/20 17:07」が表示されてしまいます。 そしてNGコードと書かれている部分を実行すると、C4セルの文字列と、D4セルのシリアル値を結合することとなりますが、シリアル値→日付の標準形式、という自動変換が入って、「木村-2017/10/20 17:07:00」と言う結果になってしまったわけです。 まず最初の一行目を、次の2行にしてみましょう。 Range("D4").Value = Now '現在日時を入れる Range("D4").NumberFormatLocal = "mm/dd hh:mm" '月日・時分の書式設定をする そして、C4セル文字列と、D4セルに表示された「文字列」を結合します。 Range("M6") = Range("C4") & "-" & Range("D4").Text これで、ご質問の流れ通りでご希望の「木村-10/20 17:07」が得られるかと思います。 まあ、結合するところで Format と Now による文字列を生成しても良いのですが。 いっぱい正解が付くと思いますので、ご自分でわかりやすいものをどうぞ^^;
その他の回答 (6)
- nan93850673
- ベストアンサー率32% (179/553)
Range("M6") = Range("C4").Value & "-" & Range("D4").Text
お礼
nan93850673 様 教えていただいた方法はとてもシンプルで判りやすいです。 勉強になります。 ありがとうございました。
- tsubu-yuki
- ベストアンサー率46% (179/386)
> Range("M6") = Range("C4") & "-" & Range("D4").Value = Format(Now, "mm/dd hh:mm") コレは通らないでしょう(笑)。 VBAの場合、基本的には「左辺に右辺を入力(代入)」ですからね。 なのでこの場合、 Range("M6") = Range("C4") & "-" & Format(Range("D4"), "mm/dd hh:mm") あるいは Range("M6") = Range("C4") & "-" & Format(Now, "mm/dd hh:mm") で完結。 セルだけで完結させるなら M6セル:=C4&"-"&TEXT(D4,"mm/dd hh:mm") こうですね。 なお、 > どうすれば年と秒を取り込まなく 取り込まないように・・は難しいですねぇ。 表示しない方法は上記の方法などなどいくつかありますけどね。
お礼
tsubu-yuki 様 >VBAの場合、基本的には「左辺に右辺を入力(代入)」ですからね。 大変勉強になりました。 基本的な勉強もできていない状態でございまして、 ご教授いただき感謝します。 また、セルのみでの方法もご教授いただきありがとうございました。 > どうすれば年と秒を取り込まなく 次回の質問では気を付けます。
- imogasi
- ベストアンサー率27% (4737/17070)
本質問に(関連して)上げるべきかどうか不安なのですが、 下記のようなコードの=は代入にならないと思います。 Sub test01() MsgBox (x = 2) * 1 y = 2 + (x = 2) MsgBox (a = "A") * 1 y = 2 + (x = "A") MsgBox y End Sub のように代入のつもりで書いたものが、比較判定のTrueやFalseとして返されて、思わぬ結果になる場合が在りそう。注意。 参考に上げてみます。 ーー コンピュター言語の種類よっては、代入の扱いをしてくれるものもありそうだが、小生勉強が足りず、確言できない。
お礼
imogasi 様 ご教授いただきありがとうございました。
- directjpn
- ベストアンサー率40% (83/203)
Range("M6") = Range("C4") & "-" & Range("D4").NumberFormatLocal = "mm/dd hh:mm" or Dim Ima_Time As Data Ima_Time = Format(Date, "mm/dd hh:mm") Range("M6") = Range("C4") & "-" & Ima_time これではダメなのですか? Date関数やTime関数を予め定義しておいて、導入する方法が安定的で 複数に活用出来て、メンテナンスが楽だと思うのですが
お礼
directjpn 様 回答いただき、ありがとうございます。 定義する方法もTRYしたのですが、うまくいかなかったので... 本当に勉強になります。 ありがとうございました。
- imogasi
- ベストアンサー率27% (4737/17070)
(1)Range("D4").Value = Format(Now, "mm/dd hh:mm") のRange("D4").Value だけにするか または (2)Range("D4").Value =を省いて Range("C4") & "-" & Format(Now, "mm/dd hh:mm") のようにすればよい。 セル(の値)と無関係に Sub test01() MsgBox Format(Now, "yy/mm/dd") End Sub (書式は質問例とは違う例ですが) のようにその返す結果を文字列として(VBAのFormat関数の返す値は文字列です)文字列の結合に使えます。 わざわざ、一旦空きセルにFormat(Now, "yy/mm/dd")をセットして、そのセルの値を文字列結合に使う人が居るかもしれないが、冗長として、普通は使われないだろう。
お礼
imogasi 様 前回の質問に引き続き、ご教授いただきありがとうございました。
- f272
- ベストアンサー率46% (8625/18445)
Range("M6") = Range("C4") & "-" & Format(Now, "mm/dd hh:mm") とすればどうですか?
お礼
f272 様 ご教授いただいた方法でできました。 回答いただきありがとうございました。
お礼
asciiz 様 大変判りやすく説明していただきありがとうございます。 教えていただきました方法でうまくいきました。 シリアル値を文字列にする努力もしたのですが、挫折してしまい... そもそもしたかった方法が出来ました。 本当にありがとうございました。