2014-02-23 19 views
0

我有一个B列,它有许多行记录,默认情况下为空。现在我想,如果在任意整数到记录可以说对细胞B1有人按键,它应该作为计算Excel在密钥输入期间乘以另一列

integer value of cell * (-20) 

-20修改存储在可以说Z1。在B1,B12 ... Bn中键入的任何值都应按上述相同方式计算。我怎样才能做到这一点 ?

编辑

Excpected结果

enter image description here

+0

这是可能使用的事件。你有点熟悉宏观还是有点倾向于它?如果没有,那么我想不到没有vba的工作。 – L42

+0

我不熟悉,但我很想学习:) – abiieez

+0

然后尝试一下Arich发布的:)它应该做的伎俩。 – L42

回答

3

是,使用Change事件,但你需要采取一些东西进去:

  1. 如果用户粘贴几个值?
  2. 如果用户输入公式,该怎么办?
  3. 如果用户删除了一些数据会怎么样?

这个版本需要这些东西考虑

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim rng As Range 
    Dim cl As Range 

    Application.EnableEvents = False 
    Set rng = Intersect(Me.Columns(2), Target) 
    If Not rng Is Nothing Then 
     For Each cl In rng.Cells 
      If Not IsEmpty(cl) Then 
       If Not cl.HasFormula Then 
        cl.Value = cl.Value * Me.Range("Z1") 
       End If 
      End If 
     Next 
    End If 
    Application.EnableEvents = True 
End Sub 
+0

+1更强大的解决方案。 :) – ARich

+0

@chris neilsen虽然所有的场景似乎都被覆盖了,但我认为错误处理程序仍然很有价值,因为你正在开启和关闭事件:) – L42

+0

@ L42错误处理(几乎)总是可取的:)我不明白为什么将事件关闭会影响到这一点?我只想到另一个潜在的问题:用户输入非数字数据是什么? –

3

可以使用Change event这一点。粘贴到这一点,你想用这个在纸张的Sheet module

Private Sub Worksheet_Change(ByVal Target As Range) 

If Not Intersect(Target, Range("B:B")) Is Nothing Then 
    Target = Target.Value * Range("Z1") 
End If 

End Sub 

Intersect方法测试,以确保改变的单元格是B列。 Target是其值已更改的单元格。

+0

我对此很新,我在哪里打开Sheet模块? – abiieez

+0

请参阅我编辑的答案,了解有关模块的链接。使用'Alt' +'F11'打开VBEditor,然后在左侧的项目浏览器中找到工作表(如果不可见,则选择'Ctrl' +'R'),然后双击工作表名称将其打开。 – ARich

+0

+1用于提供步骤:) – abiieez