VBAでNOWから年と秒をはぶきたい

このQ&Aのポイント
  • VBAでボタンを押したら特定のセルに現在の月と日時を表示するコードを作成しましたが、年と秒が取り込まれてしまいます。年と秒を除いて表示する方法を教えてください。
  • Range関数とFormat関数を使用して、VBAで特定のセルに現在の月と日時を表示するコードを作成しましたが、年と秒が取り込まれてしまいます。年と秒を除いて表示する方法を教えてください。
  • VBAでNOW関数を使用して現在の月と日時を取得し、特定のセルに表示するコードを作成しましたが、年と秒も表示されてしまいます。年と秒を除いて表示する方法を教えてください。
回答を見る
  • ベストアンサー

VBAでNOWから年と秒をはぶきたい

VBAで質問です。 ボタンを押したらD4に月/日スペース時:分(10/20 17:07)が入るようにしました。 Range("D4").Value = Format(Now, "mm/dd hh:mm") 別のセルM6にc4にある担当者名とD4の情報を入れたいのですが、 うまくいきません。 NGのコード(1) Range("M6") = Range("C4") & "-" & Range("D4") NGのコード(2) Range("M6") = Range("C4") & "-" & Range("D4").Value = Format(Now, "mm/dd hh:mm") こうしたいのに 木村-10/20 17:07 こうなります 木村-2017/10/20 17:07:00 どうすれば年と秒を取り込まなく出来るのでしょうか?

  • capli
  • お礼率54% (56/103)

質問者が選んだベストアンサー

  • ベストアンサー
  • asciiz
  • ベストアンサー率70% (6641/9409)
回答No.4

>ボタンを押したら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 による文字列を生成しても良いのですが。 いっぱい正解が付くと思いますので、ご自分でわかりやすいものをどうぞ^^;

capli
質問者

お礼

asciiz 様 大変判りやすく説明していただきありがとうございます。 教えていただきました方法でうまくいきました。 シリアル値を文字列にする努力もしたのですが、挫折してしまい... そもそもしたかった方法が出来ました。 本当にありがとうございました。

その他の回答 (6)

回答No.7

Range("M6") = Range("C4").Value & "-" & Range("D4").Text

capli
質問者

お礼

nan93850673 様 教えていただいた方法はとてもシンプルで判りやすいです。 勉強になります。 ありがとうございました。

回答No.6

> 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") こうですね。 なお、 > どうすれば年と秒を取り込まなく 取り込まないように・・は難しいですねぇ。 表示しない方法は上記の方法などなどいくつかありますけどね。

capli
質問者

お礼

tsubu-yuki 様 >VBAの場合、基本的には「左辺に右辺を入力(代入)」ですからね。 大変勉強になりました。 基本的な勉強もできていない状態でございまして、 ご教授いただき感謝します。 また、セルのみでの方法もご教授いただきありがとうございました。 > どうすれば年と秒を取り込まなく 次回の質問では気を付けます。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.5

本質問に(関連して)上げるべきかどうか不安なのですが、 下記のようなコードの=は代入にならないと思います。 Sub test01() MsgBox (x = 2) * 1 y = 2 + (x = 2) MsgBox (a = "A") * 1 y = 2 + (x = "A") MsgBox y End Sub のように代入のつもりで書いたものが、比較判定のTrueやFalseとして返されて、思わぬ結果になる場合が在りそう。注意。 参考に上げてみます。 ーー コンピュター言語の種類よっては、代入の扱いをしてくれるものもありそうだが、小生勉強が足りず、確言できない。

capli
質問者

お礼

imogasi 様 ご教授いただきありがとうございました。

  • directjpn
  • ベストアンサー率40% (83/203)
回答No.3

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関数を予め定義しておいて、導入する方法が安定的で 複数に活用出来て、メンテナンスが楽だと思うのですが

capli
質問者

お礼

directjpn 様 回答いただき、ありがとうございます。 定義する方法もTRYしたのですが、うまくいかなかったので... 本当に勉強になります。 ありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

