如何乘以一个常数,我在excel单元格中input的值,结果出现在同一个单元格上?

我有一个Excel电子表格,我需要在一列中的单元格中input天数值,并自动将这些值转换为秒。 我怎样才能做到这一点?

例如,假设我想让列B中的值反映为秒。 所以在B1中我input1,按回车,现在B1中的值是86400; 在B2我input2,按Enter键,B2变成172800。

更清晰?

如果要自动将任何键入D列的数字转换为真实时间值的秒数,请右键单击工作表的名称选项卡,然后select“ View Code 。 当VBE打开时,将以下内容粘贴到名为Book1 – Sheet1(Code)的右侧窗格中。

 Private Sub Worksheet_Change(ByVal Target As Excel.Range) If Not Intersect(Target, Columns("A")) Is Nothing Then On Error GoTo Erreur Application.EnableEvents = False Dim a As Range, ms As Boolean For Each a In Intersect(Target, Columns("A")) If IsNumeric(a.Value) Then If a.Value <> 0 Then a.Offset(0, 1) = a.Value * 86400 Else a.Offset(0, 1).ClearContents End If End If Next a End If GoTo Fìn Erreur: Debug.Print Err Fìn: Application.EnableEvents = True End Sub 

点击Alt+Q返回到您的工作表,并将数字开始到D列。

我走了整数或双击键入单元格返回第一个小时,然后几分钟,最后秒。 我发现这是最好的方法来保留任何毫秒的精度在给定的Excel的浮点精度为15位数字的值。

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

没有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 

上述代码循环遍历Target范围内的每个元素(所有更改的单元格),并且只有在单元格在特定范围内时才使用前面提到的相同公式(将呼叫值乘以86400)更新它们。 上面提到的特定范围是第2列和第1行中的单元格。这是为了避免超出此范围的任何计算。 另外,由于每次更改都执行更改过程,所以可能会以recursion方式更新工作表。 为此,创build布尔redo来避免重新计算任何更改。

虽然使用VBA解决scheme非常棒,但是您将失去使用此更新的原始数据集,因此我build议您不要这样做。

最后,你可以使用一个特殊的粘贴方法,在这里你复制值86400(从表格的任何位置),然后select你感兴趣的范围更新和select性粘贴>操作>相乘:

在这里输入图像说明

我修改了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