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 สำหรับเคล็ดลับนี้