繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM