我有一个可以工作的宏,但我想更改单元格范围
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 表中有两个示例需要发生同样的事情。
答案1
您的代码存在问题SearchRange(FoundPos)
。仅当范围从第 1 行开始时,此方法才在此应用程序中有效SearchRange
。
通过将范围更改为A21:A32
,您的 FindPos 变量将21
用于第一种情况。
这将SearchRange(FoundPos)
返回范围的第 21 行,即A41
。
有很多方法可以解决这个问题,但是为了在代码中做最小的更改,你可以尝试SearchRange(FoundPos)
用替换ActiveSheet.Cells(FoundPos, SearchRange.Column)
。