범위가 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 범위에서 찾으면 오른쪽에 인접한 셀(B21)에 20-15를 배치하고 마지막 숫자를 1씩 늘려 20-16이 됩니다.

  • B17, F17 및 J17의 모든 셀에 대해 동일한 작업을 수행합니다.

  • 쓰기 후에는 B17/C17/D17 셀의 모든 내용이 삭제됩니다. 내 Excel 시트에는 동일한 일이 발생해야 하는 두 가지 예가 있습니다.

엑셀 시트

답변1

코드의 문제는 SearchRange(FoundPos). 이는 SearchRange범위가 행 1에서 시작하는 경우에만 이 애플리케이션에서 작동합니다 .

범위를 로 변경하면 A21:A32FindPos 변수가 21첫 번째 경우에 사용됩니다.
결과적으로 SearchRange(FoundPos)범위의 21번째 행, 즉 A41.

이 문제를 해결하는 방법은 많지만 코드를 최소한으로 변경 SearchRange(FoundPos)하려면 ActiveSheet.Cells(FoundPos, SearchRange.Column).

관련 정보