Excel / VBA - 2 anahtar kelime arasından hücreleri seçin
- Konu
- Çözüm
Konu
Aktif hücreden başlayan bir makro yazmaya çalışıyorum - 20 hücreyi seçerek sütuna kadar gider ve "A" kelimesini arar - onu seçer. Ardından bir sonraki "B" arama sözcüğünü (bu durumda $ değerine sahip herhangi bir şeyin ilk örneğidir) sütununa bakar ve 2 arama sözcüğü arasındaki tüm hücreleri seçer ve tüm satırları siler. İşte şimdiye kadar elde ettiklerim ("N" yi aradığı ilk kısım sadece silmek istediğimiz doğru kayıtlara ulaşmak.Kod örneği:
Gerçek iken yapınSet Cell = Sütunlar (11) .Find (Ne: = "N", _
Sonra: = Hücreler (11, 11), _
LookIn: = xlFormulas, _
LookAt: = xlPart, _
SearchOrder: = xlByRows, _
SearchDirection: = xlNext, _
MatchCase: = Yanlış, _
SearchFormat:) Yanlış =
Hücre Hiçbir Şey Değilse Çıkış Yapın
Cell.Select
ActiveCell.Select
ActiveCell.EntireRow.Range ( "A1"). Seçiniz
Aralık (Seçim, Seçim. Ofset (-20, 0)).
Ancak kod düzgün çalışmıyor.
Çözüm
İlk hücrenin nerede olduğunu bulman gerekecek. ve sonra ikinci hücrenin nerede olduğunu tekrar bulman gerekiyor. Aşağıdaki işlevi kullanınAlt MyOrigSubDefHere ()DimFirstHit kadar uzun
DimSecondHit Uzun Süreli
Gerçek iken yapın
lFirstHit = getItemLocation ("N", Sütunlar (11), Yanlış)
Eğer (lFirstHit = 0) O zaman Çıkın
lSecondHit = getItemLocation ("B", Aralık (Hücreler (lFirstHit + 1, 11), Hücreler (Rows.Count, 11)), Yanlış)
Eğer (lSecondHit = 0) O zaman Çıkın
Satırlar (lFirstHit & ":" & lSecondHit) .Delete
döngü
Son Alt
Genel İşlev getItemLocation (Dizgi için sLookFor, _
rngSearch Aralık Olarak, _
İsteğe bağlı bFullString As Boolean = Doğru, _
İsteğe bağlı bLastOccurance As Boolean = Doğru, _
İsteğe bağlı bFindRow Boolean = Doğru) Uzun
'belirli bir dize için bir aralıktaki ilk / son satırı / sütunu bulun
Menzil Olarak Dim Hücresi
Dim iLookAt Tamsayı Olarak
Tamsayı Olarak Dim iSearchDir
Dim iSearchOdr Tamsayı Olarak
Eğer (bFullString) _
Sonra
iLookAt = xlWhole
Başka
iLookAt = xlPart
Bittiğinde
Eğer (bLastOccurance) _
Sonra
iSearchDir = xlPrevious
Başka
iSearchDir = xlNext
Bittiğinde
Değilse (bFindRow) _
Sonra
iSearchOdr = xlByColumns
Başka
iSearchOdr = xlByRows
Bittiğinde
RngSearch ile
Eğer (bLastOccurance) _
Sonra
Set Cell = .Find (sLookFor, .Cells (1, 1), xlValues, iLookAt, iSearchOdr, iSearchDir)
Başka
Set Cell = .Find (sLookFor, .Cells (.Rows.Count, .Columns.Count), xlValues, iLookAt, iSearchOdr, iSearchDir)
Bittiğinde
İle bitmek
Hücre Hiçbir Şey O zaman
getItemLocation = 0
Aksi takdirde (bFindRow) _
Sonra
getItemLocation = Cell.Column
Başka
getItemLocation = Cell.Row
Bittiğinde
Set Cell = Hiçbir şey
Son İşlev
Bu ipucu için rizvisa1'e teşekkür ederiz.