[英]Copy VBA Auto increment cell in range
我有一个包含多列的excel工作表,其中一列引用了以前的引用(就像在MS-Project中一样),
我正在尝试使用以下功能获取每个引用的行号,这很好。
Public Function Splitter() As String
Dim multiRef() As String
Dim ws As Worksheet, rowNumber As Integer
Dim multiValue As String
Dim rowIndex As String, tempValue As String
Set ws = Worksheets("Sheet1")
rowNumber = ActiveCell.row
multiValue = ws.Range("T" & rowNumber).Value
multiRef = Split(multiValue, ";")
For i = 0 To UBound(multiRef)
If ((StrComp(Trim(multiRef(i)), "-") = 0) Or (StrComp(Trim(multiRef(i)), "Applicable") = 0) Or (StrComp(Trim(multiRef(i)), "") = 0) Or (StrComp(Trim(multiRef(i)), "TBD") = 0) Or (StrComp(Trim(multiRef(i)), "Y") = 0)) Then
Else:
tempValue = Application.WorksheetFunction.Match(Trim(multiRef(i)), ws.Range("E2:E1500"), 0)
If (Not IsNull(tempValue)) Then
rowIndex = rowIndex & tempValue & ", "
End If
End If
Next i
If (Len(rowIndex) <= 0) Then
Splitter_System = ""
Else: Splitter_System = Left(rowIndex, Len(rowIndex) - 2)
End If
结束功能
问题是,当我将相同的内容复制到以下单元格时,它只会复制相同的内容,除非手动编辑每一行,否则数据不会更新。
有没有更简单的方法来自动更新值?
ActiveCell引用不应在Function内部使用。 您可以引用输入范围,但需要将其作为函数输入变量,然后让函数返回处理后的输出。 例如:
Public Function Splitter(CellReference As Range) As String
Dim multiRef() As String
multiValue = CellReference.Value2
.
.
.
Splitter = tempValue
End Function
然后,您可以在单元格中将公式称为:
U5 =SPLITTER(T5)
当您复制下来时,它将相对于目标单元格改变输入单元格的引用,即U6 = SPLITTER(T6)
正如我注意到的那样,您还有一个进行Match
的硬编码范围,如果该范围也随数据集而变化,则也可以将该范围作为输入。
希望这可以帮助。 干杯,
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.