Excel / VBA - Valitse solut kahden avainsanan välillä

  • Ongelma
  • Ratkaisu

Ongelma

Yritän kirjoittaa makron, joka alkaa aktiivisesta solusta - nousee sarakkeeseen valitsemalla sanoa 20 solua ja etsii hakusanaa "A" - valitsee sen. Sitten näyttää taaksepäin seuraavan hakusanan "B" sarakkeen (joka tässä tapauksessa on mikä tahansa, jossa on $ -arvo) ja valitsee kaikki solut kahden hakusanan välillä ja poistaa kaikki rivit. Tässä on se, mitä minulla on tähän mennessä (ensimmäinen osa, jossa se etsii "N", on vain saada se oikeaan tietueeseen, jonka haluamme poistaa.

Koodin esimerkki:

 Tee vaikka totta

Aseta solu = sarakkeet (11) .Saat (Mitä: = "N", _

Jälkeen: = solut (11, 11), _

LookIn: = xlFormulas, _

LookAt: = xlPart, _

SearchOrder: = xlByRows, _

SearchDirection: = xlNext, _

MatchCase: = False, _

SearchFormat: = false)

Jos solu ei ole mitään, poistu käytöstä

Cell.Select

ActiveCell.Select

ActiveCell.EntireRow.Range ( "A1"). Select

Alue (valinta, valinta.Offset (-20, 0))

Koodi ei kuitenkaan toimi kunnolla.

Ratkaisu

Sinun pitäisi selvittää, missä ensimmäinen solu on. ja sitten sinun täytyy löytää uudelleen, missä toinen solu on. Käytä alla olevaa toimintoa

 Sub MyOrigSubDefHere ()

Dim lFirstHit niin kauan

Dim lSecondHit niin pitkä

Tee vaikka totta

lFirstHit = getItemLocation ("N", sarakkeet (11),, False)

Jos (lFirstHit = 0) sitten Exit Do

lSecondHit = getItemLocation ("B", alue (solut (lFirstHit + 1, 11), solut (rivit.Count, 11)),, False)

Jos (lSecondHit = 0) sitten Exit Do

Rivit (lFirstHit & ":" & lSecondHit). Poista

silmukka

Lopeta Sub

Julkisen toiminnan getItemLocation (sLookFor-merkkijono, _

rng Etsi alueena, _

Valinnainen bFullString kuten Boolean = True, _

Valinnainen bLastOccurance As Boolean = True, _

Valinnainen bFindRow kuten Boolean = True)

'etsi ensimmäinen / viimeinen rivi / sarake tietyn merkkijonon alueella

Dim Cell As Range

Dim iLookAt as Integer

Dim iSearchDir As Integer

Dim iSearchOdr as Integer

Jos (bFullString) _

Sitten

iLookAt = xlWhole

muu

iLookAt = xlPart

Loppu Jos

Jos (bLastOccurance) _

Sitten

iSearchDir = xlPrevious

muu

iSearchDir = xlNext

Loppu Jos

Jos ei (bFindRow) _

Sitten

iSearchOdr = xlByColumns

muu

iSearchOdr = xlByRows

Loppu Jos

Kanssa rngSearch

Jos (bLastOccurance) _

Sitten

Aseta solu = .Saat (sLookFor, .Kellot (1, 1), xlValues, iLookAt, iSearchOdr, iSearchDir)

muu

Aseta solu = .Saat (sLookFor, .Cells (.Rows.Count, .Columns.Count), xlValues, iLookAt, iSearchOdr, iSearchDir)

Loppu Jos

Lopeta

Jos solu ei ole mitään

getItemLocation = 0

ElseI Not Not (bFindRow) _

Sitten

getItemLocation = Cell.Column

muu

getItemLocation = Cell.Row

Loppu Jos

Aseta solu = ei mitään

Lopeta toiminto

Kiitos rizvisa1: stä tästä vinkistä.

Edellinen Artikkeli Seuraava Artikkeli

Top Vinkkejä