如何将我在excel单元格中输入的值乘以常量,结果显示在同一单元格上?

如何将我在excel单元格中输入的值乘以常量,结果显示在同一单元格上?,excel,excel-formula,Excel,Excel Formula,我有一个Excel电子表格,我需要在一列的单元格中输入以天为单位的值,并自动将这些值转换为秒。我该怎么做 例如,假设我想将B列中的值反映为秒。所以在B1 I type 1中,按Enter键,现在B1中的值是86400;在B2 I类型2中,按Enter键,B2变为172800 更清晰?没有VBA,您可以使用公式列,类似于以下示例: 也就是说,完成“天”列,秒列中的条目将取“天”列中的值,并将其乘以86000(每天24小时x每小时60分钟x每分钟60秒)。这可能是最好的方法,因为您仍然保持原始数据

我有一个Excel电子表格,我需要在一列的单元格中输入以天为单位的值,并自动将这些值转换为秒。我该怎么做

例如,假设我想将B列中的值反映为秒。所以在B1 I type 1中,按Enter键,现在B1中的值是86400;在B2 I类型2中,按Enter键,B2变为172800


更清晰?

没有VBA,您可以使用公式列,类似于以下示例:

也就是说,完成“天”列,秒列中的条目将取“天”列中的值,并将其乘以86000(每天24小时x每小时60分钟x每分钟60秒)。这可能是最好的方法,因为您仍然保持原始数据集(天)

使用VBA,您可以通过以下方式进入与工作表对象关联的更改过程:

Dim redo As Boolean

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ChangedCell As Variant

If Target.Count = 1 Then
  For Each ChangedCell In Target
    If redo Then
      If (ChangedCell.Column = 2) And (ChangedCell.Row > 1) Then
        redo = False
        ChangedCell.Value = ChangedCell.Value * 86400 ' * 24 * 60 * 60
      End If
    Else
      redo = True
    End If
  Next
End If
End Sub
上述代码循环遍历
目标
范围内的每个元素(所有已更改的单元格),并且仅当单元格在特定范围内时,才使用前面提到的相同公式(将调用
.Value
乘以86400)对其进行更新。上述特定范围是第2列和第1行中的单元格。这是为了避免任何超出此范围的计算。此外,由于每次更改都会执行更改过程,因此您可能会遇到递归更新工作表的问题。为此,将创建一个布尔值
redo
,以避免重新计算任何更改

虽然使用VBA解决方案很好,但此更新会丢失原始数据集,因此我建议不要使用

最后,您可以使用“特殊粘贴”方法,复制86400值(从工作表上的任何位置),然后选择您感兴趣的更新范围并粘贴“特殊>操作>乘法”:

如果要自动将D列中键入的任何数字转换为秒作为真实时间值,请右键单击工作表的“名称”选项卡,然后选择“查看代码”。当VBE打开时,将以下内容粘贴到右侧的窗格中,标题类似于Book1-Sheet1(代码)

Private子工作表\u更改(ByVal目标为Excel.Range)
如果不相交(目标,列(“A”)什么都不是,那么
关于错误转到错误
Application.EnableEvents=False
将a调暗为范围,毫秒为布尔值
对于相交中的每个a(目标、列(“a”))
如果是数字(a.Value),则
如果a.值为0,则
a、 偏移量(0,1)=a.值*86400
其他的
a、 偏移量(0,1)。ClearContents
如果结束
如果结束
下一个
如果结束
GoTo Fìn
埃鲁尔:
调试。打印错误
Fìn:
Application.EnableEvents=True
端接头
点击
Alt+Q
返回工作表,以数字形式开始秒数进入D列

我将整数或双精度输入到单元格中,先是几个小时,然后是几分钟,最后是几秒钟。我发现这是在给定Excel的15位重要性的值中保留任何毫秒的准确性的最佳方法

编辑:
修改为更接近OP编辑的问题

我修改了Jeeped代码以满足我的需要

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Not Intersect(Target, Columns("D")) Is Nothing Then
        On Error GoTo Erreur
        Application.EnableEvents = False
        Dim d As Range
        For Each d In Intersect(Target, Columns("D"))
            If IsNumeric(d.Value) And d.Value > 0 Then
                ' Interested in a 8-hour day
                d.Value = d.Value * 3600 * 8
            Else
                d.Value = ""
            End If
        Next d
    End If
    GoTo Fìn
Erreur:
    Debug.Print Err
Fìn:
    Application.EnableEvents = True
End Sub

自动的?需要VBA。2其他选项:1:使用两列-在一列中输入值,在另一列中输入公式。2:以天为单位输入所有值。在另一个单元格中输入86400。复制另一个单元格。选择您的日期并粘贴特殊。在对话框中,选择
As values
Multiply
我简化了你的代码,以完成我编辑的文章想要做的事情。但是,当D列中的某个单元格中没有输入时,如何使其不显示数字?现在它的工作方式是,如果我在D1中键入“1”,它将更改为86400,这是正确的。但是,如果我删除D1的内容,它将显示0。我希望它是空白的?@ChrisF-我仍然不确定您是否希望以相同的方式处理键入的零和空白单元格(点击
Del
),但上面的修改可能会帮助您。
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Not Intersect(Target, Columns("D")) Is Nothing Then
        On Error GoTo Erreur
        Application.EnableEvents = False
        Dim d As Range
        For Each d In Intersect(Target, Columns("D"))
            If IsNumeric(d.Value) And d.Value > 0 Then
                ' Interested in a 8-hour day
                d.Value = d.Value * 3600 * 8
            Else
                d.Value = ""
            End If
        Next d
    End If
    GoTo Fìn
Erreur:
    Debug.Print Err
Fìn:
    Application.EnableEvents = True
End Sub