Excel / VBA - Memilih sel antara 2 kata kunci

  • Isu
  • Penyelesaian

Isu

Saya cuba menulis makro yang bermula dari sel aktif - naik lajur memilih 20 kata dan mencari kata carian "A" - memilihnya. Kemudian kembali ke lajur untuk perkataan carian berikutnya "B" (yang dalam kes ini adalah contoh pertama apa-apa dengan nilai $) dan memilih semua sel antara 2 kata carian dan memadam semua baris. Berikut adalah apa yang saya dapat setakat ini (bahagian pertama di mana ia mencari "N" hanya mendapatnya pada rekod yang betul yang ingin kita padamkan.

Contoh kod:

 Adakah Benar

Tetapkan Sel = Kolum (11). Cari (Apa: = "N", _

Selepas: = Sel (11, 11), _

LookIn: = xlFormulas, _

LookAt: = xlPart, _

SearchOrder: = xlByRows, _

SearchDirection: = xlNext, _

MatchCase: = False, _

SearchFormat: = False)

Jika Sel Adakah Tiada Apa-apa Kemudian Keluar

Sel.Pilih

ActiveCell.Select

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

Julat (Pemilihan, Seleksi.Offset (-20, 0)). Pilih

Tetapi kod tersebut tidak berfungsi dengan betul.

Penyelesaian

Anda perlu mencari di mana sel pertama adalah. dan kemudian anda perlu mencari lagi di mana sel kedua. Gunakan fungsi di bawah

 Sub MyOrigSubDefHere ()

Dim lFirstHit As Long

Dim lSecondHit As Long

Adakah Benar

lFirstHit = getItemLocation ("N", Lajur (11),, Palsu)

Jika (lFirstHit = 0) Kemudian Exit Do

lSecondHit = getItemLocation ("B", Range (Sel (lFirstHit + 1, 11), Sel (Rows.Count, 11)), Salah)

Jika (lSecondHit = 0) Kemudian Exit Do

Baris (lFirstHit & ":" & lSecondHit) .Delete

Loop

Sub Akhir

Fungsi Awas getItemLocation (sLookFor As String, _

rngSearch As Range, _

BFullString Pilihan Sebagai Boolean = Benar, _

Pilihan bLastOccurance Sebagai Boolean = Benar, _

BFindRow Pilihan Sebagai Boolean = Benar) Seperti Panjang

'cari barisan / lajur pertama / terakhir dalam rentang untuk rentetan tertentu

Dim Cell As Range

Dim iLookAt Sebagai Integer

Dim iSearchDir As Integer

Dim iSearchOdr As Integer

Jika (bFullString) _

Kemudian

iLookAt = xlWhole

Lain

iLookAt = xlPart

Akhir Jika

Jika (bLastOccurance) _

Kemudian

iSearchDir = xlPrevious

Lain

iSearchDir = xlNext

Akhir Jika

Jika Tidak (bFindRow) _

Kemudian

iSearchOdr = xlByColumns

Lain

iSearchOdr = xlByRows

Akhir Jika

Dengan rngSearch

Jika (bLastOccurance) _

Kemudian

Tetapkan Cell =. Cari (sLookFor, .Cells (1, 1), xlValues, iLookAt, iSearchOdr, iSearchDir)

Lain

Tetapkan Sel =. Cari (sLookFor, .Cells (.Rows.Count, .Columns.Count), xlValues, iLookAt, iSearchOdr, iSearchDir)

Akhir Jika

Akhir Dengan

Jika Sel Adakah Tiada Kemudian

getItemLocation = 0

ElseIf Not (bFindRow) _

Kemudian

getItemLocation = Cell.Column

Lain

getItemLocation = Cell.Row

Akhir Jika

Tetapkan Cell = Tiada apa-apa

Fungsi Akhir

Terima kasih kepada rizvisa1 untuk tip ini.

Artikel Sebelumnya Artikel Seterusnya

Tip-Tip Utama