Изменить макрос, который работает, только если диапазон начинается с ячейки A1 или T1 и т. Д.

434
KAREN KENDALL

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

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

0

1 ответ на вопрос

0
Christofer Weber

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

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

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

Спасибо за совет. Я это попробую. KAREN KENDALL 5 лет назад 0
Привет! Я изменил код на Пока ActiveSheet.Cells (FoundPos, SearchRange.Column) .Offset (ColumnOffset: = NextCol) .Value <> "" и с ActiveSheet.Cells.Offset (ColumnOffset: = NextCol) я получаю ошибка 9 - индекс вне диапазона. Я добираюсь туда с помощью VBA, но определенно мог бы использовать некоторую помощь, если у вас есть время. KAREN KENDALL 5 лет назад 0
Я надеюсь, что вы имеете в виду `С ActiveSheet.Cells (FoundPos, SearchRange.Column) .Offset (ColumnOffset: = NextCol)` вам нужно указать ячейку. Christofer Weber 5 лет назад 0
Светлый момент, исправил «С», но теперь сообщение «Wend Without While» KAREN KENDALL 5 лет назад 0
Должно быть довольно ясно, где это пошло не так, хотя. С этим ничего не поделаешь, не видя, что ты сделал. Christofer Weber 5 лет назад 0
Я не уверен, где указать ячейку. KAREN KENDALL 5 лет назад 0
Я должен сказать, на какую конкретную ячейку вы ссылаетесь? KAREN KENDALL 5 лет назад 0
Я просто имею в виду, что вы не можете сказать `ActiveSheet.Cells.Offset (ColumnOffset: = NextCol)`, поскольку нам нужно сказать, какие ячейки, в данном случае `Cells (FoundPos, SearchRange.Column)` Christofer Weber 5 лет назад 0
Поэтому я добавил код: С помощью ActiveSheet.Cells (FoundPos, SearchRange.Column) .Offset (ColumnOffset: = NextCol) .Cells (FoundPos, SearchRange.Column) я пытаюсь понять, почему он говорит: «Wend без «? KAREN KENDALL 5 лет назад 0
Вы должны обновить свой вопрос, указав свой текущий код, чтобы я смог найти проблему. Но у вас либо «Wend» слишком много, либо «While» для немногих. Но если вы возьмете код из вопроса и просто измените `SearchRange (FoundPos)` в двух местах с помощью `ActiveSheet.Cells (FoundPos, SearchRange.Column)`, он должен работать нормально. У меня все равно работает. Christofer Weber 5 лет назад 0