Excel / VBA - เลือกเซลล์ระหว่าง 2 คำค้นหา

  • ปัญหา
  • สารละลาย

ปัญหา

ฉันกำลังพยายามเขียนแมโครที่เริ่มต้นจากเซลล์ที่ใช้งานอยู่ - ขึ้นไปบนคอลัมน์เลือกพูด 20 เซลล์และค้นหาคำค้นหา "A" - เลือกมัน จากนั้นมองย้อนกลับไปที่คอลัมน์สำหรับคำค้นหาถัดไป "B" (ซึ่งในกรณีนี้เป็นตัวอย่างแรกของสิ่งที่มีค่า $) และเลือกเซลล์ทั้งหมดระหว่างคำค้นหา 2 คำและลบแถวทั้งหมด นี่คือสิ่งที่ฉันได้รับมาจนถึงตอนนี้ (ส่วนแรกที่ค้นหา "N" คือการไปยังระเบียนที่ถูกต้องที่เราต้องการลบ

ตัวอย่างรหัส:

 ทำในขณะที่เป็นจริง

ตั้งค่าเซลล์ = คอลัมน์ (11) ค้นหา (อะไร: = "N", _

หลังจาก: = เซลล์ (11, 11), _

LookIn: = xlFormulas, _

LookAt: = xlPart, _

SearchOrder: = xlByRows, _

SearchDirection: = xlNext, _

MatchCase: = False, _

SearchFormat: = false)

ถ้าเซลล์ไม่มีอะไรแล้วออกทำ

Cell.Select

ActiveCell.Select

ActiveCell.EntireRow.Range ( "A1"). เลือก

ช่วง (การเลือก, การเลือก, ออฟเซ็ต (-20, 0)) เลือก

แต่รหัสทำงานไม่ถูกต้อง

สารละลาย

คุณจะต้องค้นหาว่าเซลล์แรกอยู่ที่ไหน แล้วคุณต้องค้นหาอีกครั้งว่าเซลล์ที่สองอยู่ที่ไหน ใช้ฟังก์ชั่นด้านล่าง

 Sub MyOrigSubDefHere ()

ติ่ม l ก่อนอื่นจงใช้เวลานาน

ติ่ม l วินาทีสองยาว

ทำในขณะที่เป็นจริง

lFirstHit = getItemLocation ("N", คอลัมน์ (11),, เท็จ)

ถ้า (lFirstHit = 0) ออกจากนั้นทำ

lSecondHit = getItemLocation ("B", ช่วง (เซลล์ (lFirstHit + 1, 11), เซลล์ (Rows.Count, 11)), เท็จ

ถ้า (lSecondHit = 0) ออกจากนั้นทำ

แถว (lFirstHit & ":" & lSecondHit) ลบ

ห่วง

ส่วนท้าย

ฟังก์ชั่นที่สาธารณะ getItemLocation (sLookFor As String, _

rngSearch เป็น Range, _

bFullString ตัวเลือกเป็น Boolean = True, _

bLastOccurance ตัวเลือก As Boolean = True, _

ตัวเลือก bFindRow As Boolean = True) ตราบใดที่

'ค้นหาแถวแรก / แถวสุดท้าย / คอลัมน์ภายในช่วงของสตริงที่ระบุ

Dim Cell As Range

Dim iLookAt As Integer

Dim iSearchDir As Integer

Dim iSearchOdr As Integer

ถ้า (bFullString) _

แล้วก็

iLookAt = xlWhole

อื่น

iLookAt = xlPart

สิ้นสุดถ้า

ถ้า (bLastOccurance) _

แล้วก็

iSearchDir = xlPrevious

อื่น

iSearchDir = xlNext

สิ้นสุดถ้า

ถ้าไม่ใช่ (bFindRow) _

แล้วก็

iSearchOdr = xlByColumns

อื่น

iSearchOdr = xlByRows

สิ้นสุดถ้า

ด้วย rngSearch

ถ้า (bLastOccurance) _

แล้วก็

ตั้งค่าเซลล์ = .Find (sLookFor, .Cells (1, 1), xlValues, iLookAt, iSearchOdr, iSearchDir)

อื่น

ตั้งค่าเซลล์ = .Find (sLookFor, .Cells (.Rows.Count, .Columns.Count), xlValues, iLookAt, iSearchOdr, iSearchDir)

สิ้นสุดถ้า

จบด้วย

ถ้าเซลล์ไม่มีอะไรแล้ว

getItemLocation = 0

ไม่เช่นนั้น (bFindRow) _

แล้วก็

getItemLocation = Cell.Column

อื่น

getItemLocation = Cell.Row

สิ้นสุดถ้า

ตั้งค่าเซลล์ = ไม่มีอะไร

ฟังก์ชั่นสิ้นสุด

ขอบคุณ rizvisa1 สำหรับเคล็ดลับนี้

บทความก่อนหน้านี้ บทความถัดไป

เคล็ดลับยอดนิยม