1

分の値 (3.83 分など) を取り、それを hh:mm:ss 時間形式 (0:03:50 であることがわかっています) に変換しようとしています。

何らかの理由で、マクロから記録された .NumberFormat が機能せず、#VALUE が表示されます。エラー。

    Function MINtoHMS(MIN)
    MIN = MIN / (24 * 60)
    MINtoHMS = MIN
    MINtoHMS.NumberFormat = "[h]:mm:ss;@"
    End Function
4

3 に答える 3

1

まず、数式を使用して Excel セルの形式を変更することはできません。セルの数式は、セル (または範囲) の値にのみ割り当てることができます。

第二に、関数でいくつかのデータ型を宣言する必要があります。これにより、多くの不可解なエラーやその他の奇妙な結果が防止されます。

次のようなもので問題ありません。

Function MINtoHMS(MIN As Double) As Date
    MIN = MIN / (24 * 60)
    MINtoHMS = MIN
End Function

Ripster が回答で示しているように、関数を介して表示されるものを完全に制御する唯一の方法は、代わりにフォーマットされた文字列を返すことです。

于 2013-02-20T18:09:12.723 に答える
0

これらの次の方法を試してください。

DAYS = Format(Int([Expr3]/86400), "00") - will correctly display days
HOURS = Format(Int(([Expr3])/3600) - ((Int([Expr3]*86400)/3600), "00") - DOES NOT CORRECTLY display correct hours
HOURS = Format(Int([Expr3]/3600),"00") - What will display hours
MINUTES = Int(([Expr3]-(Int([Expr3]/3600)*3600))/60)
SECONDS = Format((([Expr3] Mod 60)),"00")

dTotalSeconds = DateDiff("S", Now(), dChristmasDate)
    iDays = Int(dTotalSeconds / 86400)
    iHours = Int((dTotalSeconds Mod 86400) / 3600)
    iMinutes = Int(((dTotalSeconds Mod 86400) Mod 3600) / 60)
    iSeconds = ((dTotalSeconds Mod 86400) Mod 3600) Mod 60

' この関数を使用すると、分を hh:mm:ss に変換できます

    Public Function HMStoSec(strHMS As String) As Long
        HMStoSec = Split(strHMS, ":")(0) * 3600 + _
                   Split(strHMS, ":")(1) * 60 + _
                   Split(strHMS, ":")(2)
    End Function
于 2013-02-20T18:20:12.940 に答える