
我有一個可以運行的宏,但我想更改單元格範圍
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)
.