การเปรียบเทียบ VBA Operaทอร์: ไม่เท่ากัน Less กว่าหรือเท่ากับ

⚡ สรุปอย่างชาญฉลาด

การเปรียบเทียบ VBA Operaตัวดำเนินการจะทดสอบค่าหนึ่งกับอีกค่าหนึ่งและส่งคืนค่า True หรือ False หน้านี้อธิบายตัวดำเนินการทั้งหกตัว แสดงวิธีการใช้งานภายในคำสั่ง If อธิบายวิธีการเปรียบเทียบข้อความและวันที่ และแสดงรายการข้อผิดพลาดที่ทำให้ได้ผลลัพธ์ที่ไม่ถูกต้อง

  • 🇧🇷 วัตถุประสงค์: ตัวดำเนินการเปรียบเทียบจะตรวจสอบความถูกต้องของข้อมูลโดยการทดสอบเงื่อนไขซึ่งประเมินค่าได้เป็นจริงหรือเท็จ
  • 🔢 หก Operaทอร์: เท่ากัน, น้อยกว่า, มากกว่า, ไม่เท่ากับ, น้อยกว่าหรือเท่ากับ, และมากกว่าหรือเท่ากับ
  • 🔁 บทบาทคู่: เครื่องหมายเท่ากับใช้เปรียบเทียบภายในเงื่อนไข และใช้กำหนดค่าภายนอกเงื่อนไข
  • 🧪 คำสั่ง if: การเปรียบเทียบทุกครั้งจะถูกวางไว้ภายในคำสั่ง If, ElseIf หรือ Do While เพื่อควบคุมว่าโค้ดส่วนใดจะทำงาน
  • 🔤 เนื้อหาและวันที่: สตริงจะเปรียบเทียบทีละตัวอักษร ส่วนวันที่จะถูกเปรียบเทียบเป็นหมายเลขลำดับ
  • ⚠️ กับดักแม่นยำ: สอง Double ค่าที่ดูเหมือนกันอาจไม่ผ่านการทดสอบความเท่าเทียมกัน ดังนั้นควรเปรียบเทียบความแตกต่างที่ปัดเศษแล้ว

การเปรียบเทียบ VBA Operaโปร

การเปรียบเทียบ VBA Operaโปร

ตัวดำเนินการเหล่านี้ใช้สำหรับเปรียบเทียบค่า ตัวดำเนินการเปรียบเทียบได้แก่ เท่ากับ น้อยกว่า มากกว่า และไม่เท่ากับ

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

การเปรียบเทียบทุกครั้งจะส่งคืนค่าใดค่าหนึ่งจากสองค่า คือ จริง หรือ เท็จ และไม่เคยเป็นตัวเลข ผลลัพธ์นั้นคือสิ่งที่คำสั่ง If นำไปใช้ในการดำเนินการ

ตารางต่อไปนี้จะแสดงตัวดำเนินการเปรียบเทียบที่กำหนดไว้ใน VBA.

OperaTor Descriptไอออน
= เท่ากัน: ตรวจสอบว่าค่าสองค่าเท่ากันหรือไม่ นอกจากนี้ยังใช้เป็นตัวดำเนินการกำหนดค่าอีกด้วย
< Less than: ตรวจสอบว่าค่าทางซ้ายน้อยกว่าค่าทางขวาหรือไม่
> มากกว่า: ตรวจสอบว่าค่าทางด้านซ้ายมากกว่าค่าทางด้านขวาหรือไม่
<> ไม่เท่ากับ: ตรวจสอบว่าค่าสองค่าแตกต่างกันหรือไม่
<= Less มากกว่าหรือเท่ากับ: ตรวจสอบว่าค่าทางด้านซ้ายน้อยกว่าหรือเท่ากับค่าทางด้านขวาหรือไม่
>= มากกว่าหรือเท่ากับ: ตรวจสอบว่าค่าทางด้านซ้ายมากกว่าหรือเท่ากับค่าทางด้านขวาหรือไม่

การเห็นตัวดำเนินการแต่ละตัวถูกนำไปใช้กับตัวแปรสองตัว ทำให้ผลลัพธ์ที่ได้นั้นคาดเดาได้ง่ายขึ้น

การเปรียบเทียบ VBA Operaทอร์พร้อมตัวอย่าง

ตารางต่อไปนี้แสดงการเปรียบเทียบ Excel VBA Operaทอร์พร้อมตัวอย่างและเอาต์พุต

