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 за този съвет.

Предишна Статия Следваща Статия

Топ Съвети