18 February 2016

พิมพ์ Mail Merge ใน Excel

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

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

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

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

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

การเชื่อมค่าที่ได้จากสูตรหลายสูตร โดยใช้ &
จากรูป ถ้าต้องการเชื่อมคำหลายคำ เช่น คำนำหน้า ชื่อ และนามสกุล สามารถใช้ & เชื่อมระหวางคำได้
พอเขียนสูตร 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
**จากการทดสอบของผมเอง  Range("Start") ต้องเปลี่ยน เป็น Range("L6")   Finish = Range("Finish") เปลี่ยนเป็น Range("L7")**
ปิดหน้าต่าง Visual Basic จากนั้นใน Excel ให้คลิกขวาที่ปุ่ม จากนั้นที่ชื่อและพิมพ์ชื่อปุ่มเป็นคำว่า Print

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

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

หน้าต่าง Assign Macro เพื่อเปลี่ยนเป็น Macro ที่สร้างไว้
เมื่อกำหนดค่าต่างๆ เสร็จแล้ว เราสามารถสั่งพิมพ์รายการออกมา โดยกำหนด Start และ Finish ว่าจะให้เริ่มจากคนลำดับที่อะไรถึงอะไร จากนั้นกดปุ่ม Print
**ในส่วนของการบันทึกไฟล์ แนะนำให้เปลี่ยนนามสกุลเป็น xlsm โดยเลือก ส่วนของ save as type เป็น Excel Macor-Enabled Workbook (*.xlsm) ครับเพื่อให้ Macro ของเราที่ทำไว้ ไม่หายครับ**
-------------------------------------------------------------------------------------------
credit : http://www.cleverdrive.net/384/excel-mail-merge-print-routing-slip/
-------------------------------------------------------------------------------------------

No comments:

Post a Comment