VAT Validation System using Excel VBA

Case Study: โปรแกรมตรวจสอบ VAT

ในงาน Shared Services
หนึ่งในงานที่สร้างความเหนื่อยล้าให้กับทีมบัญชีมากที่สุด
คือการตรวจสอบข้อมูล VAT

ไม่ใช่เพราะงานยาก

แต่เพราะ “ข้อมูลมีจำนวนมหาศาล”
และ “รายละเอียดเล็ก ๆ” เหล่านั้นมีความสำคัญมาก


ปัญหาที่เกิดขึ้นจริงในองค์กร

องค์กรมีบริษัทในเครือจำนวนมาก
แต่ละบริษัทมีรูปแบบเอกสารไม่เหมือนกัน

แม้แต่ “เลขที่ใบกำกับภาษี”
ก็ยังมี Format แตกต่างกันหลายรูปแบบ

บางบริษัทใช้ Prefix ต่างกัน
บางบริษัทมีเลขสาขา
บางบริษัทมี Running Number คนละรูปแบบ

รวมถึงยังมีเงื่อนไขด้านภาษีอีกมาก เช่น

  • VAT 7%
  • VAT 0%
  • เอกสารบางประเภทไม่มีภาพเอกสาร
  • รูปแบบเลข Tax ID ไม่ถูกต้อง
  • เลขที่ใบกำกับภาษีขาดช่วง
  • ข้อมูลซ้ำ
  • ชื่อลูกค้าไม่สัมพันธ์กับข้อมูลภาษี

เมื่อรวมกับ Transaction จำนวนมหาศาลในแต่ละเดือน

การตรวจสอบด้วยสายตาแทบเป็นไปไม่ได้


จุดเริ่มต้นของโปรแกรม VAT Check 13 Conditions

ผมเริ่มจากการคุยกับผู้ใช้งานจริง

สิ่งที่พวกเขาบอกไม่ใช่เรื่อง Technology

แต่คือ

“หาความผิดปกติไม่เจอ”

“ต้องตรวจซ้ำหลายรอบ”

“เสียเวลามาก”

“กลัวพลาด”

จากปัญหาเหล่านั้น
ผมจึงออกแบบโปรแกรม VBA สำหรับตรวจสอบ VAT ตามเงื่อนไข 13 จุด

โดยให้สามารถทำงานเสร็จได้ภายใน “ระดับวินาที”


แนวคิดของระบบ

ผมเลือกใช้ Excel VBA เป็น Front End

เพราะผู้ใช้งานทำงานบน Excel อยู่แล้วทุกวัน

สิ่งที่ระบบทำมีเพียง

  1. เปิดไฟล์ Text จากระบบต้นทาง
  2. Parse ข้อมูลทั้งหมดเข้า Memory
  3. ตรวจสอบเงื่อนไขอัตโนมัติ
  4. แยกผลลัพธ์ลงแต่ละ Sheet
  5. Highlight จุดผิดปกติทันที

ทั้งหมดเกิดขึ้นจากการกดปุ่มเพียงครั้งเดียว


สิ่งที่ระบบตรวจสอบจริง ๆ

จากโค้ดของระบบ
โปรแกรมไม่ได้เป็นเพียง “Filter ข้อมูล”

แต่เป็น Engine สำหรับตรวจสอบความผิดปกติของ VAT โดยเฉพาะ


1. ตรวจสอบ VAT Base ถูกต้องหรือไม่

ระบบคำนวณ VAT 7% ใหม่จาก Base Amount อัตโนมัติ

เช่น

CheckNumeric = nmv * 7 / 100

แล้วนำไปเทียบกับ VAT จริงที่อยู่ในข้อมูล
หากยอดต่างกันจะถูก Flag ทันที

นี่ช่วยตรวจจับปัญหาเช่น

  • VAT คำนวณผิด
  • Base Amount ไม่ถูกต้อง
  • มีการป้อนข้อมูลผิดตำแหน่ง

2. ตรวจสอบเลขที่ใบกำกับภาษีซ้ำ

ระบบใช้ Scripting.Dictionary
เพื่อนับจำนวนเลขที่ใบกำกับภาษีทั้งหมดอย่างรวดเร็ว

หากเลขใดพบมากกว่า 1 ครั้ง
ระบบจะดึงออกมาเป็นรายการผิดปกติทันที

