Excel VBA代码,用于在编辑行时更改单元格
我正在做一些数据验证工作,基本上,每当我修改数据中的一行时,我也需要在同一行的J列中写“是”。我认为这应该是自动化的,但我在代码方面遇到了一些问题 我希望它做的是检查C-H行中的更改,如果B列上有数字(0-99),则将同一行的J列上的文本替换为“是”(不带引号)。在这种情况下,“数字”部分可以缩写为长度为1-2(不是0,也不是更多) 到目前为止,我已经做到了这一点,但我似乎不知道如何将绝对引用和相对引用结合起来,即“检查活动行的B”或“更改活动行的J”(也就是说,根据VBA,我迄今为止尝试过的代码都不有效;我几乎没有VBA经验,所以我觉得这段代码不熟悉):Excel VBA代码,用于在编辑行时更改单元格,excel,vba,Excel,Vba,我正在做一些数据验证工作,基本上,每当我修改数据中的一行时,我也需要在同一行的J列中写“是”。我认为这应该是自动化的,但我在代码方面遇到了一些问题 我希望它做的是检查C-H行中的更改,如果B列上有数字(0-99),则将同一行的J列上的文本替换为“是”(不带引号)。在这种情况下,“数字”部分可以缩写为长度为1-2(不是0,也不是更多) 到目前为止,我已经做到了这一点,但我似乎不知道如何将绝对引用和相对引用结合起来,即“检查活动行的B”或“更改活动行的J”(也就是说,根据VBA,我迄今为止尝试过的代
您可以这样做:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, c As Range, v
'in our range of interest?
Set rng = Application.Intersect(Target, Me.Range("C:H"))
If Not rng Is Nothing Then
'get the corresponding cells in ColB
For Each c In Application.Intersect(rng.EntireRow, Me.Range("B:B")).Cells
v = c.Value
'flag required?
If Len(v) > 0 And Len(v) < 3 And IsNumeric(v) Then
c.EntireRow.Cells(1, "J").Value = "Yes"
End If
Next c
End If
End Sub
Private子工作表\u更改(ByVal目标作为范围)
变暗rng作为范围,c作为范围,v
“在我们感兴趣的范围内?
Set rng=Application.Intersect(目标,Me.Range(“C:H”))
如果不是,那么rng什么都不是
'在ColB中获取相应的单元格
对于Application.Intersect(rng.EntireRow,Me.Range(“B:B”))单元格中的每个c
v=c.值
“需要旗帜吗?
如果Len(v)>0且Len(v)<3且为数字(v),则
c、 EntireRow.Cells(1,“J”).Value=“是”
如果结束
下一个c
如果结束
端接头
你打败了我。很好的解决方案。我还在写一个Else
,想知道OP是否必须写“No”,如果不是True
。还有,你为什么喜欢使用EntireRow
而不是像这样的东西:单元格(c.Row,10)。Value=“Yes”
没有真正的原因我只是发现自己在键入EntireRow
。。。你是对的,那里可能也应该有一个“删除是”的测试。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, c As Range, v
'in our range of interest?
Set rng = Application.Intersect(Target, Me.Range("C:H"))
If Not rng Is Nothing Then
'get the corresponding cells in ColB
For Each c In Application.Intersect(rng.EntireRow, Me.Range("B:B")).Cells
v = c.Value
'flag required?
If Len(v) > 0 And Len(v) < 3 And IsNumeric(v) Then
c.EntireRow.Cells(1, "J").Value = "Yes"
End If
Next c
End If
End Sub