0

Visual Basic / Excel の操作は初めてです。現在の時刻を 1 つの列に入力し、ユーザーが新しい時刻までの日数/時間/分を入力して別の列に出力できるようにする簡単なスクリプトを作成しようとしています。

これが最善の方法ではないと確信していますが、これまでのところ、次のことを行っています。私は日付をいじることをあきらめ、時間だけを扱っています:

Sub TimeModule()
Dim DaysLeft, HoursLeft, MinutesLeft As Double
DaysLeft = Val(InputBox("Days left"))
HoursLeft = Val(InputBox("Hours left"))
MinutesLeft = Val(InputBox("Minutes left"))

Dim CurrentTime As Date
CurrentTime = TimeValue(Now())

ActiveCell.Value = CurrentTime
ActiveCell.Offset(0, 1) = CurrentTime + Time(HoursLeft, MinutesLeft, 0)

End Sub

もちろん、エラーが発生しています。誰かがこれを行うためのより良い方法と、私が誤用している機能に光を当てることができれば、本当に感謝しています!

編集:もちろん、最終的にはスクリプトが日も処理できるようにしたいと思います。

4

3 に答える 3

3

私があなたを正しく理解していれば、これはExcelのセル関数を使用するだけで可能だと思います。

たとえば、これはあなたが見るものです...

Time Now:           Days:   Hours:  Minutes:    New Time:
30/05/2012 23:34    15      6       23          15/06/2012 05:57

...そして、これが各セルの内容です (左上のセルが A1 であると仮定します)...

Time Now:   Days:   Hours:  Minutes:   New Time:
=NOW()      15      6       23         =A2+B2+TIME(C2,D2,0)

各機能の説明:

  • NOW()日付と時刻としてフォーマットされた現在の日付と時刻を返します。
  • DATE(year,month,day)MS Excel 日時コードで日付を表す数値を返します。
  • TIME(hours,minutes,seconds)数値として指定された時間、分、秒を、時刻形式で書式設定された Excel のシリアル番号に変換します。

最後のセルの方程式を分析します。

  • A2現在の日付/時刻を含むセルです (最後のワークシート計算の時点)。
  • B2ユーザーが入力した日数の値です。
  • TIME(C2,D2,0)は TIME() 関数で、ユーザーが入力した時間と分の値をセルC2D2それぞれから取得します。

これはあなたの意図した機能のようなものですか...?

于 2012-05-30T22:54:57.797 に答える
0

この方法で「暗く」する場合は、各変数のデータ型を記録する必要があります。MinutesLeftはDoubleであり、すべてが(デフォルトで)Variantです。

探しているTime関数はTimeSerialです。

日付は、特定の日付からの日数として保存されます。日付に日を追加するには、数字を合計するだけです。

Sub TimeModule()

    Dim lDaysLeft As Long
    Dim lHoursLeft As Long
    Dim lMinutesLeft As Double
    Dim dtCurrent As Date

    lDaysLeft = Val(InputBox("Days left"))
    lHoursLeft = Val(InputBox("Hours left"))
    lMinutesLeft = Val(InputBox("Minutes left"))

    dtCurrent = Now()

    ActiveCell.Value = dtCurrent
    ActiveCell.Offset(0, 1).Value = dtCurrent + lDaysLeft + TimeSerial(lHoursLeft, lMinutesLeft, 0)

End Sub
于 2012-05-31T18:51:40.907 に答える
0

VBAを使用する場合、コードの唯一の問題は「時間」関数です。代わりにCDateを使用できます:

Sub TimeModule()
  Dim DaysLeft, HoursLeft, MinutesLeft As Double
  DaysLeft = Val(InputBox("Days left"))
  HoursLeft = Val(InputBox("Hours left"))
  MinutesLeft = Val(InputBox("Minutes left"))

  Dim CurrentTime As Date
  CurrentTime = TimeValue(Now())

  ActiveCell.Value = Now()
  ActiveCell.Offset(0, 1) = ActiveCell.Value + DaysLeft + CDate(HoursLeft & ":" & MinutesLeft)
  'ActiveCell.Offset(0, 1) = CurrentTime + Time(HoursLeft, MinutesLeft, 0)

End Sub
于 2012-05-31T07:15:01.497 に答える