У меня есть макрос, который работает, но я хотел бы изменить диапазон ячеек с

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, макрос ищет 15 (как последнее число 20-15 и т.д.) Только в ячейках B17, F17 и J17 в настоящее время. Когда он дает положительный результат, он ссылается на ячейку под ним и использует это число для поиска совпадений в ячейках 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 ответ1

0

Проблема с вашим кодом лежит в SearchRange(FoundPos) . Это работает только в этом приложении, если диапазон SearchRange начинается в строке 1.

Изменяя диапазон на A21:A32 , ваша переменная FindPos будет 21 для первого случая.
В результате SearchRange(FoundPos) возвращает 21- ую строку вашего диапазона, а именно A41 .

Множество способов это исправить, но чтобы внести минимальные изменения в код, вы можете попробовать заменить SearchRange(FoundPos) на ActiveSheet.Cells(FoundPos, SearchRange.Column) .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .