Excel / VBA - การค้นหาการค้นหาที่มีผลตอบแทนหลายรายการ

การค้นหาการค้นหาแบบง่าย ๆ จะคืนค่าพิกัดแรก
  • ในบางสถานการณ์จำเป็นต้องทราบรายละเอียดทั้งหมดของเหตุการณ์ที่พบ
  • นี่คือความสำเร็จด้วยฟังก์ชั่นด้านล่าง

ในโมดูลสาธารณะ

 'Retourne toutes les adresses trouvées dans la recherche' WkbN = ชื่อ du classeur, avec cette donnée la fonction peut être mise และ xla 'WksN = ชื่อ la feuille' Plage = les coordonnées de la plage 'Retour dans le tableau donner en argument. ฟังก์ชั่น RechFind (ByVal Cle As String, ByVal WkbN As String, ByVal WksN As String, ByVal Plage As String, ByRef TBadress () As Variant) ตราบใด Cher Dim, Ix ตราบใด, PrAddress พร้อมเวิร์กบุ๊ก (WkbN) .Range (Plage) ตั้ง Cherche = .Find (Cle) ถ้าไม่ใช่ Cherche ก็ไม่มีอะไรแล้ว PrAddress = Cherche.Address Do ReDim รักษา TBadress (Ix) TBadress (Ix) = Cherche.Address Set Cherche = .FindNext (Cherche) Ix = Ix + 1 Loop ขณะที่ไม่ Cherche ไม่มีอะไรและ Cherche.Address PrAddress สิ้นสุดถ้าลงท้ายด้วย 'nombre d'occurence (s) trouvée (s) trouvée, Retour 0 si aucune เกิดขึ้น RechFind = Ix Set Cherche = ไม่มี' Libére la mémoireครอบครอง l ' Objet ฟังก์ชั่นสิ้นสุด 

เพิ่มไปยังสมุดงาน Xla

การใช้มาโคร

 Sub RechMulti () Dim R ยาว, TB () Dim i ในฐานะ Integer R = RechFind ("12 *", ThisWorkbook.Name, "Feuil1", "B1: B500", TB ()) ถ้า R> 0 จากนั้นสำหรับฉัน = 0 ถึง R - 1 'ou ubound (TB)' แผ่นตัวอย่าง ("Feuil1"). เซลล์ (i + 4, 5) = ช่วง (TB (i)) แถวถัดไป i สิ้นสุดถ้า End Sub 

ใช้ปุ่มโทรออก

 CommandButton1_Click ส่วนตัวย่อย () Dim R ยาว, TB () Dim i เป็นช่วง Integer ("E4: E20") ClearContents R = RechFind (ช่วง ("E2"), ThisWorkbook.Name, ActiveSheet.Name, Range ("B1 : B500 "). ที่อยู่, TB ()) ถ้า R> 0 จากนั้นสำหรับ i = 0 ถึง R - 1 'ou ubound (TB)' แผ่นตัวอย่าง (" Feuil1 "). เซลล์ (i + 4, 5) = ช่วง ( TB (i)) แถวถัดไป i สิ้นสุดถ้าย่อยสิ้นสุด 

ดาวน์โหลด

ดาวน์โหลดสมุดงานทดสอบ: ที่นี่

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

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