บทที่ 6 การใช้คำสั่ง อ. สุรินทร์ทิพ ศักดิ์ภูวดล สำนักวิชาเทคโนโลยีสารสนเทศและ การสื่อสาร
การใช้คำสั่ง Left, Right, Trim …
คำสั่งในบทเรียน Left(ActiveCell, n) ให้อ่านค่าทางด้านซ้าย มา n ตำแหน่ง ( รวมช่องว่าง ) Right(ActiveCell,n) ให้อ่านค่าทางด้านขวา มา n ตำแหน่ง ( รวมช่องว่าง ) Trim(String) ตัดช่องว่างทั้งซ้ายและขวาของ String ออก ส่วนคำสั่ง อื่นๆ อยู่ใน File Visual Basic. Net_01.pdf
ให้นิสิต บันทึกข้อมูลใน Excel ตาม ภาพ
ให้นิสิต Copy คำสั่งแล้วไปสร้าง Procedure ชื่อ Setsubtotal Sub SetSubTotal() Range("B3").Select Do While Not IsEmpty(ActiveCell.Value) ProductCode = Left(ActiveCell.Value, 3) BeginCell = ActiveCell.Offset(0, 1).Address Do While ProductCode = Left(ActiveCell.Value, 3) ActiveCell.Offset(1, 0).Select Loop Selection.EntireRow.Insert ActiveCell.Value = "Total" LastCell = ActiveCell.Offset(-1, 0).Address DataRange = BeginCell & ":" & LastCell ' ActiveCell.Offset(0, 1).Value = "=Sum(" & DataRange & ")" ActiveCell.Offset(0, 1).Formula = "=Sum(" & DataRange & ")" '''' มีผลลัพธ์เท่ากับ ActiveCell.Offset(0, 1).Value = "=Sum(" & DataRange & ")" ActiveCell.Offset(1, 0).Select Loop End Sub
แบบฝึกหัด 6.1 หลังจาก Run Program แล้วจะได้ผลลัพธ์ ดังภาพ จากนั้นให้นิสิตศึกษาโปรแกรมหา ผลลัพธ์ย่อยโดยแยกตามกลุ่ม รหัสสินค้า ดังนี้
แบบฝึกหัด 6.2 ให้นิสิตทำแบบฝึกหัด 10 นาที ให้ได้ตามคำสั่ง ให้นิสิตหา Grandtotal คือผลรวมทั้งหมด ให้กำหนดสีตามต้องการ ในตำแหน่งของ Subtotal และ Grandtotal
การลบ Subtotal ในการเขียนโปรแกรมในชีวิตจริง เราสามารถ Run Program ได้หลายครั้ง ซึ่งในการ Run Program ใหม่นั้น เราต้องการการคำนวณใหม่ที่ ถูกต้อง ซึ่งอาจจะต้องลบ Subtotal, Grand Total เดิมออกก่อนจากนั้นจึงทำการเริ่มคำนวณ ใหม่อีกครั้ง
ตัวอย่างคำสั่งลบ Subtotal และ Grand Total Sub deletetotal() Range("B3").Select Do While Not IsEmpty(ActiveCell.Value) If (ActiveCell.Value = "Subtotal" Or ActiveCell.Value = "Grand Total") Then Selection.EntireRow.Delete ActiveCell.Offset(-1, 0).Select End If ActiveCell.Offset(1, 0).Select Loop End Sub
แบบฝึกหัด 6.3 ให้นิสิตนำผลลัพธ์จาก แบบฝึกหัด 6.2 มาเพิ่มการทำงานให้ สามารถทำงานได้อย่างสมบูรณ์ในการ คำนวณหลายครั้งโดยศึกษาว่าจะเพิ่ม Procedure deletetotal ในส่วนใดของ โปรแกรม เพื่อให้โปรแกรมสามารถทำงานดังนี้ 1. ลบบรรทัดของ Subtotal และ Grand Total ออกก่อนทำการคำนวณใหม่ ทุกครั้ง 2. ทำการคำนวณใหม่ให้ได้ผลลัพธ์ ตาม แบบฝึกหัด 6.2
การใช้คำสั่ง IsEmpty(ActiveCell.Value) ค่าของ Cell ที่กำลังทำงานนั้น เป็นค่าว่าง Do While Not IsEmpty(ActiveCell.Value) ทำในขณะที่ ค่าของ Cell ที่กำลังทำงานนั้น เป็นค่า ไม่ว่าง ( คือ มีข้อมูลใน Cell) หรือ ทำในขณะที่ ค่าของ Cell ที่กำลังทำงานนั้น มี ข้อมูลใน Cell Do While ActiveCell.Address <> ตัวแปร Cell ทำในขณะที่ ตำแหน่งที่ทำงานนั้น ไม่ใช่ ตัวแปร Cell ( ใน ex_6.5)
การกำหนด Border ให้กับ Total จากแบบฝึกหัด 6.3 มีข้อมูลดังนี้
Sub FormatTotal() Range("B3").Select Do While Not IsEmpty(ActiveCell.Value) If ActiveCell.Value = "Subtotal" Or ActiveCell.Value = "Grand Total" Then Range(Selection, Selection.End(xlToRight)).Select With Selection.Font.Name = "Arial".FontStyle = "Bold".Size = 12 End With With Selection.Borders(xlEdgeTop).LineStyle = xlContinuous.Weight = xlThin.ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeBottom).LineStyle = xlDouble.Weight = xlThick.ColorIndex = xlAutomatic End With End If ActiveCell.Offset(1, 0).Select Loop End Sub
แบบฝึกหัด 6.4 ให้เพิ่ม Procedure FormatTotal() ลงใน แบบฝึกหัด 6.3 Run Program ให้ได้ลัพธ์ดังนี้
การ Copy ข้อมูลลงในช่องว่าง แบบฝึกหัดสำหรับนิสิตศึกษาด้วยตนเอง เริ่มการทำงานจาก File Excel จากการแสดงข้อมูลดังกล่าว เป็น การแสดงข้อมูลที่นิยมจัดหมวดหมู่สินค้าชนิดเดียวกันให้ติดกัน ซึ่งสามารถแสดงข้อความ “ กลุ่มสินค้า ” เพียงข้อความบรรทัด เดียวได้ รูปแบบที่นิยม ดูง่าย สบายตาตามความคิด ของอาจารย์ค่ะ
แบบฝึกหัด 6.5 ให้สร้าง Procedure CopyData() จากตัวอย่างการแสดงข้อมูลใน Excel ก่อน หน้านี้หากผู้จัดทำรายงานมีความประสงค์ที่จะ แสดงรายละเอียดกลุ่มสินค้าทุกบรรทัด ผู้พัฒนา สามารถเขียนคำสั่งดังตัวอย่างๆ ในหน้าต่อไป ซึ่งอาจนำไปประยุกต์ให้เข้ากับการแสดงข้อมูล ในลักษณะอื่นได้ตามความเหมาะสม ซึ่งใน บางครั้งรูปแบบรายงานอาจขึ้นกับความต้องการ ของผู้ใช้งานด้วย
ตัวอย่างโปรแกรม Sub CopyData() Range("C3").Select Selection.End(xlDown).Select ActiveCell.Offset(1, -1).Select EndCell = ActiveCell.Address Range("B3").Select Code = ActiveCell.Value ActiveCell.Offset(1, 0).Select Do While ActiveCell.Address <> EndCell If IsEmpty(ActiveCell.Value) Then ActiveCell.Value = Code Else Code = ActiveCell.Value End If ActiveCell.Offset(1, 0).Select Loop End Sub
จากการ Run Procedure CopyData() จะได้ผลลัพธ์ดังนี้
หนังสืออ้างอิง เรียนลัด VBA บน Excel, วิศัลย์ พัวรุ่งโรจน์ Excel VBA Programming, วิชา ศิริธรรมจักร์ และสุรเชษฐ์ วงศ์ชัยพรพงษ์