สร้างฟอร์มกรอกข้อมูล excel vba

การใช้งานโปรแกรม Excel ที่ถือว่าเป็นส่วนสำคัญที่สุดอย่างหนึ่งก็คือ การสร้าง Macro และเขียนโปรแกรม VBA (Visual Basic for Application) เนื่องจากเป็นเครื่องมือที่ทรงประสิทธิภาพ แม้ว่าจะเป็นการเขียนโปรแกรม แต่ก็มีวิธีที่ช่วยให้ผู้ใช้ที่ไม่มีพื้นความรู้ด้านโปรแกรมมิ่ง คือไม่เคยเขียนโปรแกรมมาก่อน ก็สามารถสร้างชุดคำสั่งได้ โดยอาศัยเครื่องมือที่เป็นการบันทึก Macro แต่การบันทึก Macro ก็มีปัญหาไม่น้อย เพราะบ่อยครั้งที่การบันทึก Macro ก็จะได้ชุดคำสั่งที่ไม่ตรงกับความต้องการ หรือเมื่อรันโปรแกรมครั้งที่ 2 ก็พบว่ามีความผิดพลาดเกิดขึ้น ผู้เขียนใช้เวลาศึกษานานนับเดือน ค้นหาวิธีการ ตลอดจนปรับปรุงพัฒนาจนทำให้ได้วิธีลัดในการสร้างโปรแกรม VBA เหล่านั้น สมบูรณ์แบบ และสามารถนำมาใช้ได้กับผู้ใช้ทุกระดับ จนถึงโปรแกรมเมอร์ผู้เชี่ยวชาญ ทำให้ลดขั้นตอนการเรียนรู้ การสร้างโปรแกรมเป็นไปอย่างรวดเร็ว เกินความคาดหมาย จนองค์กรชั้นนำหลายแห่ง เชิญไปเป็นวิทยากรอบรมให้กับฝ่ายคอมพิวเตอร์ เพื่อให้สามารถเขียนโปรแกรมได้ ตั้งแต่เรียนจบหลักสูตรที่ใช้เวลาเพียง 2 วัน สำหรับผู้เรียน ที่ต้องการปูพื้นฐานวิธีลัดการใช้ Macro และเขียน VBA อย่างรวดเร็ว ก็ขอแนะนำให้ไปดู

    

สร้างฟอร์มกรอกข้อมูล excel vba
 eBook Excel มืออาชีพ: เทคนิคการเขียน VBA สำหรับผู้เริ่มต้น คลิกที่นี่ https://goo.gl/vrxqNt

ทั้งนี้เนื่องจากถือเป็นพื้นฐานที่ต้องรู้ก่อนเป็นอันดับแรก ก่อนที่จะมาเรียนรู้ การเขียน VBA สร้าง User Form ในหลักสูตรนี้ การใช้ User Form จะช่วยในเรื่อง การใช้งานด้านข้อมูลบน Excel ไม่ว่าจะเป็นการป้อนข้อมูลที่ทรงประสิทธิภาพ การบริหารและจัดการฐานข้อมูล รวมไปถึงการวิเคราะห์ข้อมูล ซึ่งมีหลายองค์กรนำมาใช้แต่ติดปัญหาว่าไม่รู้จะเริ่มทำอย่างไร เนื่องจากต้องใช้เวลาในการเรียนรู้นาน การเรียนรู้ในหลักสูตรนี้จึงเป็นคำตอบที่จะช่วยให้ผู้ใช้ Excel ที่ต้องการพัฒนาการใช้งานด้านข้อมูลโดยเฉพาะการใช้งาน User Form เพื่อสร้างแบบฟอร์ม เพราะมีเครื่องมือที่ให้มาพร้อมกับโปรแกรม Excel อยู่แล้วให้เกิดประโยชน์ ทำให้สามารถสร้างงานเอง แก้ไขงานเอง ได้ตามต้องการ และตามสะดวก เพราะจะบอกวิธีเป็นขั้นเป็นตอน เข้าใจง่าย ใช้เวลาไม่นาน

ในหลักสูตรนี้ ผู้เรียนสามารถเรียนรู้แค่ดูตามขั้นตอนก็เข้าใจโดยง่าย เพราะผู้บรรยายได้ลำดับขั้นตอนอย่างละเอียด แต่อย่างไรก็ตาม การดูอย่างเดียวจะทำให้ผู้เรียนเข้าใจในระดับเบื้องต้นเท่านั้น แต่ถ้าต้องการนำไปใช้งานให้ได้ผล ขอแนะนำว่าให้ดู ไปก่อน 1 รอบ จากนั้นเปิดเครื่องคอมพิวเตอร์ พร้อมลงมือทำตามขั้นตอนในแต่ละหัวข้อ อีก 3-5 รอบ เมื่อจบบท ก็ให้กลับมาทบทวนจนชำนาญ โดยดูว่าผู้เรียนสามารถทำได้เองโดยไม่ต้องทำตามขั้นตอนที่เรียน ทำเช่นนี้ไปทุกบท เมื่อจบแล้วจะสามารถนำความรู้แต่ละเรื่องมาประกอบเป็นงานที่ต้องการทำได้อย่างรวดเร็วและมีประสิทธิภาพ และขอขอบคุณทุกท่านที่ติดตามผลงานของผู้บรรยาย และผลงานเขียนหนังสือมาโดยตลอด และสามารถติดตามข้อมูลข่าวสารล่าสุดได้ที่ www.cistraining.com และผลงานหนังสือชุดล่าสุดใน OokBee.com ที่ https://goo.gl/ZEkkZa และวิดีโอสอนล่าสุดใน SkillLane.com ที่ https://goo.gl/WjdYSn

