复制范围内的VBA自动增量单元格

我有一个多列的Excel表,一列有前面的参考(就像在MS项目),

我试图使用下面的函数获取每个引用的行号,这很好。

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 

结束function

问题是,当我复制相同的下面的单元格,它只是复制相同的内容,除非我手动编辑每一行数据不会更新。

有一个更简单的方法来自动更新值?

ActiveCell引用不应该在函数内部使用。 您可以参考input范围,但要求将其作为函数inputvariables,然后让函数返回处理后的输出。 例如:

 Public Function Splitter(CellReference As Range) As String Dim multiRef() As String multiValue = CellReference.Value2 . . . Splitter = tempValue End Function 

你可以在你的手机中调用你的公式:

 U5 =SPLITTER(T5) 

而当你复制它将改变相对于目标单元格的input单元格引用,即U6 = SPLITTER(T6)

正如我注意到你也有一个硬编码范围,你做一个Match ,你也可以有这个范围作为input,如果它也通过你的数据集不同。

希望这可以帮助。 干杯,