Excel / VBA - Изберете клетки между 2 ключови думи
- Проблем
- Решение
Проблем
Опитвам се да напиша макрос, който започва от активната клетка - отива нагоре по колоната и избира 20 клетки и търси дума за търсене "А" - избира я. След това се обръща назад към колоната за следващата дума за търсене "B" (която в този случай е първата инстанция на нещо с стойност $) и избира всички клетки между двете думи за търсене и изтрива всички редове. Ето какво имам досега (първата част, в която се търси „N“, просто я поставя в правилния запис, който искаме да изтрием.Пример за код:
Докато е вярноЗадаване на клетка = Колони (11) .Find (Какво: = "N", _
След: = клетки (11, 11), _
LookIn: = xlFormulas, _
LookAt: = xlPart, _
SearchOrder: = xlByRows, _
Направление за търсене: = xlNext, _
MatchCase: = False, _
SearchFormat: = False)
Ако клетката не е нищо, тогава излезте
Cell.Select
ActiveCell.Select
ActiveCell.EntireRow.Range ( "A1"). Изберете
Обхват (Избор, Избор.Отклонение (-20, 0))
Но кодът не работи правилно.
Решение
Трябва да разберете къде е първата клетка. и след това трябва отново да намерите къде е втората клетка. Използвайте функцията по-долуПод MyOrigSubDefHere ()Dim lFirstHit As Long
Dim lSecondHit As Long
Докато е вярно
lFirstHit = getItemLocation ("N", колони (11),, False)
Ако (lFirstHit = 0) тогава Exit Do
lSecondHit = getItemLocation ("B", Обхват (клетки (lFirstHit + 1, 11), клетки (Rows.Count, 11)),, False)
Ако (lSecondHit = 0) тогава Exit Do
Редове (lFirstHit & ":" & lSecondHit) .Изтриване
контур
Край Под
Публична функция getItemLocation (sLookFor As String, _
rngSearch As Range, _
Незадължително bFullString As Boolean = True, _
Незадължително bLastOccurance As Boolean = True, _
Незадължително bFindRow Като булева = True) Долу
'намерете първия / последния ред / колона в диапазона за определен низ
Тънка област като обхват
Dim iLookAt As Integer
Dim iSearchDir As Integer
Dim iSearchOdr As Integer
Ако (bFullString) _
Тогава
iLookAt = xlWhole
още
iLookAt = xlPart
Край Ако
Ако (bLastOccurance) _
Тогава
iSearchDir = xlPпреди
още
iSearchDir = xlNext
Край Ако
Ако не е (bFindRow) _
Тогава
iSearchOdr = xlByColumns
още
iSearchOdr = xlByRows
Край Ако
С rngSearch
Ако (bLastOccurance) _
Тогава
Задаване на клетка = .Find (sLookFor, .Cells (1, 1), xlValues, iLookAt, iSearchOdr, iSearchDir)
още
Задаване на клетка = .Find (sLookFor, .Cells (.Rows.Count, .Columns.Count), xlValues, iLookAt, iSearchOdr, iSearchDir)
Край Ако
Край с
Ако тогава клетката е нищо
getItemLocation = 0
ElseIf Not (bFindRow) _
Тогава
getItemLocation = Cell.Column
още
getItemLocation = Cell.Row
Край Ако
Задаване на клетка = нищо
Крайна функция
Благодарение на rizvisa1 за този съвет.