=请问一个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中有现成函数可以实现这一功能,或类似功能,那就更好了,也请一并指点!多谢了~!
请问用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
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……
这个要在事件里写,靠函数不可能
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
……
这个要在事件里写,靠函数不可能
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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28