ตัวอย่างนี้น่าจะช่วยแก้ปัญหาให้กับงานได้มากมายหลายประเภท ซึ่งต้องการกรอกข้อมูลลงไปในเซลล์ แล้วต้องการนำข้อมูลที่กรอกไว้ไปเก็บต่อท้ายข้อมูลที่มีอยู่แล้ว ทำให้เกิดเป็นตารางฐานข้อมูลในที่สุด

ชุดคำสั่ง : SendData

สร้างฟอร์มกรอกข้อมูล excel vba

สิ่งที่ต้องการ

ส่งข้อมูลที่กรอกลงในเซลล์ B3:D3 ไปเก็บต่อท้ายรายการในตารางด้านขวา

ขั้นตอนการสร้างงาน

  1. สร้าง Range Name ชื่อ Source ให้กับเซลล์ B3:D3
  2. สร้าง Range Name ชื่อ Ref ให้กับเซลล์ G3
  3. สร้าง Formula Name ชื่อ Target ให้เป็นสูตร
    =OFFSET( Ref, COUNTA($G:$G)-1, 0, 1, 3 )

วิเคราะห์สูตร

Target
=OFFSET( Ref, COUNTA($G:$G)-1, 0, 1, 3 )

ขอให้สังเกตเลข 0, 1, 3 ที่อยู่ด้านท้ายของสูตร Offset ก่อน

  • เลข 0 กำหนดตำแหน่งของข้อมูล ให้เริ่มในแนว column เดียวกันกับ Ref
  • เลข 1 คือ ความสูงของรายการข้อมูล ซึ่งต้องมีความสูงคงที่ 1 row เสมอ
  • เลข 3 คือ ความกว้างของรายการ ซึ่งประกอบด้วย Id, Name, Amount จึงกำหนดให้กว้าง 3 column คงที่

ส่วนของสูตร COUNTA($G:$G)-1 เป็นตัวช่วยกำหนดตำแหน่งรายการใหม่ต่อท้ายรายการเดิม โดย COUNTA($G:$G) จะนับจำนวนเซลล์ที่มีข้อมูลใน column G ทั้งหมด แต่เนื่องจากนับเซลล์คำว่า Id รวมเกินมา 1 เซลล์ จึงต้องลบ COUNTA($G:$G) ออกเสีย 1 ตำแหน่ง ทั้งนี้เพื่อให้ตรงกับจำนวน row ที่ต้องนับให้ถัดไปจากตำแหน่งของเซลล์ Ref

ดังนั้นสูตร Offset นี้ จึงทำหน้าที่ส่งรายการข้อมูลที่กรอกไว้ในตารางที่มีความสูง 1 rowและกว้าง 3 column จาก Range Name ชื่อ Source ไปยัง Target ซึ่งมีขนาดความสูงและความกว้างเดียวกัน เพียงแต่ Target จะขยับไปหาตำแหน่งรายการถัดไปจาก Ref ตามที่นับได้ด้วยสูตร CountA-1

“กำลังพิมพ์สลิปจ่ายเงินเดือนอยู่” เธอกำลังลอกข้อมูลจากตาราง Excel มาแปะลงไปในโปรแกรม Word แล้วพิมพ์ออกไปทีละใบ

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

งานลักษณะเดียวกันนี้เป็นงานที่ต้องใช้เป็นประจำ นอกจากใช้พิมพ์สลิปเงินเดือนที่ต้องทำทุกเดือน ยังมีงานพิมพ์ใบ Invoice ใบสั่งซื้อ ใบเสร็จรับเงิน ใบหักภาษี ณ ที่จ่าย ซึ่งต้องทำเป็นประจำทุกวัน ถ้าแต่ละวันต้องพิมพ์นับร้อยนับพันรายการ คนที่รับผิดชอบงานแบบนี้รับรองว่าต้องเครียดจัด และรู้สึกว่าเป็นงานที่น่าเบื่อมาก

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

เรื่องอะไรที่ยากควรปล่อยไว้ในส่วนของ Excel แล้วปล่อยเรื่องง่ายไว้ในส่วนของ VBA

จริงหรือไม่ที่ผู้ใช้ Excel แทบทุกคนมีพื้นฐานและถนัดเรื่อง Excel มากกว่าเรื่อง VBA ดังนั้นจึงไม่ใช่เรื่องยากที่จะเปิดแฟ้มขึ้นมาแล้วแก้ไขสูตรหรือหน้าตาตาราง แต่ถ้ายกทั้งสูตรและขั้นตอนการสร้างตารางไปไว้ในส่วนของ VBA ลองนึกดูว่า ถ้าวันหนึ่งต้องปรับปรุงแก้ไขรหัส VBA ขึ้นมา จะพบแต่รหัสอะไรก็ไม่รู้ยาวเหยียดหลายสิบบรรทัด ซึ่งไม่ใช่เรื่องง่ายเลยที่จะแก้รหัส VBA โดยเฉพาะอย่างยิ่งเมื่อคนที่ทำหน้าที่แก้ไขหรือใช้งาน ไม่ได้เป็นคนสร้างรหัสเหล่านั้น

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

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