
작동하는 매크로가 있는데 셀 범위를 다음에서 변경하고 싶습니다.
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 범위에서 찾으면 오른쪽에 인접한 셀(B21)에 20-15를 배치하고 마지막 숫자를 1씩 늘려 20-16이 됩니다.
B17, F17 및 J17의 모든 셀에 대해 동일한 작업을 수행합니다.
쓰기 후에는 B17/C17/D17 셀의 모든 내용이 삭제됩니다. 내 Excel 시트에는 동일한 일이 발생해야 하는 두 가지 예가 있습니다.
답변1
코드의 문제는 SearchRange(FoundPos)
. 이는 SearchRange
범위가 행 1에서 시작하는 경우에만 이 애플리케이션에서 작동합니다 .
범위를 로 변경하면 A21:A32
FindPos 변수가 21
첫 번째 경우에 사용됩니다.
결과적으로 SearchRange(FoundPos)
범위의 21번째 행, 즉 A41
.
이 문제를 해결하는 방법은 많지만 코드를 최소한으로 변경 SearchRange(FoundPos)
하려면 ActiveSheet.Cells(FoundPos, SearchRange.Column)
.