私は、複数の従業員が働いた合計時間を合計するスプレッドシート(x4)を持っています。 1人の従業員の合計は24時間になる。私の関数では、Excelが内部的に時間を表現する方法のため、1になります。 'hours'の値に基づいて、各セルの合計時間を表示するようにセルをフォーマットします。私はチェックした - typename(時間)=ダブル。時間= 1のときに時間> = 1が '真'に等しい理由がわかりません。その人のスプレッドシートの値に1分を追加すると、期待通りに機能しますか?Excel vba - 論理エラー
Public Function format_hours(hours As Variant) As Variant
If hours >= 1 Then
format_hours = Application.Text(hours, "[hh]:mm")
ElseIf hours > 0 Then
format_hours = Format(hours, "hh:mm")
Else
format_hours = 0
End If
End Function
「バリアント」の使用はお勧めできません。変数の型をより強く指定すると、利点があります。 (また、 'format_hours'に' f'がありません - このようなエラーを避けるために 'Option Explicit'を使用してください) – braX
私の変数 'hours'には先行スペースがあります。これを削除すると、ロジックが期待通りに機能します。そのスペースはどこから来ていますか? – Chas
この関数がどのように呼び出されているのかわかりません。引数を変種ではなく数字として指定した場合は、これを早くキャッチしたでしょう。 – braX