Excel / VBA - Válasszon cellákat 2 kulcsszó között

  • Probléma
  • Megoldás

Probléma

Megpróbálok írni egy olyan makrót, amely az aktív cellából indul ki - felemelkedik az oszlopban a 20 mondat kiválasztásával, és az "A" keresési szót keres - kiválasztja azt. Ezután a következő keresőszó "B" oszlopát tekint vissza (amely ebben az esetben a $ értékkel rendelkező bármelyik első példánya), és kiválasztja az összes cellát a 2 keresőszó között, és törli az összes sort. Itt van, amit eddig találtam (az első rész, ahol "N" -et keres, csak azt a helyes rekordot kapja, amelyet törölni akarunk.

Kódpélda:

 Csinálj igazat

Cell = oszlopok (11) beállítása. (Mi: = "N", _

Után: = Cellák (11, 11), _

LookIn: = xlFormulas, _

LookAt: = xlPart, _

SearchOrder: = xlByRows, _

SearchDirection: = xlNext, _

MatchCase: = Hamis, _

SearchFormat: = False)

Ha a cella nem lesz, akkor kilép

Cell.Select

ActiveCell.Select

ActiveCell.EntireRow.Range ( "A1"). Jelölje

Tartomány (Kiválasztás, Kiválasztás.Offset (-20, 0))

De a kód nem működik megfelelően.

Megoldás

Meg kell találnod, hol van az első cella. és akkor újra meg kell találnod, hol van a második cella. Használja az alábbi funkciót

 Sub MyOrigSubDefHere ()

Dim lFirstHit olyan hosszú

Dim lSecondHit olyan hosszú

Csinálj igazat

lFirstHit = getItemLocation ("N", oszlopok (11),, Hamis)

Ha (lFirstHit = 0), akkor kilép

lSecondHit = getItemLocation ("B", tartomány (cellák (lFirstHit + 1, 11), cellák (sorok.számla, 11)),, Hamis)

Ha (lSecondHit = 0), akkor kilép

Sorok (lFirstHit & ":" & lSecondHit)

Hurok

Vége vége

Nyilvános funkció getItemLocation (sLookFor mint String, _

rngKeresés mint tartomány

Választható bFullString mint Boolean = True, _

Választható bLastOccurance As Boolean = True, _

Választható bFindRow mint Boolean = True) Hosszú

'keresse meg az első / utolsó sort / oszlopot egy adott string tartományban

Dim Cell As Range

Dim iLookAt As Integer

Dim iSearchDir As Integer

Dim iSearchOdr As Integer

Ha (bFullString) _

Azután

iLookAt = xlWhole

Más

iLookAt = xlPart

Vége Ha

Ha (bLastOccurance) _

Azután

iSearchDir = xlPrevious

Más

iSearchDir = xlNext

Vége Ha

Ha nem (bFindRow) _

Azután

iSearchOdr = xlByColumns

Más

iSearchOdr = xlByRows

Vége Ha

Az rngSearch segítségével

Ha (bLastOccurance) _

Azután

Set Cell = .Keresés (sLookFor, .Cells (1, 1), xlValues, iLookAt, iSearchOdr, iSearchDir)

Más

Állítsa be a Cell = .ind. (SLookFor, .Cells (.Rows.Count, .Columns.Count), xlValues, iLookAt, iSearchOdr, iSearchDir)

Vége Ha

Vége

Ha a sejt semmi sem történik

getItemLocation = 0

ElseIf Not (bFindRow) _

Azután

getItemLocation = Cell.Column

Más

getItemLocation = Cell.Row

Vége Ha

Set Cell = Semmi

Végfunkció

Ennek köszönhetően a rizvisa1.

Előző Cikk Következő Cikk

Top Tippek