การสร้างเอกสาร Mail Merge หรือจดหมายเวียน โดยทั่วไปจะสร้างตัวจดหมายใน Word แล้วค่อยนำข้อมูลมาจากใน Excel หรือ Access แต่ในบางครั้ง ถ้าแบบฟอร์มของเราอยู่ใน Excel เราก็สามารถนำสูตร VLOOKUP และ Macro มาประยุกต์ใช้ในการสร้าง Mail Merge ได้เช่นเดียวกัน

เนื้อหาในบทความนี้ สามารถใช้ได้กับ Excel 2007 และ 2003 โดยในส่วนที่มีข้อแตกต่าง จะมี (วงเล็บ) ระบุจุดแตกต่างไว้
ในตัวอย่างนี้ เป็นไฟล์ที่มี Macro ถ้าบันทึกเป็น Excel 2003 สามารถบันทึกเป็น .xls ได้ตามปกติ แต่ถ้าบันทึกเป็นไฟล์ Excel 2007 ต้องบันทึกเป็น .xlsm (Excel Macro-Enabled Workbook) อ่านเพิ่มเติม การเปิดไฟล์ Macro

ถ้าเรามีตารางรายชื่อพนักงาน พร้อมข้อมูลรายละเอียดต่างๆ (ชื่อ ที่อยู่ วันเริ่มงาน ฯลฯ) และต้องการนำเอาข้อมูลนั้นมาใส่ในแบบฟอร์ม เช่น ใบประเมินผลงาน ซึ่งแบบฟอร์มนั้น 1 ใบ ก็จะแสดงข้อมูลของพนักงาน 1 คน และพิมพ์ฟอร์มนั้นของพนักงานแต่ละคนออกมา

ตารางข้อมูลพนักงาน

ตัวอย่าง ฟอร์มแสดงข้อมูล จะเป็นการนำข้อมูลจากในตารางมาแสดง แยกตามพนักงานแต่ละคน

ฟอร์มแสดงข้อมูลใน Excel

สำหรับวิธีการนำข้อมูลมาแสดง ก็สามารถใช้สูตร VLOOKUP ช่วยในการดึงข้อมูลมาแสดงได้ง่ายๆ โดยไปหาจากรหัสที่ต้องการ

จะเห็นว่าในตารางข้อมูล คอลัมน์แรก จะเป็นรหัส หรือหมายเลขรันต่อไปเรื่อยๆ (running no.) อาจจะใช้เป็นเลขประจำตัวแทนก็ได้ เพราะเลขประจำตัวไม่ซ้ำกัน แต่ถ้าใช้เป็นเลขจำนวนเต็ม จะทำให้การอ้างอิงง่ายกว่า และง่ายต่อการสั่งเวลาพิมพ์

กำหนดหมายเลขสำหรับอ้างอิง

ก่อนที่จะเขียนสูตร VLOOKUP อยากให้สังเกตตรงรหัสที่ใช้อ้างอิง ตามตัวอย่าง จะเป็นการตั้งชื่อให้กับเซลล์ M3 ว่า No เพื่อให้ง่ายในการเขียนสูตร ซึ่งไฟล์ลักษณะนี้แนะนำให้ตั้งชื่อไม่ว่าจะเป็นเซลล์หรือตารางข้อมูลที่เกี่ยวข้อง

วิธีการตั้งชื่อให้กับเซลล์หรือตารางที่ง่ายที่สุด คือ คลิกเลือกเซลล์หรือตารางที่ต้องการ จากนั้นพิมพ์ชื่อที่เราต้องการในช่องมุมซ้ายบน ข้างๆ Formula Bar อ่านเพิ่มเติม วิธีการตั้งชื่อให้กับเซลล์

สูตร VLOOKUP สำหรับอ้างอิงข้อมูล

จากรูป เป็นสูตร VLOOKUP ที่ใช้อ้างอิงข้อมูล ของพนักงาน No = 1 มาจากตาราง EmployeeTable โดยเอาค่าจากคอลัมน์ที่ 2 ซึ่งก็คือ เลขประจำตัวมาแสดง

การเชื่อมค่าที่ได้จากสูตรหลายสูตร โดยใช้ &

จากรูป ถ้าต้องการเชื่อมคำหลายคำ เช่น คำนำหน้า ชื่อ และนามสกุล สามารถใช้ & เชื่อมระหวางคำได้

พอเขียนสูตร VLOOKUP เสร็จ สามารถลองเปลี่ยนหมายเลขอ้างอิงในช่องสีเหลือง (No) ได้ จะเห็นว่าข้อมูลได้เปลี่ยนให้อัตโนมัติแล้ว

เซลล์ที่ใช้กำหนดค่าในการพิมพ์