S / N OperaTor ตัวอย่าง เอาท์พุต
1 = ถ้า x = z แล้ว คืนค่าเป็นจริงหากเท่ากัน มิฉะนั้นจะส่งคืนค่าเท็จ
2 < ถ้า x < z แล้ว คืนค่าเป็นจริงถ้า x น้อยกว่า z มิฉะนั้นจะส่งคืนค่าเท็จ
3 > ถ้า x > z แล้ว คืนค่าเป็นจริงถ้า x มากกว่า z มิฉะนั้นจะส่งคืนค่าเท็จ
4 <> ถ้า x <> z แล้ว คืนค่าเป็นจริงหากค่าไม่เท่ากัน มิฉะนั้นจะส่งคืนค่าเท็จ
5 <= ถ้า x <= z แล้ว คืนค่าเป็นจริงถ้า x น้อยกว่าหรือเท่ากับ z มิฉะนั้นจะส่งคืนค่าเท็จ
6 >= ถ้า x >= z แล้ว คืนค่าเป็นจริงถ้า x มากกว่าหรือเท่ากับ z มิฉะนั้นจะส่งคืนค่าเท็จ

ตัวอย่างซอร์สโค้ด

การเปรียบเทียบที่เท่าเทียมกัน OperaTor

If 2 = 1 Then
    MsgBox "True", vbOKOnly, "Equal Operator"
Else
    MsgBox "False", vbOKOnly, "Equal Operator"
End If

ที่นี่

  • “ถ้า 2 = 1 แล้ว… อย่างอื่น… สิ้นสุดถ้า” ใช้คำสั่ง if เพื่อประเมินเงื่อนไข “2 = 1”
  • “ข่าวสารเกี่ยวกับBox... " เป็นฟังก์ชั่นในตัวที่แสดงกล่องข้อความ
    • พารามิเตอร์แรก “True” หรือ “False” คือสิ่งที่จะแสดงในกล่องข้อความ ในตัวอย่างของเรา 2 ไม่เท่ากับ 1 ดังนั้นจะแสดง “false” ในกล่องข้อความ
    • พารามิเตอร์ที่สอง “vbOKOnly” คือปุ่มที่แสดงในกล่องข้อความ
    • พารามิเตอร์ที่สาม “เท่ากับ Opera“tor” คือหัวเรื่องของกล่องข้อความ

การดำเนินการโค้ดข้างต้นให้ผลลัพธ์ดังต่อไปนี้

เท่ากัน OperaTor

การทดสอบแบบเดี่ยวเป็นรูปแบบที่ง่ายที่สุด มาโครที่ใช้งานจริงจะรวมการเปรียบเทียบและแยกย่อยระหว่างผลลัพธ์หลายอย่าง

วิธีใช้การเปรียบเทียบ Operaทอร์ในคำสั่ง If

ตัวดำเนินการเปรียบเทียบนั้นแทบจะไม่เป็นประโยชน์เลยหากใช้เพียงลำพัง ผลลัพธ์ที่เป็นจริงหรือเท็จจะถูกป้อนเข้าสู่โครงสร้างการตัดสินใจ และคำสั่ง If คือคำสั่งที่คุณจะใช้บ่อยที่สุด ตัวอย่างด้านล่างนี้ให้คะแนนที่เก็บไว้ในเซลล์ A1 และเขียนผลลัพธ์ไว้ข้างๆ เซลล์นั้น

Sub GradeScore()
    Dim Score As Long

    Score = Sheet1.Range("A1").Value

    If Score >= 90 Then
        Sheet1.Range("B1").Value = "Distinction"
    ElseIf Score >= 50 Then
        Sheet1.Range("B1").Value = "Pass"
    ElseIf Score < 0 Then
        MsgBox "A score cannot be negative", vbCritical, "Invalid Entry"
    Else
        Sheet1.Range("B1").Value = "Fail"
    End If
End Sub

