การเลื่อน Cell และคำสั่งใน Macro บทที่ 2 การเลื่อน Cell และคำสั่งใน Macro อ.สุรินทร์ทิพ ศักดิ์ภูวดล สำนักวิชาเทคโนโลยีสารสนเทศและการสื่อสาร
VBA และ Macro VBA (Visual Basic for Application) เป็นเครื่องมือที่ใช้พัฒนา Application ใน Microsoft Office โดยใช้ภาษา Visual Basic แมโคร (Macro) เป็นสามารถบันทึกการทำงานที่เกิดขึ้นจริงก่อน แล้วจึงเรียกมาใช้งานภายหลัง ซึ่งโปรแกรมจะสร้างคำสั่งเป็นภาษา VBA ให้อัตโนมัติ โดยสามารถแก้ไขเพิ่มเติมคำสั่งได้ Form การทำงานในรูปแบบที่เป็น Graphic มากขึ้นสามารถใช้ Form มารับค่าต่างๆ และนำไปประมวลผล และนำมาจัดการกับ Cell ต่างๆใน Excel ได้ ซึ่งภาษาที่ใช้พัฒนา Application คือ VBA โดยผู้พัฒนาสามารถเขียนคำสั่งเองทั้งหมด
โพรซีเยอร์ (Procedures) เป็นชุดคำสั่งที่ควบคุมการทำงานใน Application แบ่งเป็น 2 ชนิดคือ 1. ซับโพรซีเยอร์ (Sub Procedure) 2. ฟังก์ชันโพรซีเยอร์ (Function Procedure) การบ้านให้ไปหาว่า 1. ซับโพรซีเยอร์ (Sub Procedure) และ ฟังก์ชันโพรซีเยอร์ (Function Procedure) ต่างกันอย่างไร
การไปที่รายการถัดไป การไปที่รายการแบบ Absolute คือการไปที่ Cell เดิมเสมอไม่ว่าจะ Run Macro กี่ครั้ง การไปที่รายการแบบ Relative คือการไปที่ Cell หรือบรรทัดถัดจากข้อมูลที่มีอยู่ในการ Run Macro
ให้นิสิตดูขั้นตอนการสร้าง Macro
ขั้นตอนการไปแบบ Absolute 1. Click Mouse ที่cell A1 2. Click ปุ่ม Record Macro 3. ตั้งชื่อ Macro “ AbsoluteMove” > OK 4. Click Mouse ที่ B2 5. กด End > กด ลูกศรเลื่อนลง 6. ไม่เลือก Relative Reference (กำหนดการไปแบบ Absolute) 7. กดลูกศรลงอีกครั้ง 8. Stop Recording 9. สร้างปุ่มให้ Macro เลือก Macro ชื่อ AbsoluteMove
ขั้นตอนการไปแบบ Relative 1. Click Mouse ที่cell A1 2. Click ปุ่ม Record Macro 3. ตั้งชื่อ Macro “ RelativeMove” > OK 4. Click Mouse ที่ B2 5. กด End > กด ลูกศรเลื่อนลง 6. เลือก Relative Reference (กำหนดการไปแบบ Relative ) 7. กดลูกศรลงอีกครั้ง 8. Stop Recording 9. สร้างปุ่มให้ Macro เลือก Macro ชื่อ RelativeMove
การ Copy ผลรวมไปไว้ด้านล่าง 2 บรรทัด (1) บันทึกข้อมูลใน Excel ตามหน้าจอ
การ Copy ผลรวมไปไว้ด้านล่าง 2 บรรทัด (2) ขั้นตอน 1. Click Mouse ที่cell A1 2. Click ปุ่ม Record Macro 3. ตั้งชื่อ Macro “ CopyFormula” > OK 4. กำหนดการทำงานให้เป็นแบบ Absolute (นั่นคือไม่เลือกปุ่ม Relative Reference ) 5. Click Mouse ที่ B2 6. กด End > กด ลูกศรเลื่อนลง 7. เลือก Relative Reference (กำหนดการไปแบบ Relative ) 8. กด Shift ค้างไว้ + กด End + กด ลูกศรไปทางขวา จากนั้นปล่อย Shift 9. กด Ctrl + c 10. กดลูกศรลง 2 ครั้ง 11. Click เมนู Edit > Past Special.. > Value > OK 12. กด Esc > Click ยกเลิกการเลือก Relative Reference (กำหนดการไปแบบ Absolute ) > Click Mouse ไปที่cell A1 13. Stop Recording 14. สร้างปุ่มให้ Macro เลือก Macro ชื่อ CopyFormula
การ Copy ผลรวมไปไว้ด้านล่าง 2 บรรทัด (3) การทดสอบ Macro แบบที่ 1 1. ให้ลบข้อมูล Cell B8:F8 แล้วกดปุ่ม Copy Formula จะพบว่า Cell B8:F8 กลับมาเหมือนเดิม การทดสอบ Macro แบบที่ 2 1. ให้แทรกรายการเช่น ค่าอาหาร ค่าที่พัก แล้วค่าใช้จ่ายรวมจะคำนวณใหม่ 2. ลบ Cell B10:F10 ตามรูป 3. กดปุ่ม Copy Formula จะพบว่า Cell B10:F10 กลับมาเหมือนเดิม โดยจะเป็นค่าที่ถูกคำนวณขึ้นมาใหม่โดยเป็นค่าใช้จ่ายรวมที่ถูกต้อง
คำสั่งใน Excel Range(“Cell”).Select คือ เลือกช่วงของ Cell เช่น Range(“B2”).Select Range(“A1,A2,B1,B2”).Select Rang(“A1:D1”).Select
ให้นิสิตเริ่มทำความเข้าใจคำสั่งที่ Macro สร้างขึ้น และให้ดูว่าคำสั่งต่อไปนี้เป็นคำตอบของแบบฝึกหัดใด 1. Range("B2:H4").Select 2. Range("B2").Select 3. Range("B2,D2,D4,F2,H2").Select Range("H2").Activate
แบบฝึกหัด 1 1. Click Mouse ที่cell A1 2. Click ปุ่ม Record Macro 3. ตั้งชื่อ Macro “ Rang_01” > OK 4. Click Mouse ที่ B2 5. Stop Recording 6. ให้ดูคำสั่งแล้วเติมคำตอบ
แบบฝึกหัด 2 1. Click Mouse ที่cell A1 2. Click ปุ่ม Record Macro 3. ตั้งชื่อ Macro “ Rang_02” > OK 4. Click Mouse ที่ B2 5. กด Ctrl แล้วเลือก D2, D4,F2, H2 6. Stop Recording 7. ให้ดูคำสั่งแล้วเติมคำตอบ
แบบฝึกหัด 3 1. Click Mouse ที่cell A1 2. Click ปุ่ม Record Macro 3. ตั้งชื่อ Macro “ Rang_03” > OK 4. Click Mouse ที่ B2 5. กด Shift แล้วเลือก B2 ถึง H4 6. Stop Recording 7. ให้ดูคำสั่งแล้วเติมคำตอบ
ให้นิสิตทำแบบฝึกหัดและสังเกตุคำสั่งที่เกิดขึ้น และดูความหมายของคำสั่ง
การเลื่อน Cell แบบ Absolute (Macro1) 1. Range("C11").Select เริ่มเลือกที่ Cell C11 2. Selection.End(xlDown).Select กด End แล้วกด Down 1 ครั้ง 3. Range("C14:D14").Select เลือกใน Mode Absolute โดย (กด Ship + >) ความหมายของโปรแกรมคือเลือกเท่านั้น เหตุการณ์ในการทำงาน 1. ไปที่ A1 2. Record Macro (Macro1) 3. เริ่มต้นเลือกที่ Cell C11 4. กด End แล้ว กดลูกศรลง 5. กด Ship + ลูกศรไปทางขวา (เลือก Cell C14:D14) 6. Stop Recording
การเลื่อน Cell แบบ Absolute (Macro2) Range("C11").Select Selection.End(xlDown).Select Range(Selection, Selection.End(xlToRight)).Select เหตุการณ์ในการทำงาน 1. ไปที่ A1 2. Record Macro (Macro2) 3. เริ่มต้นเลือกที่ Cell C11 4. กด End แล้ว กดลูกศรลง 5. กด Ship + End + ลูกศรไปทางขวา 6. Stop Recording
การเลื่อน Cell แบบ Relative (Macro3) Range("C11").Select Selection.End(xlDown).Select ActiveCell.Range("A1:B1").Select เหตุการณ์ในการทำงาน 1. ไปที่ A1 2. Record Macro (Macro3) 3. เริ่มต้นเลือกที่ Cell C11 4. กด End แล้ว กดลูกศรลง ทำให้ ActiveCell อยู่ที่ C14 5. เลือก Relative Reference 6. กด Ship + ลูกศรไปทางขวา (เลือก Cell C14:D14) 7. Stop Recording
การเลื่อน Cell แบบ Relative (Macro4) Range("C11").Select Selection.End(xlDown).Select Range(Selection, Selection.End(xlToRight)).Select เหตุการณ์ในการทำงาน 1. ไปที่ A1 2. Record Macro (Macro4) 3. เริ่มต้นเลือกที่ Cell C11 4. กด End แล้ว กดลูกศรลง ทำให้ ActiveCell อยู่ที่ C14 5. เลือก Relative Reference 6. กด Ship +End+ ลูกศรไปทางขวา (เลือก Cell C14:D14) 7. Stop Recording
การเคลื่อนย้ายไปยัง Cell ที่ว่างหลังข้อมูลแบบ Relative Sub GotoNewCellRelative() Range("B2").Select Selection.End(xlDown).Select ActiveCell.Offset(1, 0).Range("A1").Select End Sub เหตุการณ์ในการทำงาน 1. ไปที่ A1 2. Record Macro (GotoNewCellRelative) 3. เริ่มต้นเลือกที่ Cell B2 4. กด End แล้ว กดลูกศรลง ทำให้ ActiveCell อยู่ที่ B6 5. เลือก Relative Reference 6. เลื่อนลูกศรลงอีกครั้ง 7. Stop Recording
การเคลื่อนย้ายไปยัง Cell ที่ว่างหลังข้อมูลแบบ Absolute Sub GotoNewCellAbsolute() Range("B2").Select Selection.End(xlDown).Select Range("B7").Select End Sub ขั้นตอนในการทำงาน 1. ไปที่ A1 2. Record Macro (GotoNewCellAbsolute) 3. เริ่มต้นเลือกที่ Cell B2 4. กด End แล้ว กดลูกศรลง ทำให้ ActiveCell อยู่ที่ B6 5. เลือก Relative Reference เพื่อยกเลิก (เพราะต้องการให้เป็น absolute แต่ถ้าเป็น Absolute อยู่ก่อนแล้ว คือปุ่มนั้นไม่ได้เลือกอยู่ก่อนแล้วให้ข้ามไปไม่ต้องเลือกอะไรเลย) 6. เลื่อนลูกศรลงอีกครั้ง 7. Stop Recording
สรุปคำสั่ง Activecell = Cell ที่กำลังทำงานอยู่ Activecell.offset(1,0).Range(“A1”).Select เป็นคำสั่งให้กระโดดไปแบบ Relative โดยที่ใน (1,0) หมายถึง ให้เลื่อนไป 1 Row 0 Column จากที่ Activecell ตำแหน่ง(Row,Column) Row เป็นบวก จะเลื่อนลง Row เป็นลบ จะเลื่อนขึ้น Column เป็นบวก จะเลื่อนไปทางขวามือ Column เป็นลบ จะเลื่อนไปทางซ้ายมือ นั่นคือ ถ้าตัวเลขเป็นบวก จะเป็นการเลื่อนลง หรือไปทางขวามือ ถ้าตัวเลขเป็นลบ จะเป็นการเลื่อนขึ้นหรือไปทางซ้ายมือ
สรุปคำสั่ง กดปุ่ม End แล้วกดปุ่มลูกศรลง - Selection.End(xlDown).Select - Selection.End(xlUp).Select กดปุ่ม End แล้วกดปุ่มลูกศรไปทางขวา - Selection.End(xlToRight).Select กดปุ่ม End แล้วกดปุ่มลูกศรไปทางซ้าย - Selection.End(xlToLeft).Select
สรุปคำสั่ง คำสั่งบอกตำแหน่ง Cell ActiveCell.Address
หนังสืออ้างอิง เรียนลัด VBA บน Excel, วิศัลย์ พัวรุ่งโรจน์ Excel VBA Programming, วิชา ศิริธรรมจักร์ และสุรเชษฐ์ วงศ์ชัยพรพงษ์