VBAで日付と時刻の計算に困っています

このQ&Aのポイント
  • VBAを使用して日本の日付と時刻を欧州の日付と時刻に変換するマクロを作成したいです。
  • 日本の日付と時刻が入力されているセルを選択し、マクロを実行することで欧州の日付と時刻に変更します。
  • 時差である9時間を減算して、日付と時刻を変更する方法を教えてください。
回答を見る
  • ベストアンサー

VBAで日付と時刻の計算に困っています

すでに入力されている日本の日付と時刻を、欧州の日付と時刻に変換する というようなマクロを組みたいです。 もう少し具体的にいうと、 日本の日付と時刻が 2011/06/12 07:15:20 というような形式で入力されているセルA1があり、 そのセルA1を選択している状態でマクロを実行すると、 セルに入力されている日付と時刻を欧州の日付と時刻に変更する というマクロです。 セルA1の日付を例にすると、マクロを実行したら時差である9時間を減算して、 2011/06/11 22:15:20 という値が返ってくるようにしたいです。 DateAdd関数を使用して時刻を-9時間することはできたのですが、 時刻のみが-9時間されるだけで日付は変更できませんでした。 もしよろしければ、時間を減算しただけで日付も減算してくれるような マクロの組み方を教えていただけないでしょうか。

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

  • ベストアンサー
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.3

一例ですが Range("A1").Value = Range("A1").Value - 9 / 24 といった簡単な方法もあります。 エクセルでは 数値の 1 を1日(24時間)の単位で計算していますので 9/24 が 9時間という事になります。 そのまま 引き算すれば、日付をまたいだ場合は前の日になりました。

angelwings
質問者

お礼

そのような仕組みになっているとは知りませんでした。 いろいろな所で応用が利きそうな考え方ですね! 教えていただきありがとうございます。 何が問題だったのかわからないのですが、前日にはエラーと表示されていたのに、 翌日に実行してみたら何の問題もなく動きました。 お騒がせしてしまい大変申し訳ありません。 ご丁寧にご回答いただきありがとうございました。

その他の回答 (2)

noname#194317
noname#194317
回答No.2

ついでにマクロじゃなくて、以下のようにセルに値を入れて計算させても、No1回答者さんと同じ結果になりましたよ。なので私も、日付が変わらないのは何かがおかしいとしか思えないです。 セルA1 2011/6/12 6:00:00 セルA2 9:00:00 セルA3 =A1-A2(結果:2011/6/11 21:00:00)

angelwings
質問者

お礼

型が違うセル同士でも計算が正しくできるのですね。 とても勉強になりました! ありがとうございます。 何が問題だったのかわからないのですが、前日にはエラーと表示されていたのに、 翌日に実行してみたら何の問題もなく動きました。 お騒がせしてしまい大変申し訳ありません。 ご丁寧にご回答いただきありがとうございました。

  • papope
  • ベストアンサー率33% (8/24)
回答No.1

こんにちは。 EXCEL2007で試しましたがDateAdd("h",-9,Sheet1.Cells(y,x)) でちゃんと前日になりましたが? どこかが、おかしいのだと思うのですが。 以上、ご参考まで。

angelwings
質問者

お礼

何が問題だったのかわからないのですが、前日にはエラーと表示されていたのに、 翌日に実行してみたら何の問題もなく動きました。 お騒がせしてしまい大変申し訳ありません。 ご丁寧にご回答いただきありがとうございました。

