我正在评估一列单元格,例如A:A
,并且每次单元格中的值发生更改(不包括初始值)时,我希望能够将更改记录到另一列的适当单元格,例如B:B
。
以下是一对前后截图,展示了所需内容:
A2
已更新一次,因此B2
应显示1
计数,A6
已更新两次,因此B6
应显示{{} 1}}。
可以找到类似的解决方案here,但这仅适用于一个单元格:
2
单元格值未连接到不同的工作表,可以进行硬编码。
答案 0 :(得分:0)
在输入初始值后将其放在工作表代码中,或添加代码以检查这是否是初始值。
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A:A")) Is Nothing Then
Range("B" & Target.Row) = Range("B" & Target.Row) + 1
End If
End Sub
答案 1 :(得分:0)
在我看来,链接中的所有解决方案都没有特别好和足以修改,所以我会发布更好的解决方案。
此外,您的要求也不够完全,所以我已经补充了一些额外的。
<强>假设:强>
所有A:A
单元格值都为空。 (可以通过简单的修改来允许非空的初始值。)
导致相同值的单元格编辑仍被视为&#34;更改&#34;。这通常还包括单元格最初为空的位置,但我的代码明确排除了这种边缘情况。
&#34;首字母&#34;值是在之后的第一个&#34;更改&#34;到细胞。 (可以进行简单的修改,以允许初始值为&#34;空&#34;,如果这是实际要求。)
这是相对简单的代码:
'============================================================================================
' Module : <The appropriate sheet module>
' Version : 1.0
' Part : 1 of 1
' References : N/A
' Source : https://stackoverflow.com/a/47405528/1961728
'============================================================================================
Option Explicit
Private Sub Worksheet_Change _
( _
ByVal Target As Range _
)
Const s_CheckColumn As String = "A:A"
Const s_CountColumn As String = "B:B"
If Intersect(Target, Range(s_CheckColumn)) Is Nothing Then Exit Sub
Dim rngCell As Range
For Each rngCell In Intersect(Target, Range(s_CheckColumn))
With Range(s_CountColumn).Cells(rngCell.Row)
.Value2 = IIf(.Value2 <> vbNullString, .Value2 + 1, IIf(rngCell.Value2 <> vbNullString, 0, vbNullString))
End With
Next rngCell
End Sub
此解决方案正确允许同时编辑多个单元格,就像执行多单元格删除/粘贴或填充时一样。
备注:强>
最初&#34;更改&#34;计算结果为0
。如果您希望隐藏这些零,请为计数列设置#;;
的自定义数字格式。
可以修改代码以停止相同的值&#34;从计数编辑为&#34;更改&#34;。这样做的最简单方法之一是使用额外的列来存储旧值。
<强>注意事项:强>
撤消将无法正常运行。 可以进行纠正,但这样做并非易事。
需要在开始编辑后按ESC
才能取消编辑而不会触发更新。