ก่อนที่จะสั่งพิมพ์ ให้กำหนดเซลล์เพิ่มอีก 3 เซลล์ และตั้งชื่อว่า Total, Start, Finish ตามลำดับ โดย

  • Total คือ จำนวนพนักงานทั้งหมด แสดงเพื่อให้ทราบว่า จำนวนคนทั้งหมดมีเท่าไร สามารถใช้สูตร MAX (ถ้ารหัสของเราเป็นจำนวนเต็ม เริ่มตั้งแต่ 1 เป็นต้นไป) หรือ COUNT ในการนับจำนวนได้
  • Start คือ จะให้เริ่มต้นพิมพ์จาก No อะไร
  • Finish คือ จะให้พิมพ์ถึง No อะไร

การกำหนด Start กับ Finish เพื่อใช้ในกรณีที่มีจำนวนรายการมาก ทำให้อาจต้องแบ่งพิมพ์เป็นช่วงๆ

ต่อไปมาสร้างปุ่มสำหรับกดพิมพ์ ใน Excel 2007 เลือกแทป Devloper > กลุ่มคำสั่ง Insert > เลือกปุ่ม (ถ้า Excel ไม่มีแทปนี้ ให้กำหนด Excel Options > Popular โดยเลือก Show Devloper tab in the Ribbon)

การสร้างปุ่มใน Excel 2007

สำหรับ Excel 2003 ให้เลือกเมนู View > Toolbars > Forms และคลิกเลือกปุ่ม Button

การสร้างปุ่มใน Excel 2003

จากนั้นลากเป็นพื้นที่สี่เหลี่ยม จะมีหน้าต่าง Assign Macro ขึ้นมา ให้กดปุ่ม New

หน้าต่าง Assign Macro

จะมีหน้าต่าง Microsoft Visual Basic ขึ้นมา

หน้าต่าง Microsoft Visual Basic สำหรับเขียนโค้ด

ให้ Copy โค้ดนี้ไปวางทับ ซึ่งโค้ดนี้เป็น Macro ที่มีชื่อว่า PrintSlip

 Sub PrintSlip() Start = Range("Start") Finish = Range("Finish") For i = Start To Finish Range("No") = i Calculate ActiveSheet.PrintOut Next i MsgBox "Completed!", vbOKOnly, "Print Routine Slip" End Sub

จะเห็นว่าการอ้างอิงค่าใน Excel จะอ้างอิงไปยังชื่อ (Range Name) ที่ตั้งไว้ (Start, Finish และ No)

ปิดหน้าต่าง Visual Basic จากนั้นใน Excel ให้คลิกขวาที่ปุ่ม จากนั้นที่ชื่อและพิมพ์ชื่อปุ่มเป็นคำว่า Print

ปุ่มสำหรับพิมพ์

จากนั้นให้คลิกขวาที่ปุ่ม จะมีเมนู Assing Macro

เมนูเปิดหน้าต่าง Assign Macro

จะมีหน้าต่าง Assign Macro ให้คลิกเลือกชื่อ Macro ที่สร้างไว้ คือ PrintSlip จากนั้นกดปุ่ม OK

หน้าต่าง Assign Macro เพื่อเปลี่ยนเป็น Macro ที่สร้างไว้

เมื่อกำหนดค่าต่างๆ เสร็จแล้ว เราสามารถสั่งพิมพ์รายการออกมา โดยกำหนด Start และ Finish ว่าจะให้เริ่มจากคนลำดับที่อะไรถึงอะไร จากนั้นกดปุ่ม Print

การพิมพ์จากการกดปุ่ม Print ที่สร้างขึ้นเองนี้ จะไปออกยังเครื่องพิมพ์ที่ตั้งค่าไว้ (ไม่มีหน้าต่าง Print ขึ้นมาให้เลือกอีก) ดังนั้น ก่อนพิมพ์จริง ให้ลองพิมพ์รายการปกติออกมา 1 คน โดยใช้เมนู File > Print แล้วตั้งค่าต่างๆ ตามที่ต้องการ จากนั้น เวลาเราสั่งพิมพ์ Excel จะใช้ค่าที่เราตั้งไว้ในการพิมพ์ Mail Merge หรือ Slip ออกมา
ในตัวอย่างนี้ เป็นไฟล์ที่มี Macro ถ้าบันทึกเป็น Excel 2003 สามารถบันทึกเป็น .xls ได้ตามปกติ แต่ถ้าบันทึกเป็นไฟล์ Excel 2007 ต้องบันทึกเป็น .xlsm (Excel Macro-Enabled Workbook) อ่านเพิ่มเติม การเปิดไฟล์ Macro