สิ่งนี้สำคัญมาก
เพราะ VAT Duplicate อาจนำไปสู่ความเสี่ยงด้านภาษีโดยตรง


3. ตรวจสอบเลขที่ใบกำกับภาษีขาดช่วง (Skip Number)

นี่คือหนึ่งใน Logic ที่ซับซ้อนที่สุดของระบบ

โปรแกรมสามารถตรวจสอบได้ว่า Running Number ของใบกำกับภาษี

  • มีเลขหายหรือไม่
  • ขาดช่วงตรงไหน
  • ช่วงใดผิดปกติ

โดยระบบจะวิเคราะห์ Prefix และ Running Number แยกจากกันอัตโนมัติ

จากนั้นสร้างช่วงเลขที่หาย เช่น

AB0001 - AB0010

โดยอัตโนมัติ


4. ตรวจสอบรูปแบบ Tax ID

ระบบตรวจสอบจำนวนหลักของ Tax ID
รวมถึง Format ที่ผิดปกติผ่าน Advanced Filter Criteria

ช่วยลดปัญหาเช่น

  • Tax ID ไม่ครบ
  • พิมพ์ผิด
  • มีตัวอักษรปน

5. ตรวจสอบ Tax ID ว่าง

หากรายการใดไม่มีเลขประจำตัวผู้เสียภาษี
ระบบจะดึงออกมาตรวจสอบทันที


6. ตรวจสอบ Branch กับ Tax ID

ระบบตรวจสอบความสัมพันธ์ระหว่าง

  • เลขสาขา
  • Tax ID
  • ข้อมูลเอกสาร

เพื่อค้นหาความผิดปกติของข้อมูล VAT


7. ตรวจสอบชื่อผู้ขาย / ลูกค้า

ระบบสามารถค้นหาความผิดปกติของชื่อ Vendor หรือ Customer
ผ่านเงื่อนไขที่กำหนดไว้ล่วงหน้า

ช่วยลดปัญหาเช่น

  • ชื่อไม่ตรง
  • สะกดผิด
  • ใช้ชื่อไม่มาตรฐาน

8. แยกประเภทเอกสารอัตโนมัติ

จากเลขที่ใบกำกับภาษี
ระบบสามารถระบุประเภทเอกสารได้อัตโนมัติ เช่น

  • ABC1031
  • ABC1041
  • ABC1051
  • ABC1061

ผ่าน Logic Mapping ใน VBA


9. รองรับเลขเอกสารหลายรูปแบบ

ระบบไม่ได้ Fix Format ตายตัว

แต่สามารถแยก Prefix และ Running Number แบบ Dynamic ได้ เช่น

If vatLength >= 6 Then dynamicLength = 4 Else dynamicLength = 2

จึงรองรับเลขเอกสารจากหลายบริษัทพร้อมกันได้


ทำไมระบบนี้จึงเร็วมาก

หัวใจสำคัญคือ

“ทำงานบน Memory ให้มากที่สุด”

แทนที่จะอ่านเขียน Cell ทีละรายการ

ผมโหลดข้อมูลทั้งหมดเข้า Array ก่อน

a(1000000, 18) As Variant

จากนั้นประมวลผลบน Memory แล้วค่อย Write กลับลง Excel ทีเดียว

รวมถึง

  • ปิด ScreenUpdating
  • ปิด Calculation ชั่วคราว
  • ใช้ AdvancedFilter
  • ใช้ Dictionary แทน Loop ซ้อน

ทั้งหมดนี้ทำให้ระบบสามารถตรวจสอบ Transaction จำนวนมหาศาลได้ภายในไม่กี่วินาที


สิ่งที่สำคัญกว่าตัวโค้ด

สิ่งที่ผมได้เรียนรู้จากโปรแกรมนี้คือ

ปัญหาขององค์กรจำนวนมาก
ไม่ได้ต้องการ Technology ที่ซับซ้อนที่สุด

แต่ต้องการคนที่เข้าใจว่า

  • ผู้ใช้งานเหนื่อยตรงไหน
  • งานส่วนใดเสี่ยงผิดพลาด
  • ขั้นตอนใดเสียเวลาที่สุด
  • และอะไรควรถูก Automation ก่อน

เพราะสุดท้ายแล้ว

ระบบที่ดี
ไม่ใช่ระบบที่ดูซับซ้อน

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

Scroll to Top