VBA - ตรวจสอบว่ามีค่าอยู่ในอาร์เรย์หรือไม่
VBA - ตรวจสอบว่ามีค่าอยู่ในอาร์เรย์หรือไม่
บทนำ
ในการตรวจสอบว่ามีค่าอยู่ในอาร์เรย์หรือไม่เราสามารถวนดูองค์ประกอบต่างๆ อย่างไรก็ตามมีวิธีแก้ไขปัญหาอื่น! คุณสามารถใช้ฟังก์ชัน INDEX (), เนทิฟไปยัง Excel และในกรณีของอาร์เรย์สองมิติใช้การรวมกันของฟังก์ชัน INDEX / MATCH อย่างไรก็ตามหากไม่พบค่านั้น Application.Match จะส่งคืนข้อผิดพลาด คุณจะต้องคำนึงถึงข้อผิดพลาดที่อาจเกิดขึ้นรวมถึงจำนวนมิติของตัวแปรอาเรย์ฟังก์ชั่นเล็ก ๆ นี้จะช่วยคุณออก!
การใช้ฟังก์ชันจับคู่
ฟังก์ชัน EstDans (mot As String, Tabl) เป็น BooleanDim Dimension เป็น Byte, j As Integer
เมื่อเกิดข้อผิดพลาดต่อไป
ถ้า IsError (UBound (Tabl, 2)) Dimension = 1 Else Dimension = 2
ในข้อผิดพลาด GoTo 0
เลือกมิติเคส
กรณีที่ 1
เมื่อเกิดข้อผิดพลาดต่อไป
EstDans = Application.Match (mot, Tabl, 0)
ในข้อผิดพลาด GoTo 0
กรณีที่ 2
สำหรับ j = 1 ถึง UBound (Tabl, 2)
เมื่อเกิดข้อผิดพลาดต่อไป
EstDans = Application.Match (mot, Application.Index (Tabl,, j), 0)
ในข้อผิดพลาด GoTo 0
ถ้า EstDans = True แล้วออกจากสำหรับ
ต่อไป
สิ้นสุดการเลือก
ฟังก์ชั่นสิ้นสุด
เรียกใช้ฟังก์ชัน
การทดสอบย่อย ()Dim Tb () ฉันเป็นจำนวนเต็ม
ขนาดของ tb 2:
Tb = ช่วง ("A2: C16") ค่า
Debug.Print EstDans (MaValeur, Tb)
ลบ Tb
มิติที่ 1:
ReDim Preserve Tb (15)
สำหรับ i = 0 ถึง 14
Tb (i) = เซลล์ (i + 2, 1)
ต่อไป
Debug.Print EstDans (MaValeur, Tb)
ส่วนท้าย
ใช้วนซ้ำ
โครงสร้างของฟังก์ชันนี้คล้ายกับโครงสร้างที่ใช้การ จับคู่ฟังก์ชัน BoucleSurTabl (mot เป็นสตริง, Tb)Dim Dimension เป็น Byte, i Long, j ตราบเท่า
เมื่อเกิดข้อผิดพลาดต่อไป
ถ้า IsError (UBound (Tb, 2)) Dimension = 1 Else Dimension = 2
ในข้อผิดพลาด GoTo 0
เลือกมิติเคส
กรณีที่ 1
สำหรับ j = LBound (Tb) ถึง UBound (Tb)
ถ้า Tb (j) = mot จากนั้น BoucleSurTabl = True: Exit Function
ต่อไป
กรณีที่ 2
สำหรับ i = LBound (Tb, 1) ถึง UBound (Tb, 1)
สำหรับ j = LBound (Tb, 2) ถึง UBound (Tb, 2)
ถ้า Tb (i, j) = mot ถ้าเป็น BoucleSurTabl = True: Exit Function
ถัดไป j
ต่อไปฉัน
สิ้นสุดการเลือก
ฟังก์ชั่นสิ้นสุด
ข้อสังเกต
เมื่อเทียบกับอัตราต่อรองทั้งหมดคุณจะได้ผลลัพธ์ที่ดีขึ้นด้วยฟังก์ชันลูปในอาร์เรย์ขนาดใหญ่กว่าการใช้ Application.Matchทดสอบอาร์เรย์สองมิติด้วยช่วงต่อไปนี้ ("A1: Y20002")
- การใช้ฟังก์ชั่นจับคู่: 8.300781 วินาที
- ใช้วงวน: 0.4375 วินาที
ทดสอบอาร์เรย์หนึ่งมิติ:
- ใช้ฟังก์ชั่นการจับคู่: ทันที
- ใช้วงวน: 0.015625 วินาที
ลิ้งค์ดาวน์โหลด
- คุณสามารถดาวน์โหลดสมุดงานตัวอย่าง: //cjoint.com/?DHfpeqMBvRK