我有以下电子表格。每当单元格B中有x时,我需要使用我拥有的方程式填充同一行中的d和e单元格。 如果b单元格中没有x,我需要在d&e单元格中手动输入值。
如何使我的代码不特定行?
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim val As String
val = Range("B3").Value
If val = "x" Then
Range("E3").Value = Range("d2").Value * Range("G2").Value
Range("D3").Value = Range("D2").Value
End If
End Sub
答案 0 :(得分:0)
我不确定我是否理解正确,但是如果您有一个参数:row = 3,则可以使用Range(“ E”&row)代替Range(“ E3”)。
在要修改的行的“行”变化周围放置一个循环。
希望有帮助!
答案 1 :(得分:0)
您已经围绕Worksheet_SelectionChange事件创建了一个子过程。实际上,您需要Worksheet_Change并且需要,
重写:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B:B")) Is Nothing Then
On Error GoTo safe_exit
Application.EnableEvents = False
Dim t As Range
For Each t In Intersect(Target, Range("B:B"))
If LCase(t.Value) = "x" Then
'I've made these formulas relative to each target
'you may want to make some absolute references
t.Offset(0, 3) = t.Offset(-1, 2) * t.Offset(-1, 5)
t.Offset(0, 2) = t.Offset(-1, 2)
Else
t.Offset(0, 2).resize(1, 2) = vbnullstring
End If
Next t
End If
safe_exit:
Application.EnableEvents = True
End Sub
答案 2 :(得分:0)
请尝试以下代码。 它遍历B列中的所有非空行,并检查是否存在值:x 如果是这样,它将填充您的公式。
Sub new_sub()
' get last_row of data
last_row = ActiveSheet.UsedRange.Rows.Count
' loop through all rows with data and check if in column B any cell contains value: x
For i = 1 To last_row
' if there is any cell with value: x
' then add below formulas
If Cells(i, 2).Value = "x" Then
' for column E: take value from row above for col D and G and multiple
Range("E" & i).Value = Range("d" & i - 1).Value * Range("G" & i - 1).Value
' for column D: take value from row above
Range("D" & i).Value = Range("D" & i - 1).Value
End If
Next i
End Sub