VBA - ตรวจสอบว่ามีค่าอยู่ในอาร์เรย์หรือไม่

VBA - ตรวจสอบว่ามีค่าอยู่ในอาร์เรย์หรือไม่

บทนำ

ในการตรวจสอบว่ามีค่าอยู่ในอาร์เรย์หรือไม่เราสามารถวนดูองค์ประกอบต่างๆ อย่างไรก็ตามมีวิธีแก้ไขปัญหาอื่น! คุณสามารถใช้ฟังก์ชัน INDEX (), เนทิฟไปยัง Excel และในกรณีของอาร์เรย์สองมิติใช้การรวมกันของฟังก์ชัน INDEX / MATCH อย่างไรก็ตามหากไม่พบค่านั้น Application.Match จะส่งคืนข้อผิดพลาด คุณจะต้องคำนึงถึงข้อผิดพลาดที่อาจเกิดขึ้นรวมถึงจำนวนมิติของตัวแปรอาเรย์

ฟังก์ชั่นเล็ก ๆ นี้จะช่วยคุณออก!

การใช้ฟังก์ชันจับคู่

 ฟังก์ชัน EstDans (mot As String, Tabl) เป็น Boolean

Dim 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
บทความก่อนหน้านี้ บทความถัดไป

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