มาโครนี้จะอ่านค่าคะแนนหนึ่งครั้ง จากนั้นทดสอบกับเงื่อนไขสามข้อตามลำดับ มีสี่ประเด็นที่จะอธิบายว่าทำไมมันถึงทำงานแบบนั้น

  • ความสำคัญของการสั่งซื้อ: VBA จะหยุดที่สาขาแรกที่ส่งค่า True กลับมา การวาง คะแนน >= 50 ก่อน คะแนน >= 90 จะระบุคะแนนสูงทุกคะแนนว่าเป็นการสอบผ่าน
  • "อื่นๆ" คือคำที่ใช้ครอบคลุมทุกอย่าง: ค่าใดก็ตามที่ไม่ผ่านการทดสอบก่อนหน้านี้ทั้งหมด จะถูกส่งต่อไปยังส่วน "อื่นๆ" ดังนั้นจึงไม่มีค่าใดที่ไม่ได้รับการจัดการ
  • ห้ามเชื่อมต่อแบบต่อเนื่อง: VBA ไม่สามารถอ่านได้ 0 <= คะแนน <= 100. เขียน ถ้าคะแนน >= 0 และคะแนน <= 100 แล้ว โดยใช้โปรแกรม ตัวดำเนินการเชิงตรรกะ แทน.
  • การทดสอบแบบเดียวกัน แต่ใช้โครงสร้างอื่น: เงื่อนไขเดียวกันนี้ใช้ในการทำงานของระบบ Do While และ Select Case ดังนั้นตัวดำเนินการเหล่านี้จึงถูกนำไปใช้กับทุกลูปที่คุณเขียน

💡 เคล็ดลับ: ประกาศตัวแปรด้วยชนิดข้อมูลตัวเลข ดังแสดงต่อไปนี้ คะแนนที่มืดมน ตราบเท่าที่ถ้าค่าดังกล่าวยังคงเป็น Variant ที่เก็บข้อความอยู่ “9” > “10” ส่งคืนค่า True เนื่องจากเป็นการเปรียบเทียบแบบทีละตัวอักษร

การเปรียบเทียบข้อความและวันที่ใน VBA

Numbers การเปรียบเทียบเป็นไปตามหลักคณิตศาสตร์อย่างแม่นยำ แต่ข้อความและวันที่กลับมีกฎเกณฑ์ของตัวเอง และทั้งสองอย่างนี้มักทำให้ผู้เริ่มต้นประหลาดใจ

สตริงจะถูกเปรียบเทียบทีละตัวอักษรโดยใช้ตำแหน่งการเรียงลำดับ ดังนั้น “Apple” < “Banana” จะได้ผลลัพธ์เป็น True โดยค่าเริ่มต้น การเปรียบเทียบจะคำนึงถึงตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก ซึ่งหมายความว่า “guru99” = “Guru99” ส่งคืนค่าเท็จ การวาง ตัวเลือกเปรียบเทียบข้อความ การตั้งค่านี้ที่ด้านบนสุดของโมดูลจะทำให้การเปรียบเทียบสตริงทั้งหมดในโมดูลนั้นไม่คำนึงถึงตัวพิมพ์ใหญ่เล็ก สำหรับการทดสอบเพียงครั้งเดียวโดยไม่ต้องแก้ไขโมดูล ให้ใช้ StrComp ร่วมกับอาร์กิวเมนต์ vbTextCompare

วันที่ถูกจัดเก็บเป็นหมายเลขลำดับนับจากวันที่ 30 ธันวาคม พ.ศ. 1899 ดังนั้นจึงสามารถเปรียบเทียบได้โดยตรงกับตัวดำเนินการทั้งหกตัวเดียวกัน การเขียน ถ้า DueDate < Date แล้ว ฟังก์ชันนี้ตรวจจับรายการที่ค้างชำระได้อย่างถูกต้อง เนื่องจากฟังก์ชัน Date จะส่งคืนวันที่ปัจจุบันของระบบในรูปแบบเดียวกับหมายเลขลำดับ ข้อควรระวังคือวันที่ที่จัดเก็บในรูปแบบข้อความ: “01/02/2026” ที่อ่านจากไฟล์นำเข้าเป็นสตริง ไม่ใช่วันที่ และจะถูกเปรียบเทียบตามลำดับตัวอักษร ควรแปลงด้วย CDate ก่อนทำการทดสอบ

การรู้กฎเกณฑ์สำหรับแต่ละประเภทจะช่วยลดความประหลาดใจได้มาก แต่ก็ยังมีข้อผิดพลาดเล็กน้อยที่นักพัฒนาที่มีประสบการณ์ยังคงพลาดได้อยู่ดี

ข้อผิดพลาดทั่วไปเมื่อเปรียบเทียบค่าใน VBA

