如何乘以一个常数,我在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