นักเรียนคอร์ส เปลี่ยนงานถึกเป็นงานเทพด้วย Excel VBA (ZOOM) ถามเข้ามา
“อาจารย์ ช่วยไกด์ให้หน่อยได้มั้ยคะ ว่าโจทย์นี้ต้องทำอย่างไร”
ตอบ: โจทย์นี้ ทำได้ 3 วิธี เรียงจากง่ายไปยาก (ตามความคิดของผมนะครับ)
1) ใช้ Power Query ทำ UnPivot เลย แล้วค่อยมาเติมจำนวนให้เป็น 1 เอาเอง
2) VBA loop ก้อปปี้ค่าไปวางตามจำนวนได้เลย
3) เขียนสูตร…ก็จะต้องมีคอลัมน์ช่วย ก็จะมีหลายขั้นตอนสักหน่อย
เลือกแบบไหนดีครับ?
“เป็น VBA ดีกว่าค่ะ อยากฝึกใช้งาน VBA ที่เรียนมาด้วยค่ะ เดี๋ยวขอลองเองก่อนค่ะ”
วันนี้เลยเอางานที่ถามนั้น มาเขียนโค้ด ให้ดูกันครับ
อย่างที่บอกงานนี้ง่ายกว่าการเขียน สูตรเยอะเชียว
งานนี้ใช้แค่ 9-10 บรรทัดเองครับ
👉 #โจทย์คือ…
- มีรายการสินค้าในคอลัมน์ B
- แล้วมี ปริมาณของแต่ละสินค้าในคอลัมน์ C
- แล้วอยากสร้างตารางทางขวาให้มีจำนวนบรรทัดของสินค้าแต่ละรายการตามปริมาณสินค้า
- แล้วให้ใส่เลข 1 แทนลงใจคอลัมน์ปริมาณสินค้า
👉 #งานลักษณะนี้มีแนวคิดคือ…..
- loop ไปที่ตารางสินสินค้า
- ระหว่าง Loop ก็ เก็บค่าปริมาณสินค้าในคอลัมน์ C เข้าตัวแปร เพื่อเอาไปใช้ต่อในการกำหนดจำนวนบรรทัด
- จากนั้นก็ Copy ข้อมูลทีละบรรทัดไปวางที่ตารางทางขวา โดยต้องหาตำแหน่ง TargetRow ให้ทุกรอบการ Loop
- และในการวาง แทนที่จะวางทีละ 1 บรรทัด ก็ให้กำหนดช่วงตามจำนวนบรรทัด แล้ววางลงในคราวเดียวเลย.
- แล้วสุดท้ายก็ ใส่จำนวน 1 ลงในคอลัมน์ ปริมาณ
- เป็นอันว่าเสร็จพิธี ครับ 🙂
👉 #แนวคิดในการเขียนโค้ด ( Office Automation ด้วย Excel VBA)
- 1) Loop ไปที่ตารางรายการสินค้า
- 2) สร้างตัวแปร 3 ตัวคือ…
- 1) ตัวแปร i Type Long, รับค่าบรรทัดเพื่อการ Loop
- 2) ตัวแปร ProdQTY as long รับค่าปริมาณของสินค้าแต่ละรายการ
- 3) ตัวแปร MyTargetRow รับค่าตำแหน่งที่จะวางข้อมูล
- 3) ระหว่าง loop
- 3.1 ให้เช็คว่า เก็บค่าปริมาณสินค้าไว้ในตัวแปร ProdQTY
- 3.2 Copy บรรทัดที่ Loop ไปวางโดยมีตำแหน่งเท่ากับ MyTargetRow ถึง MyTargetRow + ProdTQY- 1
- 3.3 แล้วเติมค่า 1 ลงในคอลัมน์ปริมาณ (๋J) เท่ากับตำแหน่งที่ Paste ข้อมูล
** ด้วย Code เพียง 8-9 บรรทัด เราก็สามารถสั่งให้ Excel ทำงานแทนเราได้แล้ว **
👉 ได้โค้ดง่าย ๆ แบบนี้
Sub GenerateRowsByProdQTY()
Dim i As Long, ProdQty As Long, MyTargetRow As Long
For i = 8 To Range(“B” & Rows.Count).End(xlUp).Row
ProdQty = Range(“C” & i).Value
MyTargetRow = Range(“I” & Rows.Count).End(xlUp).Row + 1
Range(“B” & i, “F” & i).Copy
Range(“I” & MyTargetRow, “I” & MyTargetRow + ProdQty – 1).PasteSpecial xlPasteValuesAndNumberFormats
Range(“J” & MyTargetRow, “J” & MyTargetRow + ProdQty – 1).Value = 1
Next i
End Sub
👉 เราสามารถใช้VBAช่วยแก้ปัญหางานที่เยอะ ๆ ยาก ๆ น่าเบื่อ เสียเวลาเยอะ ๆ เหมือนทำไม่มีวันเสร็จ ให้เสร็จได้ในเวลาเพียงไม่ถึง 1 วินาที
งาน VBA ลักษณะนี้เป็นงานที่ช่วยเพิ่ม Productivity ให้กับเราได้เป็นอย่างมาก ที่สำคัญมันใช้เพียงความรู้ VBA ในระดับเบื้องต้น เท่านั้น
ลองศึกษา และฝึกใช้งาน Excel VBA กันดูนะครับ แล้วจะรู้ว่าชีวิตดีขึ้นมากมาย
ขอให้สนุกกับการเรียน และใช้งาน Excel VBA ครับ
👉 #สำหรับผู้ที่สนใจเรียนVBA สำหรับงาน Office Automation
- ทั้งสำหรับผู้ที่จริงจัง อยากเรียน VBA เพื่อเอาไปใช้งาน
- หรือ คุณเป็นคนที่อยากหนีตายเพราะเบื่องาน Excel แบบถึก ๆ
- หรือ เป็นคนที่มุ่งมั่น อยากพัฒนา ยกระดับความสามารถ ขีดมาตรฐานใหม่ให้กับงานของตัวเอง
มาเจอกันครับ มาเรียนรู้ และฝึกใช้งาน VBA จริง ๆ จัง ๆ กัน
รีบสมัครมาได้เลย!!!
👉 ทักมาคุยกันก่อนที่ m.me/excelbypichart หรือ โทร. 099-084-2562
🔸 ปูพื้นฐานการเขียนโค้ด VBA ตั้งแต่เริ่ม ไม่ต้องมีพื้นฐาน Coding มาก็เรียนรู้เรื่อง และจะเขียนโค้ดเองได้ ไม่ใช่การบันทึก macro แล้วปรับ ๆ แก้ ๆ แต่เรียนเขียนโค้ด VBA จริง ๆ
🔸 เรียนจบมี…
- มี Certificate
- รับเข้ากลุ่มปิด Facebook เพื่อพูดคุยสอบถามเรียนรู้เพิ่มเติม
- สามารถชมคลิปการเรียนย้อนหลังได้ตลอดเวลา
🔸 รับจำนวนจำกัด เพียง 10 คน
🔸 คอร์สนี้ต้องใช้เวลาเรียน 2 วันเต็ม ๆ
🔸 สอนด้วย ZOOM
– นั่งเรียนที่บ้านไม่ต้องเดินทางให้เสียเวลา
– คนอยู่ต่างจังหวัดก็เรียนได้
👉 ติดต่อสอบถามเนื้อหาเพิ่มเติม หรือสมัครได้ที่ลิงค์นี้ m.me/excelbypichart หรือ โทร. 099-084-2562
————//————
อ.ชาติ
Learn Excel With Pichart
Smart Excel For Better LIFE