是否可以在单元格而不是单元格值中显示公式结果?

时间:2020-06-22 14:44:14

标签: excel formatting

现在,我知道不可能在单元格中输入数字并运行公式并替换该数字,因为那样的话,该公式将不得不在先前的结果上再次运行,依此类推...

我要寻找的不是更改单元格的值,而是使用单元格的值显示公式的结果。如果可能的话,问题还可能是如何将公式用作自定义单元格格式。

基本上,我想做的是在一个单元格中输入秒数,并以十进制格式将该单元格显示为小时。例如,如果我在一个单元格中输入12000,格式应显示为3,33h。只需在另一个单元格中不使用该公式即可得出与公式= 12000/3600相同的结果。我不想更改12000的值。我认为应该可以,因为格式可用于将数字解释为日期,例如显示小时,分钟和秒。我只是不知道如何告诉它忽略日期部分,而只是将数字解释为秒。

例如,我也会对3h 20m 00s感到满意。

1 个答案:

答案 0 :(得分:0)

您可以通过VBA进行格式化,而不是通过格式

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 1 Then
        Dim c As Range
        For Each c In Target.Cells
            If c.Column = 1 Then
                If IsNumeric(c.Value) Then
                    c.Value = SecToStr(CLng(c.Value))
                End If
            End If
        Next
    End If
End Sub

Function SecToStr(v As Long) As String
    Const Mnt As Integer = 60
    Const Hor As Integer = 3600 '60*60
    Const Dys As Long = 86400   '60*60*24
    Dim tmp As Long
    If v >= Dys Then
        tmp = v Mod Dys
        v = (v - tmp) / Dys
        SecToStr = v & "d "
        v = tmp
    End If
    If v >= Hor Then
        tmp = v Mod Hor
        v = (v - tmp) / Hor
        SecToStr = SecToStr & v & "h "
        v = tmp
    End If
    If v >= Mnt Then
        tmp = v Mod Mnt
        v = (v - tmp) / Mnt
        SecToStr = SecToStr & v & "m "
        v = tmp
    End If
    SecToStr = SecToStr & v & "s"
End Function

更改col A中的任何单元格