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 tottaAseta 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 toimintoaSub 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ä.