更改仅当范围以 A1 或 T1 等单元格开头时才有效的宏

更改仅当范围以 A1 或 T1 等单元格开头时才有效的宏

我有一个可以工作的宏,但我想更改单元格范围

Set SearchRange = Range("E1:E12") to  
Set SearchRange = Range("A21:A32")

我已经对代码进行了更改,但运行时它不起作用,我不确定问题是什么。我在代码下面有一个解释。

Sub Part()
    Dim SearchRange As Range, _
        DashPair    As Variant, _
        PairParts   As Variant, _
        SearchVal   As Variant, _
        FoundPos    As Variant, _
        NextCol     As Long

    Set SearchRange = Range("A21:A32")
    For Each DashPair In Range("B17, F17, J17")
        Err.Clear
        NextCol = 1
        If DashPair.Value <> "" Then
            PairParts = Split(DashPair, "-")
            If PairParts(1) = "15" Then
                SearchVal = DashPair.Offset(RowOffset:=1).Value

                On Error Resume Next
                 Set FoundPos = SearchRange.Find(SearchVal, LookAt:=xlWhole)
                If Not FoundPos Is Nothing Then
                    FoundPos = FoundPos.Row
                    ' find first empty column right of E
                    While SearchRange(FoundPos).Offset(ColumnOffset:=NextCol).Value <> ""
                        NextCol = NextCol + 1
                    Wend

                    PairParts(1) = PairParts(1) + 1
                    PairParts = Join(PairParts, "-")

                    With SearchRange(FoundPos).Offset(ColumnOffset:=NextCol)
                        .NumberFormat = "@"
                        .Value = "" & PairParts & ""
                    End With

                    DashPair.Resize(ColumnSize:=3).ClearContents
                End If
            End If  '15 found
        End If
    Next DashPair
End Sub

具有预期结果的示例。

  • 请参阅我的 Excel 示例,宏当前仅在单元格 B17、F17 和 J17 中搜索 15(作为最后一个数字 20-15 等)。当它得到肯定结果时,它会引用其下方的单元格并使用该数字在单元格 A21:A32 中搜索匹配项,然后将复制和粘贴放在其右侧的相邻单元格中。

  • 例如:单元格 B30 中有 20-15,使用下面的单元格,B18 中有 1。1 是范围 A21:A32 中的搜索数字。在 A21:A32 范围内找到后,将 20-15 放在右侧相邻的单元格 (B21) 中,并将最后一个数字增加 1,使其变为 20-16。

  • 对所有单元格执行相同操作:B17、F17 和 J17。

  • 写入后将删除单元格 B17/C17/D17 中的所有内容。我的 Excel 表中有两个示例需要发生同样的事情。

excel 表

答案1

您的代码存在问题SearchRange(FoundPos)。仅当范围从第 1 行开始时,此方法才在此应用程序中有效SearchRange

通过将范围更改为A21:A32,您的 FindPos 变量将21用于第一种情况。
这将SearchRange(FoundPos)返回范围的第 21 行,即A41

有很多方法可以解决这个问题,但是为了在代码中做最小的更改,你可以尝试SearchRange(FoundPos)用替换ActiveSheet.Cells(FoundPos, SearchRange.Column)

相关内容