2016-12-18 12 views
1

の間、私はそうのようなユーザーが実行したときに、セルA8にタイムスタンプを残しVBAスクリプトを持っている:Excelの数式 - 計算日、時間、分、秒2つのタイムスタンプ

ActiveSheet.Range("A8").Value = Format(Now(), "dd/mm/YYYY hh:mm:ss") 

これは、セルに次のように表示されます日付としてフォーマットされA8(:

10/12/2016 9:15:10 AM 

次の私は最後の時間は、ユーザがマクロ/ VBAコードを実行したので、それがされているどのように多くの日数、時間、分、秒を決定することができるようにしたい

セルB8で= NOW()を使用して現在の日付/時刻を取得しています。

細胞B8もそうのような日付と表示としてフォーマットされる:

12/18/16 12:45 

私の式は、セルB8に、現在の日時とA8にタイムスタンプを比較するべきです。

=INT(A8-B8)&" days "&TEXT(A8-B8,"h"" hrs ""m"" mins """) 

ここで日付の書式が一貫していないことに気付きましたが、これが重要かどうかわかりません。

何らかの理由で私は望ましい結果を得ていないと私は私の式で、このエラーを取得:

バリュー!

私が間違っている場所を誰かに教えてもらえますか?追加で

、可能であれば私はすべてを一度にこのような日、時間、分、秒を表示したくない:タイムスタンプが60秒未満であれば、私が実際にしたい

0 days, 0 hours, 0 minutes, 0 seconds 

何があります、以下のようなものを示すために:B8はA8よりも大きくなければなりませんので

+0

** A8 **から** B8 **を差し引くことはできません。それらはテキスト値です。 –

+0

@ YowE3Kありがとうが、それはvbaだ。私は数式にこれを取得しようとしているので、セルは常にカウントされます。式が自動的に同じようにセルを更新しないvbaソリューションでは、 –

答えて

2

まず

55 seconds ago 

Then something like: 

20 minutes ago 

then: 

1 hour ago 

then : 

2 days ago 

おかげで、それは、B8-A8、周りにいない他の方法でなければなりません。この変更により、最初の数式が機能します。

第二に、ご希望の式:

=IF(B8-A8>=1,INT(B8-A8)&" days ago",IF(HOUR(B8-A8)>=1,HOUR(B8-A8)&" hours ago",IF(MINUTE(B8-A8)>=1,MINUTE(B8-A8)&" minutes ago",IF(SECOND(B8-A8)>=1,SECOND(B8-A8)&" seconds ago", " just now")))) 

がPS:これが動作するためにYowE3Kのコメント@を1として、あなたの細胞A8B8Dateタイプに設定する必要があり、そうでなければ、適切なフォーマットでそれらをフォーマットする必要があります数式の中で。最初のオプションは簡単にする必要があります。

+0

OPは 'ActiveSheet.Range(" A8 ")を変更する必要があると思います。値=フォーマット(Now()、" dd/mm/YYYY hh:mm:ss ")' ActiveSheet.Range( "A8")。Value = Now() 'を入力してください。 (もしそうでなければ、あなたの公式では 'A8'の代わりに'(DATEVALUE(A8)+ TIMEVALUE(A8)) 'を使う必要があります) – YowE3K

+0

@ YowE3K良い発言。範囲は既に 'Date'型としてフォーマットされていると思います。とにかく私はOPにこのことを考慮に入れることを提案します。 –

+1

えええええええええええええええええええええええええええええええええええええええええとExcelが変わっている - セルが既に日付としてフォーマットされている場合、値を 'Format(Now()、" dd/mm/YYYY hh:mm:ss ")'に設定すると、 (効果的に 'Now()'に設定するのと同じですが)、そのコードを実行する前に日付としてフォーマットされていない場合、Excelはそれをテキストとしてフォーマットし、その値を使用できなくします。 – YowE3K

関連する問題