Excel VBA代码,用于在编辑行时更改单元格

Excel VBA代码,用于在编辑行时更改单元格,excel,vba,Excel,Vba,我正在做一些数据验证工作,基本上,每当我修改数据中的一行时,我也需要在同一行的J列中写“是”。我认为这应该是自动化的,但我在代码方面遇到了一些问题 我希望它做的是检查C-H行中的更改,如果B列上有数字(0-99),则将同一行的J列上的文本替换为“是”(不带引号)。在这种情况下,“数字”部分可以缩写为长度为1-2(不是0,也不是更多) 到目前为止,我已经做到了这一点,但我似乎不知道如何将绝对引用和相对引用结合起来,即“检查活动行的B”或“更改活动行的J”(也就是说,根据VBA,我迄今为止尝试过的代

我正在做一些数据验证工作,基本上,每当我修改数据中的一行时,我也需要在同一行的J列中写“是”。我认为这应该是自动化的,但我在代码方面遇到了一些问题

我希望它做的是检查C-H行中的更改,如果B列上有数字(0-99),则将同一行的J列上的文本替换为“是”(不带引号)。在这种情况下,“数字”部分可以缩写为长度为1-2(不是0,也不是更多)

到目前为止,我已经做到了这一点,但我似乎不知道如何将绝对引用和相对引用结合起来,即“检查活动行的B”或“更改活动行的J”(也就是说,根据VBA,我迄今为止尝试过的代码都不有效;我几乎没有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