関連するQ&A

  • エクセルで日付・時刻の差を知りたい

    いつもお世話になってます。 早速質問ですが、エクセルで日付と時刻の差を出す関数や数式を知りたいです。 2つのセルにそれぞれ日付を入力した場合や、時刻をそれぞれ入力した時の差の出し方はわかるのですが、2つのセルにそれぞれ日付・時刻を入力し、その差を出す方法がわかりません。 そもそもそういった方法が可能なのでしょうか。

  • 日付、時刻の文字情報を日付、時刻データとしてセルに取り込む方法について

    日付、時刻の文字情報を日付、時刻データとしてセルに取り込む方法について エクセルのセル A1に 1999.08.31 B1に 22:15 というデータが文字情報として入力されています。 これを日付、時刻データとして、結合して、 C1に 1999/08/31/22:15 というようにデータを変換したいのですが、 なにか簡単な方法はありませんか。 私としては、C1セルをシリアルデータとして扱い、時刻の足し算、引き算をしたいのです。 このデータが膨大な量ですので、何か、関数を用いて、一度に処理できないのか思案しています。 以上よろしくお願いします。

  • 2つの時刻間の時間を計算したい。

    よろしくお願いします。 エクセル2010、OSはWindows7です。 例) セルA1 に時刻その1 セルB1 に時刻その2 というデータが入力されています。 時刻は、YYYY/MM/DD hh:mm の形式で入力されており、2つの時刻の差は24時間以上なので日付は異なります。 この2つのセルの時間差をhh:mmの形式で表したいですが、単純に引き算しただけでは思うようにいかないようです。 やり方を教えてください。

  • 日付の加算・減算ってできますか?

    DB2でのSQLで日付の加算・減算が出来なくて困っています。 DateAddのような関数はないんだとは思いますが、同じような機能を実現させることは出来ないんでしょうか? ご回答をお願いします。

  • YYYYMMDDhhmmss形式の文字列を日付時刻に変換・計算する方法

    YYYYMMDDhhmmss形式の文字列を日付時刻に変換・計算する方法 お世話になっております。 今回の質問内容なのですが、 あるテーブルにYYYYMMDDhhmmss形式(varchar(14))の列がありまして、 この値の時刻計算を行いたいと思っております。 YYYY/MM/DD hh:mm:ss形式であれば、DATEADD関数で 計算が可能なのですが、やり方がわからず苦戦しております。 例えば1秒加算させたいと思い、以下のSQL文を実行してみたのですが、 SELECT DATEADD(second,1,(CONVERT(DATETIME,'20100312111111'))) 「文字列から日付/時刻に変換できませんでした。」というエラーが 発生してダメでした。 時刻部分だけ取り出して、それに時分秒を分ける「:」をつけて変換し 計算するという方法は極力避けたいと思っています。 何かいい方法がありましたら、ご教示のほどよろしくお願い致します。

  • 日付け関数?

    エクセルの関数について質問があります。 セルA-1に一定の時刻(例えば2008年9月5日13:25)があるとします。 セルA-2に任意の時刻(例えば2008年9月5日17:00)を入力したとします。 セルA-3にセルA-1の時刻からA-2までの経過時間を表示させるには、どのようにすればよいのでしょうか? 関数を見てみたのですが、イマイチこれというのが見つかりません。

  • 時刻計算

    1)時刻を2つ入力してかかった時間を計算したい 2つのセルに時刻を 【例】16:00 17:00 のように入力してB1-A1としたら1:00と出てきたのですが、 24時をまたいでしまうと、この方法が使えません。 2)かかった時間を”分”で表示したい セルの書式設定、ユーザー定義で h*60+m"分" としてみましたが、「入力した表示形式が正しくありません」 と出てしまいます。 何か方法はないでしょうか?

  • 【VBA】土日をスキップして日付計算

    今A列に土日を除いた日付があり、マクロを実行すると、日付が一日加算される下記のようなVBAを書いてます。 Sub DateCulc() i = 3 Do dodate = (DateAdd("d", 1, Cells(i, 1))) Cells(i, 1) = dodate i = i + 1 Loop While Cells(i, 1).Value <> "" End Sub 一日加算した場合、土日をスキップ、つまり金曜の日付は月曜になるようにしたいのですが、思いつきません。WeekDayを使うのだと思うのですが。 ご教授頂けますか。宜しくお願いします。

  • VBA アクティブセルに1行目の日付を入力したい

    こんにちは、VBA初心者です。 アドバイスお願いします。 1行目に日付が入力してあります。 任意のセルを選択し、マクロを実行すると1行目の日付(日のみ)がそのセルに入力されるマクロを作っています。 例えば、    A       B      C 1 2008/11/1  2008/11/2  2008/11/3 2 3 4          2  5 セルB4を選択して実行するとB4に2が入力され、セルC3を選択して実行するとC3に3と入力するようにしたいです。 私なりに考えたのが下記のコードです。 Sub アクティブセルに1行目の日付を入力() Dim hidukesyutoku As Byte Dim dd As Date dd = Date Do While ActiveCell.Value <> dd ActiveCell.Offset(-1).Activate hidukesyutoku = hidukesyutoku + 1 Loop ActiveCell.Copy Destination:=ActiveCell.Cells(hidukesyutoku + 1, 1) End Sub Do Whileを使って日付があるまでアクティブセルをオフセットしていくというものですが、このコードのままでは、dd=dateとなっているため今日の日付にしか反応しません。 今日だけではなく、日付というだけで反応するようにするにはどうしたらいいでしょうか? また、このコードは、処理にも時間がかかりあまりいいものではないと思います。(初心者の私では、これが限界でした。) もっと早いコードの作り方があれば教えて下さい。

  • エクセルVBAでワークシート関数のようにしたい

     例えば、セルA1に日付を入力して、セルB1に関数WEEKDAYが入力されていると、すぐセルA1の値を返してくれますが、これと同じことをVBAで再現したいのですが、可能でしょうか?  マクロやVBAでWEEKDAYを記述しても、「ツール」→「マクロ」→「マクロ」か「VBA」でやらないとA1の値をB1に返せないので、A1に日付を入力した瞬間、B1に値を返したいのですが、よろしくお願いします。

専門家に質問してみよう