(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")をセットして、そのセルの値を文字列結合に使う人が居るかもしれないが、冗長として、普通は使われないだろう。

capli
質問者

お礼

imogasi 様 前回の質問に引き続き、ご教授いただきありがとうございました。

  • f272
  • ベストアンサー率46% (8018/17137)
回答No.1

Range("M6") = Range("C4") & "-" & Format(Now, "mm/dd hh:mm") とすればどうですか?

capli
質問者

お礼

f272 様 ご教授いただいた方法でできました。 回答いただきありがとうございました。

関連するQ&A

  • VBAで出した数字の分表示について

    Public Sub Jikoku() Range("A1").Value = Format(Now(), "hh:mm:ss") Application.OnTime Now + TimeValue("00:00:01"), "Jikoku" End Sub このVBAをつかって時間を出してセルの書式設定で mm表示で時間だけ表示しようとすると 例えば9:32:26だとしても01と表示されてしまいます。 mm:ssだと32:26と出るのですが、分だけだとうまくいきません。 原因が分かる方いらっしゃいますでしょうか? 原因かどうかわかりませんが年数表示が1900年となってしまいます。 PCの設定は2014年なのですが、、

  • エクセル VBA タイマー 0:00:00で

    5分ピッチで 仕事させます。 ブックオープンで インターバル = TimeValue("00:05:00") Application.OnTime Format(開始時刻, "hh:mm:ss"), "orgdata.必要な作業を行うマクロ", 待ち時間 Debug.Print "st" & 開始時刻 Call timer_set 反復時刻 = 開始時刻 If Format(反復時刻, "hh:mm:ss") > "23:54:00" Then 反復時刻 = Format(DateAdd("d", 1, 反復時刻), "yyyy/mm/dd") & " " & TimeValue("0:00:10") Else 反復時刻 = Format(反復時刻, "yyyy/mm/dd") & " " & TimeValue(反復時刻) + インターバル End If ループで5回ほど Application.OnTime Format(反復時刻, "hh:mm:ss"), "orgdata.必要な作業を行うマクロ", 待ち時間 Debug.Print "loopexit" & 反復時刻 で、デバッグアウトが end 2013/08/15 3:02:00 st 2013/08/14 23:50:10 loop2013/08/14 23:55:10 loop2013/08/15 00:00:10 loop2013/08/15 00:05:10 loop2013/08/15 00:10:10 loopexit2013/08/15 00:15:10 makuro 2013/08/15 00:20:10 makuro 2013/08/15 00:25:10 makuro 2013/08/15 00:30:10 で、「必要な作業を行うマクロ」 で 仕事のあと タイマー追加します。 If Format(反復時刻, "hh:mm:ss") > "23:54:00" Then 反復時刻 = Format(DateAdd("d", 1, 反復時刻), "yyyy/mm/dd") & " " & TimeValue("0:00:10") Else 反復時刻 = Format(反復時刻, "yyyy/mm/dd") & " " & TimeValue(反復時刻) + インターバル ' End If Application.OnTime Format(反復時刻, "hh:mm:ss"), "必要な作業を行うマクロ", 待ち時間 (反復時刻を 時間だけの時 formatを 入れて・・・) Debug.Print "makuro " & 反復時刻 ’これが デバッグで出力されています。 で、ダミーの作業が clup = clup + 1 orgdata.Cells(clup, 10) = Format(Now, "yyyy/mm/dd") orgdata.Cells(clup, 11) = Format(Now, "hh:mm:ss") orgdata.Cells(clup, 12) = Format(反復時刻, "yyyy/mm/dd") orgdata.Cells(clup, 13) = Format(反復時刻, "hh:mm:ss") 結果 2013/8/14 23:50:10 2013/8/15 0:20:10 2013/8/14 23:55:10 2013/8/15 0:25:10 2013/8/15 0:00:10 2013/8/15 0:30:10 これで、タイマー作業が 途切れます。 0:00:00 超える事に 問題があるなら 0:00:10 は 実行されないハズ・・・・ 反復時刻は yyyy/mm/dd & ” ” & ”hh:mm:ss” です。 試しに 時刻だけでやっても 同じでした。 さて、如何でしょ? 実は これで、動いていたのですが、3日ほど前から 0:00以降 突然タイマーが動かなくなったのです PCは 3台 同じ現象です よって WINの設定では無い・ エクセル オプションに 何か設定でもあるのか?? どうも VBAのタイマーは不可解で エクセル終了させず、 プログラムだけ終了、再ロードだと、前のタイマー残ったまま、ダブルでタイマー動くとか・・・・ それと、WIN32とかの 別のタイマー使った方が 良いのでしょうか??

  • VBA:日付をシリアル値にできるの関数教えてください。

    VBAにより、あるセルに"yyyy / mm / dd hh:mm:ss"のフォーマットで日付を記入しました。それを手動で書式を標準にすると例えばシリアル値38148.4768981481になります。これをVBA上でできる関数を知りたいです。つまり、日付をシリアル値にできるVBAの関数を教えて頂きたいです。宜しくお願いいたします。

  • Excel2010 VBAについて

    以下のソースを書いて実行したのですが 「実行エラー'1004' WorksheetFunctionクラスのVlookupプロパティを取得できません」 と表示されます Sub 時刻表示() '日本の時間と選択した年の時刻・時差を1秒ごとに表示しなおす Dim City As String Dim Jisa As Long Application.ScreenUpdating = False City = Range("C6").Value Jisa = WorksheetFunction.VLookup(City, _ Worksheets("都市リスト").Range("B3:C14"), 2, False) Range("E7").Value = Jisa Range("C4").Value = Now Range("C7").Value = DateAdd("h", Jisa, Now) Range("C4, C7").NumberFormat = "m/d h:mm:ss" Application.ScreenUpdating = True Application.OnTime Now + TimeValue("0:00:01"), "時刻表示" End Sub Sub 時刻表示終了() '時計を止める Application.OnTime Now + TimeValue("0:00:01"), "時刻表示", Schedule:=False End Sub デバックをすると Application.OnTime Now + TimeValue("0:00:01"), "時刻表示", Schedule:=False がマーカーで引かれます 一応本通りには打ったと思うのですが、、、。 どこが間違えているか教えてください

  • エクセル 時間の合成

    インターバル = TimeValue("00:50:00") 早速ですが インターバル = TimeValue("00:50:00") Debug.Print Now + インターバル これは エラーになりません。 しかし If Format(Now, "hh:mm:ss") < Format("3:00:00", "hh:mm:ss") Then 終了時刻 = Format(Now, "yyyy/mm/dd") & " " & TimeValue("3:02:00") Else 終了時刻 = Format(DateAdd("d", 1, Now), "yyyy/mm/dd") & " " & TimeValue("3:02:00") End If Debug.Print 終了時刻 + インターバル これは、型が合わないエラーです。 終了時刻は 文字列的に合成されただけ・・・だろうと 推察するのですが では、「終了時刻 + インターバル」 が 可能な終了時刻は どうして 作ればいいのでしょうか?

  • EXCEL VBA オートフィルタの値コピー2

    たびたびすいませんよろしくお願いします。 EXCEL VBA オートフィルタの値コピーの追加質問です http://okwave.jp/qa4803815.html?ans_count_asc=20 オートフィルタ後、1日当たり行は10~15行あります、そのうちH列からM列まで、ある1行にデータがありますそのデータをH列から順番にSheet1のM20とM28までコピーしたいのです、ただ日によってその列は空欄の時やM列だけの時もありますもあります。さらにN列からP列まで同じようにデータがある時(H列からM列と行が違うときがあり)、上にある行からSheet1のM20とM28に上詰めでコピーしたいのです。 もっと簡単にいいますとH列からP列まである値を上の行からさらにH列から順番に上詰めでSheet1のM20とM28にコピーしたいのです。 なにとぞよろしくお願いします。 Sub データコピー() Range("AB17") = Format(Sheet3.Range("A3").Value, "yy") Range("AE17") = Format(Sheet3.Range("A3").Value, "mm") Range("AH17") = Format(Sheet3.Range("A3").Value, "dd") Range("AK17") = Format(Sheet3.Range("A3").Value, "aaa") Range("D22") = Sheet4.Range("D3").Value Range("D25") = Sheet4.Range("E3").Value Range("H22") = Sheet4.Range("F3").Value Range("D22") = Sheet4.Range("G3").Value Range("L22") = Sheet4.Range("K3").Value Range("Q22") = Sheet4.Range("L3").Value Range("U22") = Sheet4.Range("M3").Value .   .   . End Sub

  • 日付が####と表示される

    いつもお世話になっています。 Excelのマクロ部分で現在日時を表示させたいのですが、なぜか "#####"で表示されてしまいます・・・。 Range("G1").Value=Format(Date,"yyyy/mm/dd") & Space(1) & Format(Time,"hh:mm") MsgBox "日時:" & Range("G1").Value とやっています。 MsgBoxでは『日時:2002/06/16 17:22:00』と表示されるのに、実際の表示は "#####"となっています。 G1にカーソル(?)をあてても"2002/6/14 17:34:00"となっています。 別のファイルではちゃんと表示されているのに、なぜこんなことが起きるのでしょうか? (セルのオプション設定など見てみましたが、同一でした) どうすれば日にちと時刻(秒は表示させず)をExcelシートに表示させることが できるのでしょうか? ご存知の方、教えてください!!

  • EXCEL VBA オートフィルタの値コピー

    ほぼ初心者ですのでよろしくお願いします。 Sheet2にデータがありそのデータをオートフィルタで日付から抽出してSheet3にコピーして、その後Sheet1の表に該当項目をコピーする際についてですが、オートフィルタ後、1日当たり行は10~15行あります、そのうちG列にはデータが通常2つのセルに値があるだけでほかの行は空欄です。(日によってどの行になるかはわかりません)この2つのセルの値をそれぞれSheet1のM10とM11コピーしたいのです、 ちなみにセル番地は下記の方法で取得できましたが、値の取得ができません。 Range("D1").Value = Worksheets("sheet1").Range("A1").End(xlDown).Row Range("D2").Value = Worksheets("sheet1").Range("A65536").End(xlUp).Row Sub データコピー() Range("AB17") = Format(Sheet3.Range("A3").Value, "yy") Range("AE17") = Format(Sheet3.Range("A3").Value, "mm") Range("AH17") = Format(Sheet3.Range("A3").Value, "dd") Range("AK17") = Format(Sheet3.Range("A3").Value, "aaa") Range("D22") = Sheet4.Range("D3").Value Range("D25") = Sheet4.Range("E3").Value Range("H22") = Sheet4.Range("F3").Value Range("D22") = Sheet4.Range("G3").Value Range("L22") = Sheet4.Range("K3").Value Range("Q22") = Sheet4.Range("L3").Value Range("U22") = Sheet4.Range("M3").Value .   .   . End Sub

  • 終了日時から開始日時を引いた時間を求めるvba式

    お世話になっています。 Excelで A列欄にタイトル B列欄に開始日 C列欄に開始時 D列欄に終了日 E列欄に終了時 のデータが有ります。 F列欄に合計を求めたいです。 下記のVBAコードを書きましたが、 実行エラー13,型が一致しませんと表示されます。 正しいコードを教えていただけないでしょうか? Option Explicit Public i As Long Public num As Integer Sub newmacro() i = Range("A1").End(xlDown).Count Range("F1").Value = "合計" Columns("F").Select Selection.NumberFormatLocal = "[h]:mm" For num = 1 To i Range("F" & Format(num)).Value = Range("D" & Format(num)).Value + Range("E" & Format(num)).Value - _ Range("B" & Format(num)).Value + Range("C" & Format(num)).Value Next num End Sub よろしくお願いします。

  • excel vbaの関数の使い方

    excel VBAでsumproduct関数を使いたいがでますのですがどうしても実行できません 何が原因でしょうか、どなたか教えてください。 ------------------------------------------------- 下記コードは実行できます。 Worksheets("集計").Range("j4").Value = WorksheetFunction.Sum(Worksheets("日常").Range("h4:h13")) 下記コードは型が違うとのコメントがでます。 Worksheets("集計").Range("j4").Value = WorksheetFunction.SumProduct((Worksheets("日常").Range("c4:c13") >= j2) * Worksheets("日常").Range("c4:c13") <= k2) * Worksheets("日常").Range("d4:d13") = l2 * Worksheets("日常").Range("f4:f13") = m2 * Worksheets("日常").Range("h4:h13") --------------------------------------------------------------------- ワークシートは、日常、集計、の二つがあります。 「日常」には、C4:H13にデータがあります。 c列に年月日、d列にコード番号、e列に購入箇所、f列にコード番号、g列に商品、h列に金額 が入力されています。 「集計」には、j2に開始日、k2に終了日、l2にd列のコード番号、m2にf列のコード番号、 が入力されています。 環境は、windows10 使用しています。 ----------------------------------------------------------- 以上の状況ですがvba でsumproduct関数を使いたいのですが実「実行」できません,たかどなたか教えて頂けませんか。

専門家に質問してみよう