c*d 发帖数: 53 | 1 worksheet里有一个cloumn的数据(text, number都有),大概一百个左右,
有什么办法可以实时监测到它们任何一个/多个cell的变化?比如column number是A
的话,A4从0.5变成0.9,A50从aaa变成aa或bbb?
现在想到的办法是用concatenate function,先把当前的所有数据的值存一个
copy在别的地方,然后和concatenate的结果比较。但是这样的话,这个值因为
是将近一百个cell的合集,可能会太大。不知道有没有更好的办法实现这样的监测
呢?多谢了 | G*****u 发帖数: 1222 | 2 你google下Worksheet_Change Event
你在对应的sheet上加入一个worksheet_change的macro 把变动的值输入到另外一个
sheet上 | G*****u 发帖数: 1222 | 3 Sub inputvalue()
Sheets("Sheet2").Cells(ActiveCell.Row - 1, ActiveCell.Column) = ActiveCell.
Offset(-1, 0).Value
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Call inputvalue
End Sub
帮你写了两个macro
假定你data在sheet1上
第一个macro可以把变动的数据传送到sheet2同样位置的cell中
第二个macro在数值变动的时候call第一个macro
你看看是不是你需要的东西
好运 | a********t 发帖数: 1810 | 4 应该不是,他问的不是很清楚,不知道他想干啥,问问题前,最好把想问的整理一下,表达
明白 | c*d 发帖数: 53 | 5 没想到那么kuai就有回复,先多谢了
正在查有关change event的,不过感觉这个功能是不是对下面那种情况没法正确识别:
就是如果任何cell的值先是改变,然后有变回来,比如A4原先是0.5,被改成0.9,后
有改回0.5,这种情况我是希望被认为没有变化的。如果用change event的话,也可以
做到吗?再次多谢。 | c*d 发帖数: 53 | 6 多谢gaminyu的热情帮忙,同时接受accountant的批评,我自己也觉得
描述的太不清楚问的太乱了,关键是从小语文就差。
是这样,在用excel做一个模型,模型的其中一个worksheet上是用户的
输入,一共30个columns,每个column有将近100个输入,有数字的,有
text的,想在每个column上加一个indicator,如果本column任何一个
cell的值有变化,就提醒用户,需要重新计算(计算部分是靠button激活
macro另外进行的)。现在我用的方法是,在每个column下加了公式,
比如column C, 就是C110=concatenate(C1,C2,C3,...C100),然后用
macro先把公式的值给拷贝到另一个cell(例如C111),然后indicator
用公式if(C110=C111,"Y","N")来实现实时监测
这个方法现在的潜在问题是,最后这个C110和C111的字符串可能会太长,
而且因为有30个这样的column,所以会有30个这样的字符串。excel做的这个
模型本身就已经很大了,不希望size再增大太多,所以想请教一下有没有更
好的办法实现这个需要的功能? | G*****u 发帖数: 1222 | 7
你vba用的多吗?
在worksheet_change这个macro中你只需要插入一个if statement
如果change的cell是你的target 就改变C110成y 不然的话就保持在n
【在 c*d 的大作中提到】 : 多谢gaminyu的热情帮忙,同时接受accountant的批评,我自己也觉得 : 描述的太不清楚问的太乱了,关键是从小语文就差。 : 是这样,在用excel做一个模型,模型的其中一个worksheet上是用户的 : 输入,一共30个columns,每个column有将近100个输入,有数字的,有 : text的,想在每个column上加一个indicator,如果本column任何一个 : cell的值有变化,就提醒用户,需要重新计算(计算部分是靠button激活 : macro另外进行的)。现在我用的方法是,在每个column下加了公式, : 比如column C, 就是C110=concatenate(C1,C2,C3,...C100),然后用 : macro先把公式的值给拷贝到另一个cell(例如C111),然后indicator : 用公式if(C110=C111,"Y","N")来实现实时监测
| c*d 发帖数: 53 | 8 vba刚开始用不久。
在试着理解这两段macro,有几个问题:
第一个就是把sheet1的值存到sheet2上,为什么不能直接存而
是要offset -1呢?
第儿个是在sheet1上cell值有变动的时候启动第一个macro,
那怎么能让他知道哪些cells变动的时候需要激活这个macro呢?
(我的情况是那100个cells里任何一个或多个有变化都需要,除了
那100个之外的cells有变化都不要)。另外变化是真正的变化,
比如C10从1变成2,如果C10先从1变成2,然后又从2变成1,这种
情况不希望indicator/flag显示参数变了,应该是没变才对,
用worksheet_change event可以实现吗?
ActiveCell.
【在 G*****u 的大作中提到】 : Sub inputvalue() : Sheets("Sheet2").Cells(ActiveCell.Row - 1, ActiveCell.Column) = ActiveCell. : Offset(-1, 0).Value : End Sub : Private Sub Worksheet_Change(ByVal Target As Range) : Call inputvalue : End Sub : 帮你写了两个macro : 假定你data在sheet1上 : 第一个macro可以把变动的数据传送到sheet2同样位置的cell中
|
| y*******5 发帖数: 5023 | 9 Not sure if this is what you want.
1. Insert a new column, paste original value
2. Insert another column, for first row, add formula: if(b1=a1,"n","y"), copy
formula to whole column
3. Anywhere on the sheet, add formula: if(isna(vlookup("y",$c:$c,1,false)),"
no change","change")
4. If there is change, you can find it using vlookup on "y" |
|