ปัญหาทั้งห้าข้อด้านล่างนี้เป็นสาเหตุหลักของการเปรียบเทียบที่ให้ผลลัพธ์ที่ไม่คาดฝัน

  • การมอบหมายงานเข้าใจผิดว่าเป็นงานเปรียบเทียบ: นอกเหนือจากเงื่อนไขบางประการ x = 5 เก็บค่า 5 ไว้ใน x ภายในคำสั่ง If สัญลักษณ์เดียวกันนี้ใช้ทดสอบความเท่าเทียมกัน VBA ไม่มีตัวดำเนินการ == แยกต่างหาก ดังนั้นโปรดอ่านบริบทอย่างระมัดระวัง
  • การทดสอบ Double ค่าสำหรับความเท่าเทียมกันอย่างสมบูรณ์: ความแม่นยำที่จัดเก็บไว้หมายความว่า 0.1 + 0.2 = 0.3 จะคืนค่าเป็นเท็จ ให้เปรียบเทียบความแตกต่างที่ปัดเศษแทน เช่น ถ้า Abs(a – b) < 0.000001 แล้ว.
  • การเปรียบเทียบสิ่งใดๆ กับค่าว่าง: ค่า Null ไม่เท่ากับอะไรเลย แม้แต่ค่า Null เองก็ตาม ตรวจสอบด้วย IsNull แทนที่จะใช้ = ว่าง.
  • การเปรียบเทียบข้อความกับตัวเลข: เซลล์ที่มีข้อความว่า “100” ไม่เท่ากับตัวเลข 100 โปรดแปลงค่าด้วย CLng หรือ CDbl ก่อนทำการทดสอบ
  • การอ่านค่า .Text แทนที่จะเป็น .Value: คุณสมบัติ .Text จะส่งคืนค่าที่แสดง ซึ่งจะถูกตัดทอนตามความกว้างของคอลัมน์และการจัดรูปแบบ ควรเปรียบเทียบกับ .Value เสมอ

ดาวน์โหลดไฟล์ Excel ด้านบน Code

คำถามที่พบบ่อย

ไม่ VBA จะประเมินการเปรียบเทียบครั้งแรกว่าเป็นจริงหรือเท็จ จากนั้นจึงเปรียบเทียบผลลัพธ์นั้นกับ 10 ซึ่งจะทำให้ได้คำตอบที่คลาดเคลื่อน ควรเขียนการทดสอบทั้งสองแยกกัน แล้วเชื่อมเข้าด้วยกันโดยใช้คำสั่ง "และ"

คำสั่ง Like จะเปรียบเทียบสตริงกับรูปแบบที่กำหนดไว้ แทนที่จะเปรียบเทียบกับค่าที่แน่นอน ตัวอักษรตัวแทน (wildcards) ได้แก่ เครื่องหมายดอกจัน (*) สำหรับอักขระใดๆ และเครื่องหมายคำถาม (?) สำหรับอักขระหนึ่งตัว ดังนั้น “Guru99” เหมือนกับ “Guru*” ส่งคืนค่า True

ใช้ตัวดำเนินการ Is เช่น If ws Is Nothing Then เครื่องหมายเท่ากับใช้เปรียบเทียบค่า ในขณะที่ Is ใช้ตรวจสอบว่าตัวแปรอ็อบเจ็กต์สองตัวชี้ไปยังอ็อบเจ็กต์เดียวกันหรือไม่ ซึ่งเป็นเงื่อนไขเดียวที่ถูกต้องสำหรับการตรวจสอบอ็อบเจ็กต์

ใช่แล้ว อธิบายกฎด้วยคำพูดที่เข้าใจง่าย เช่น ให้ทำเครื่องหมายคำสั่งซื้อใดๆ ที่มีมูลค่าเกิน 500 ซึ่งสั่งซื้อก่อนวันนี้ แล้วผู้ช่วย AI จะส่งคืนเงื่อนไข If ที่ตรงกัน ตรวจสอบค่าขอบเขตก่อนที่จะเชื่อถือได้

ใช่แล้ว วางบล็อก If และผู้ช่วย AI ลงไป traces ซึ่งสาขาหนึ่งจะดักจับแต่ละค่า จากนั้นชี้ให้เห็น ElseIf ที่ไม่สามารถเข้าถึงได้ หรือการเปรียบเทียบระหว่างข้อความกับตัวเลข ยืนยันการแก้ไขทีละขั้นตอนping ผ่านทางโค้ด

สรุปโพสต์นี้ด้วย: