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ın

Set 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ın

 Alt 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.

Önceki Makale Sonraki Makale

En Ipuçları