+ -
当前位置:首页 → 问答吧 → =请问一个VBA中 单元格数据变化 所涉及的问题=

=请问一个VBA中 单元格数据变化 所涉及的问题=

时间:2011-10-17

来源:互联网

大家好!

请问用VBA如何编写一函数FuncX()以实现下面这个功能:

A1中有一初始数值(此初始数值是个股票的价格,由另外一个API接口程序读入,所以在不断地变化)

我欲实现的功能是:在A2中输入=FuncX(A1),返回值默认为False。
此时,若A1中数值突然减少,则A2的返回值立即变为True;
  若A1中数值突然增加,则A2的返回值立即变为False;
  若A1中数值保持不变(大部分时候的情况),则A2的返回值不变(原来是False就还是False,原来是True就还是True);


欲实现功能就是如上所述,当然要是EXCEL中有现成函数可以实现这一功能,或类似功能,那就更好了,也请一并指点!多谢了~!

作者: xuzhe1111   发布时间: 2011-10-17

这个要在事件里写,靠函数不可能

VB code

Private sngOld As Single

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim sngNew As Single
    
    If Target.Row = 1 And Target.Column = 1 Then
        sngNew = Cells(1, 1)
        If sngNew > sngOld Then
            Cells(1, 2) = "false"
        ElseIf sngNew < sngOld Then
            Cells(1, 2) = "true"
        End If
        sngOld = sngNew
    End If
    
End Sub

作者: jhone99   发布时间: 2011-10-17

引用 1 楼 jhone99 的回复:

这个要在事件里写,靠函数不可能

VB code

Private sngOld As Single

Private Sub Worksheet_Change(ByVal Target As Range)
Dim sngNew As Single

If Target.Row = 1 And Target.Column = 1 Then
sngNe……



多谢指教!我刚才试了一下,确实没问题~不过还有一个小地方和我想的不太一样:

  用您提供的代码,我如果手动更改A1的值,那么A2的值会跟随”增加“或”减少“;
  而改变但若A1的值为其它单元格值的函数,如在A1格中输入=2*A5,那么当手动控制A5改变时,A1随之改变,但A2值却不改变,请问这个怎么解决?多谢!

作者: xuzhe1111   发布时间: 2011-10-17

VB code

Private sngOld As Single

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim sngNew As Single
    
    If (Target.Row = 1 And Target.Column = 1) Or (Target.Row = 5 And Target.Column = 1) Then'根据你要改变的单元格修改这里
        sngNew = Cells(1, 1).Value
        If sngNew > sngOld Then
            Cells(1, 2) = "false"
        ElseIf sngNew < sngOld Then
            Cells(1, 2) = "true"
        End If
        sngOld = sngNew
    End If
    
End Sub

作者: jhone99   发布时间: 2011-10-17

VB code

Private sngOld As Single

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim sngNew As Single
    
    'If (Target.Row = 1 And Target.Column = 1) Or (Target.Row = 5 And Target.Column = 1) Then'也可以不要这个判断,但是这样计算太多次了,影响效率
        sngNew = Cells(1, 1).Value
        If sngNew > sngOld Then
            Cells(1, 2) = "false"
        ElseIf sngNew < sngOld Then
            Cells(1, 2) = "true"
        End If
        sngOld = sngNew
    'End If
    
End Sub

作者: jhone99   发布时间: 2011-10-17

引用 1 楼 jhone99 的回复:
这个要在事件里写,靠函数不可能


VB code

Private sngOld As Single

Private Sub Worksheet_Change(ByVal Target As Range)
Dim sngNew As Single

If Target.Row = 1 And Target.Column = 1 Then
……

作者: Veron_04   发布时间: 2011-10-17