VBA : Properties and Method of Ranges Lecturer : Kanjana Thongsanit
Properties Address คุณสมบัตินี้จะแสดง ที่อยู่ของ ตำแหน่งที่ระบุ เช่น “B2:C6” ถ้าเราต้องการที่จะให้โปรแกรม แสดงที่อยู่ ที่เราเลือก สามารถกำหนด เช่น MsgBox Range(“......”).address MsgBox Range("A1").Address MsgBox Range("B1:F1").Address MsgBox Range("A2:A19").Address MsgBox Range("B2:F19").Address Note : สิ่งที่ Property Address ส่งค่าคือ string
Properties Cells คุณสมบัตินี้จะใช้อ้างอิงแต่ละ Cell โดยที่จะ ใช้อ้างอิงในแต่ละ Cells ตัวอย่าง Range(“A1:A10”).Cells(3) หมายถึง เราต้องการระบุว่า คือ ลำดับที่ 3 ของ Cell ตั้งแต่ A1:A10 ดังนั้นถ้าอ้างแบบนี้จะหมายถึงช่องใน A3 Range(“A1:C10”).Cells(3,2) หมายถึง เราต้องการระบุว่า ข้อมูลตัวแรกคือ Row ตัวที่สอง คือ Column
Properties คำถาม Range(“A1:C10”).Cells(3,2) คือช่องใด Note : สิ่งที่ Property Cell ส่งค่าคือ object เราสามารถใช้ ในรูปนี้ได้ว่า Range(“A1:C10”).Cells(3,2).Value จะส่งค่าในช่อง B2
Properties Column จะส่งค่าของ เลขของ Column แรก ของ Range นั้นๆ โดย ที่ A คือ เลข 1, B คือ เลข 2 . . . เช่น MsgBox Range("B1:F1").Column จะส่งค่า เท่าไร
Properties CurrentRegion จะส่งค่าของขอบเขตของ พื้นที่ครอบคลุมสูงสุด ในรูป ของ สี่เหลี่ยม เช่น ถ้าเราต้องการหา CurrentRegion ของ Cell A3 ค่าที่ส่งจะ เป็น Object
Properties EntireColumn จะส่งค่าเป็น object โดยระบุcolumn ทั้งหมด ของข้อมูลที่กำหนด เช่น Range(“A1:C1”) จะครอบคลุมถึง A B C
Check 1 จงใช้ property Current Region เพื่อหา กรอบพื้นที่ของข้อมูล ข้างเคียง จงใช้ property EntireColumn เพื่อหา ว่า Range ที่กำหนด Range(“A1:N5”) ครอบคลุม Column อะไรบ้าง
Properties เช่น Range(“A1:D1”).Font.Bold = True Font จะอ้างอิงถึง Font โดยที่ property ของ Font ของ Range นั้น สามารถเปลี่ยนแปลงได้ เช่น (Name, Bold , Italic ) เช่น Range(“A1:D1”).Font.Bold = True MsgBox Range("A1").Font.Name Formula จะส่งสูตร ที่ใช้ใน Range นั้น ๆ เช่น MsgBox Range("F21").Formula
Properties FormulaR1C1 สามารถกำหนด ได้ดังนี้
Properties FormulaR1C1
Properties HorizontalAlignment จะส่งค่า ของการกำหนด แนวของข้อมูลเช่น ชิดซ้าย xlRight ชิดขวา xlLeft อยู่ตรงกลาง xlCenter เช่น Range("A1").HorizontalAlignment = xlLeft
Properties Interior เป็นการกำหนดสีภายในพื้นที่ Range Range("A1").Interior.Color = vbRed Name เป็นการตั้งชื่อ Range โดยใช้ Name Range(“A1”) .Name = “Test” NumberFormat Range(“C3:C10”) .NumberFormat = “#,##0.00” Value Value เป็น Default property Range(“A1”).Value เหมือนกับ Range(“A1”)
Method Clear เป็นการลบข้อมูล และรูปแบบ ใน range ClearContents เป็นการลบแต่จะลบเฉพาะข้อมูล ไม่ได้ลบรูปแบบของ range ดังนั้น ขนาดของ font การจัด รูปแบบที่ให้อยู่ด้านซ้าย หรือด้านขวา ก็จะยังคงอยู่เหมือนเดิม Copy เป็นคำสั่งในการสำเนา range โดยจุดที่วาง จะระบุ โดย Destination := Range(“E1:F10”) ถ้าเราต้องการ Copy ข้อมูลจาก A1:B10 to E1:F10 Range(“A1:B10”).Copy Destination := Range(“E1:F10”)
Method เหมือนที่เราใช้ คำสั่ง Copy ใน Excel ดังตัวอย่าง PasteSpecial เป็นการวางแบบ พิเศษ เหมือนที่เราใช้ คำสั่ง Copy ใน Excel ดังตัวอย่าง
Method โดยปกติเราสามารถเลือก Values ในกรณีเราต้องการ Copy เฉพาะค่า ใน VBA สามารถระบุคำสั่งได้ดังนี้
Method Copy ด้วย คำสั่ง ของ VBA Range(“B3:D12”).Copy Range(“F3:H12”).PasteSpecial Paste := xlPasteValues Select เป็นการเลือก range ซึ่งก็เหมือนกับ การ เลือก hightlight ที่ range นั้น ๆ
Method Sort การ Sort โดยปกติใน Excel กระทำโดย
Method Range(“F2:H12”).Sort Key1:= Range(“F3”), Order1:= xlAscending, Header := xlYes
Check 2 ใช้ code VBA ที่หน้าจอ RC สร้างเลขสุ่ม ที่ Cell A1: E10 Set ข้อมูล ให้เป็นตัวหนา ตั้งชื่อ Cell ว่า Random Set เลขชิดด้านขวา Set รูปแบบ เป็นทศนิยม 3 ตำแหน่ง สร้างสูตรหาผลรวม ที่ cell A12 สร้าง Copy cell A12 ไปที่ cell B12,C12,D12,E12
การระบุ Ranges โดยใช้ VBA ระบุที่อยู่ Address Range(“A1”) Range(“A1:B10”) ระบุ ชื่อ Range หรือ (Range name) Range(“Sales”)
การระบุ Ranges โดยใช้ VBA SalesName = Range(“Sales”).Name การอ้างเนื่องจาก SalesName เป็น string Range(SalesName)
การระบุ Ranges โดยใช้ VBA ระบุตัวแปรในรูปของ object Dim SalesRange as Range Set SalesRange = Range(“Sales”) เนื่องจากตอนนี้ SalesRange เป็น object ดังนั้น สามารถ กำหนด property ให้กับ object ได้ SalesRange.Font = 12
การระบุ Ranges โดยใช้ VBA การระบุ Range โดยใช้ Cell Range(“B5:B14”).Cells(3) Range(“C5:E15”).Cells(4,2) การระบุ Range โดยใช้ Offsets
การระบุ Ranges โดยใช้ VBA การระบุ Range โดยใช้ Offsets (ต่อ) Range(“A5”).Offset(2,3) การอ้างอิงจะระบุ (Row, Column) ดังนั้นหมายความว่า จาก Cell A5 ไปด้านขวา 2 cells ไปด้านล่าง 3 cells Range(A5).Offset(0,3) หมายความว่าอ้างอิง ที่ D5
การระบุ Ranges โดยใช้ VBA Range(Range(“A1”),Range(“D12”)) ซึ่งก็คือ A1:D12
การระบุ Ranges โดยใช้ VBA โดยใช้ กับ With construction With Range(“A1”) Range(.Offset(1,1), .Offset(3,3)).Select End With กรณีนี้ใช้เมื่อเรารู้ว่าข้อมูลอยู่ระหว่าง Cell ได้
การระบุ Ranges โดยใช้ VBA การระบุโดยใช้ End property ถ้าเราไม่ทราบว่าข้อมูลมีขนาดเท่าไร แต่ต้องการให้ระบุว่าข้อมูลมีอยู่ถึง Row หรือ Column ใน Excel สามารถทำได้โดย ด้าน Column เลือก Cell ที่ มุมข้อมูลบนซ้าย กด Shift ค้าง แล้วกด End กับลูกศร ลง ละกด End พร้อมกัน ด้าน Row เลือก Cell ที่ มุมข้อมูลบนซ้าย กด Shift ค้าง แล้วกด End กับลูกศร ด้านขวา ละกด End พร้อมกัน
การระบุ Ranges โดยใช้ VBA การระบุโดยใช้ End Property ใน VBA การกำหนด ทิศทาง จะมีค่าคงที่ที่ VBA สร้างขึ้น เช่น xlDown, xlUp, xlToRight With Range(“B4”) Range(.Offset(0,0), .End(xlDown).End(xlToRight)).Select End With ที่ Offset(0,0) ก็คือที่ Cell B4
Sub range 5 : Sub Range5() Range("B2:F19").Name = "ScoreData” MsgBox Range("ScoreData").Cells(2, 3).Address MsgBox Range(Range("ScoreData").Cells(2, 2), Range("ScoreData").Cells(3, 4)).Address With Range("ScoreData") MsgBox Range(.Cells(2, 2), .Cells(3, 4)).Address End With ‘ Continue-----------
Sub rangE 5 : Dim scoreRange As Range Set scoreRange = Range("ScoreData") With scoreRange MsgBox Range(.Cells(2, 2), .Cells(3, 4)).Address End With End sub
Sub rangE 6 : ‘ Continue----------- Sub Range6() With Range("A1") Range(.Offset(0, 1), .End(xlToRight)).Name = "ScoreNames" Range(.Offset(1, 0), .End(xlDown)).Name = "EmployeeNumbers" Range(.Offset(1, 1), .End(xlDown).End(xlToRight)).Name = "ScoreData" End With Dim nScores As Integer, nEmployees As Integer ‘ Continue-----------
Sub rangE 6 : With Range("A1") nScores = Range(.Offset(0, 1), .End(xlToRight)).Columns.Count MsgBox "There are " & nScores & " scores for each employee.", vbInformation, _ "Number of scores“ nEmployees = Range(.Offset(1, 0), .End(xlDown)).Rows.Count MsgBox "There are " & nEmployees & " employees in the data set.", vbInformation, _ "Number of employees" Range(.Offset(0, 0), .Offset(nEmployees, nScores)).Name = "EntireDataSet“ MsgBox "The entire data set is in the range " & Range("EntireDataSet").Address, _ vbInformation, "Data set address“ End With
Sub rangE 6 : Dim nm As Object For Each nm In ActiveWorkbook.Names nm.Delete Next End Sub
Sub rangE 7 : Sub Range7() With Range("A1:F19") .Rows(12).Select MsgBox "12th row of data range has been selected." .Rows(12).EntireRow.Select MsgBox "Entire 12th row has been selected." .Columns(4).Select MsgBox "4th column of data range has been selected." .Columns(4).EntireColumn.Select MsgBox "Entire 4th column has been selected." End With
Sub rangE 7 : Rows("4:5").Select MsgBox "Another way to select columns." Columns("D:E").Select End Sub
Assignment Assignment : Sub range 8-10 2. อธิบาย Code