การเลือกเซลล์ ด้วย Excel VBA
การเลือกเซลล์ ด้วย VBA ถ้ารู้ว่าจะเลือกเซลล์อะไร หรือ เซลล์อะไรถึงอะไร ก็ไม่ยาก ใช้ Range มาช่วย ดังนี้
ต้องการเลือกเซลล์ B3
Sub example1()
Sheets("Sheet1").Range("B3").Select
End Sub
หรือ
Sub example2()
Sheets("Sheet1").Cells(3, 2).Select
End Sub
หมายเหตุ
Sheets("Sheet1").Cells(3, 2) คือ เซลล์แถวที่ 3 คอลัมน์ที่ 2 ของ Worksheet1
ต้องการเลือกเซลล์ A2:B8
Sub example3()
Sheets("Sheet1").Range("A2", "B8").Select
' หรือ
' Sheets("Sheet1").Range(Cells(2, 1), Cells(8, 2)).Select
End Sub
แต่ถ้าต้องการเลือกจำนวนเซลล์โดยขึ้นอยู่กับตัวแปร ว่าจะเลือกกี่เซลล์ลงมา อย่างนี้ ต้องใช้อีกแบบหนึ่ง เช่น
คำสั่ง:
ให้เลือกบริเวณตั้งแต่เซลล์ C2 ลงมา 4 เซลล์ และไปทางขวาอีก 1 คอลัมน์
Sub example4()
Dim numOfCells As Byte
numOfCellsDown = 4
Sheets("Sheet1").Select
Range(Cells(2, 3), Cells(2 + (numOfCellsDown), 3 + 1)).Select
End Sub
จะได้ดังภาพ
การเลือกช่วงเซลล์และคัดลอกไปอีก Sheet หนึ่ง
Sub example5()
Sheets("Sheet1").Select
Range("B4:C9").Select
Selection.Copy
Sheets("Sheet2").Select
Range("A4").Select
ActiveSheet.Paste
End Sub
การเลือกเซลล์โดยยึดเซลล์ที่กำหนด
การเลือกลักษณะนี้สามารถใช้ คำสั่ง Offset มาใช้งานได้
คำสั่ง:
ให้เลือกเซลล์ที่ห่างจากเซลล์ B4 ไปทางขวา 1 เซลล์ และลงมาด้านล่าง 3 เซลล์
Sub example6()
ActiveSheet.Cells(4, 2).Offset(3, 1).Select
End Sub
คำสั่ง:
ให้เลือกเซลล์ที่ห่างจากเซลล์ B4 ไปทางซ้าย 1 เซลล์ และขึ้นไปด้านบน 1 เซลล์
Sub example7()
ActiveSheet.Cells(4, 2).Offset(-1, -1).Select
End Sub
คำสั่ง:
ให้เลือกเซลล์บนสุดของเซลล์ B7 ใน Sheet1 ในชุดข้อมูลนี้
Sub example8()
Worksheets("Sheet1").Activate
Range("B7").End(xlUp).Select
End Sub
การเลือกจากเซลล์ปัจจุบัน ไปตำแหน่งขวาสุดในข้อมูลชุดนี้
คำสั่ง:
ให้เลือกเซลล์ขวาสุดของเซลล์ B7 ใน Sheet1 ในชุดข้อมูลนี้
Sub example9()
Range("B7").End(xlToRight).Select
End Sub
คำสั่ง:
ให้เลือก ช่วงของเซลล์ จาก B4 ไปทางขวา จำนวน 1 เซลล์ (B4:C4)
Sub example10()
Sheets("Sheet1").Activate
Range(Cells(4, 2), Cells(4, 2 + 1)).Select
End Sub
คำสั่ง:
ให้เลือก ช่วงของเซลล์ จาก B4 ไปทางขวา จำนวน 1 เซลล์ และลงมาด้านล่างจำนวน 2 เซลล์ (B4:C6)
Sub example11()
Sheets("Sheet1").Activate
Range(Cells(4, 2), Cells(4 + 2, 2 + 1)).Select
End Sub
การเลือกจากเซลล์ปัจจุบัน ไปข้างล่างจนสุดที่มีข้อมูล
คำสั่ง:
ให้เลือกเซลล์ตั้งแต่ A2 ไปด้านล่างที่มีข้อมูลทุกเซลล์ในชุดข้อมูลนี้
Sub example12()
Sheets("Sheet1").Select
Range("A2", Range("A2").End(xlDown)).Select
' หรือ
' Sheets("Sheet1").Range("A4").Select
' Range(Selection, Selection.End(xlDown)).Select
End Sub
จะได้ดังภาพ
การเลือกจากตำแหน่งเซลล์ที่เลือกปัจจุบัน ไปทางขวาสุดที่มีข้อมูล และลงมาถึงเซลล์ล่างสุดที่มีข้อมูล
Sub example13()
Sheets("Sheet1").Range("A2").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
End Sub
การเลือก และคัดลอกข้อมูลในเซลล์ จากแนวนอนมาไว้เป็นแนวตั้ง (ประยุกต์ใช้คำสั่งข้างต้น)
คำสั่ง:
ให้คัดลอกข้อมูลในเซลล์ B1:F2 มาไว้เป็นแนวตั้ง ในบริเวณ B5:C9
ใช้โค้ดต่อไปนี้
Sub example14()
Dim i As Byte
Dim j As Byte
For i = 0 To 4
For j = 0 To 1
Sheets("Sheet1").Cells(5 + i, 2 + j).Value = Sheets("Sheet1").Cells(1 + j, 2 + i).Value
Next j
Next i
End Sub
เมื่อเรียกใช้งานโค้ดข้างบน จะผลที่ได้ ดังนี้
ต้องการเลือกเซลล์ B3
Sub example1()
Sheets("Sheet1").Range("B3").Select
End Sub
หรือ
Sub example2()
Sheets("Sheet1").Cells(3, 2).Select
End Sub
หมายเหตุ
Sheets("Sheet1").Cells(3, 2) คือ เซลล์แถวที่ 3 คอลัมน์ที่ 2 ของ Worksheet1
ต้องการเลือกเซลล์ A2:B8
Sub example3()
Sheets("Sheet1").Range("A2", "B8").Select
' หรือ
' Sheets("Sheet1").Range(Cells(2, 1), Cells(8, 2)).Select
End Sub
แต่ถ้าต้องการเลือกจำนวนเซลล์โดยขึ้นอยู่กับตัวแปร ว่าจะเลือกกี่เซลล์ลงมา อย่างนี้ ต้องใช้อีกแบบหนึ่ง เช่น
คำสั่ง:
ให้เลือกบริเวณตั้งแต่เซลล์ C2 ลงมา 4 เซลล์ และไปทางขวาอีก 1 คอลัมน์
Sub example4()
Dim numOfCells As Byte
numOfCellsDown = 4
Sheets("Sheet1").Select
Range(Cells(2, 3), Cells(2 + (numOfCellsDown), 3 + 1)).Select
End Sub
จะได้ดังภาพ
การเลือกช่วงเซลล์และคัดลอกไปอีก Sheet หนึ่ง
Sub example5()
Sheets("Sheet1").Select
Range("B4:C9").Select
Selection.Copy
Sheets("Sheet2").Select
Range("A4").Select
ActiveSheet.Paste
End Sub
การเลือกเซลล์โดยยึดเซลล์ที่กำหนด
การเลือกลักษณะนี้สามารถใช้ คำสั่ง Offset มาใช้งานได้
คำสั่ง:
ให้เลือกเซลล์ที่ห่างจากเซลล์ B4 ไปทางขวา 1 เซลล์ และลงมาด้านล่าง 3 เซลล์
Sub example6()
ActiveSheet.Cells(4, 2).Offset(3, 1).Select
End Sub
คำสั่ง:
ให้เลือกเซลล์ที่ห่างจากเซลล์ B4 ไปทางซ้าย 1 เซลล์ และขึ้นไปด้านบน 1 เซลล์
Sub example7()
ActiveSheet.Cells(4, 2).Offset(-1, -1).Select
End Sub
คำสั่ง:
ให้เลือกเซลล์บนสุดของเซลล์ B7 ใน Sheet1 ในชุดข้อมูลนี้
Sub example8()
Worksheets("Sheet1").Activate
Range("B7").End(xlUp).Select
End Sub
การเลือกจากเซลล์ปัจจุบัน ไปตำแหน่งขวาสุดในข้อมูลชุดนี้
คำสั่ง:
ให้เลือกเซลล์ขวาสุดของเซลล์ B7 ใน Sheet1 ในชุดข้อมูลนี้
Sub example9()
Range("B7").End(xlToRight).Select
End Sub
คำสั่ง:
ให้เลือก ช่วงของเซลล์ จาก B4 ไปทางขวา จำนวน 1 เซลล์ (B4:C4)
Sub example10()
Sheets("Sheet1").Activate
Range(Cells(4, 2), Cells(4, 2 + 1)).Select
End Sub
คำสั่ง:
ให้เลือก ช่วงของเซลล์ จาก B4 ไปทางขวา จำนวน 1 เซลล์ และลงมาด้านล่างจำนวน 2 เซลล์ (B4:C6)
Sub example11()
Sheets("Sheet1").Activate
Range(Cells(4, 2), Cells(4 + 2, 2 + 1)).Select
End Sub
การเลือกจากเซลล์ปัจจุบัน ไปข้างล่างจนสุดที่มีข้อมูล
คำสั่ง:
ให้เลือกเซลล์ตั้งแต่ A2 ไปด้านล่างที่มีข้อมูลทุกเซลล์ในชุดข้อมูลนี้
Sub example12()
Sheets("Sheet1").Select
Range("A2", Range("A2").End(xlDown)).Select
' หรือ
' Sheets("Sheet1").Range("A4").Select
' Range(Selection, Selection.End(xlDown)).Select
End Sub
จะได้ดังภาพ
การเลือกจากตำแหน่งเซลล์ที่เลือกปัจจุบัน ไปทางขวาสุดที่มีข้อมูล และลงมาถึงเซลล์ล่างสุดที่มีข้อมูล
Sub example13()
Sheets("Sheet1").Range("A2").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
End Sub
การเลือก และคัดลอกข้อมูลในเซลล์ จากแนวนอนมาไว้เป็นแนวตั้ง (ประยุกต์ใช้คำสั่งข้างต้น)
คำสั่ง:
ให้คัดลอกข้อมูลในเซลล์ B1:F2 มาไว้เป็นแนวตั้ง ในบริเวณ B5:C9
ใช้โค้ดต่อไปนี้
Sub example14()
Dim i As Byte
Dim j As Byte
For i = 0 To 4
For j = 0 To 1
Sheets("Sheet1").Cells(5 + i, 2 + j).Value = Sheets("Sheet1").Cells(1 + j, 2 + i).Value
Next j
Next i
End Sub
เมื่อเรียกใช้งานโค้ดข้างบน จะผลที่ได้ ดังนี้
ก่อนจะใช้ selection ต้อง imports อะไรเข้ามาก่อนหรือเปล่าครับ พอดีว่า ผมใช้ selection แล้ว not declared
ตอบลบmail : thongchai.jindatam@gmail.com