วัตถุช่วง Excel VBA

⚡ สรุปอย่างชาญฉลาด

อ็อบเจ็กต์ Range ใน Excel VBA แทนเซลล์หนึ่งเซลล์หรือกลุ่มเซลล์บนเวิร์กชีต หน้านี้จะอธิบายลำดับชั้นของอ็อบเจ็กต์ คุณสมบัติของ Range และ Cells การเลือกและการอ้างอิงเซลล์ การอ่านและการเขียนค่า และคุณสมบัติ Offset

  • 🎯 ความหมาย: อ็อบเจ็กต์ Range ชี้ไปยังเซลล์เดียว แถว คอลัมน์ ส่วนที่เลือก หรือช่วง 3 มิติ
  • 🧬 ลำดับชั้น: เอกสารอ้างอิงที่มีคุณภาพครบถ้วนจะเรียงลำดับดังนี้ ใบสมัคร สมุดงาน แบบฝึกหัด และลำดับขั้น
  • 🏷️ คุณสมบัติและวิธีการ: คุณสมบัติ (Property) ใช้สำหรับเก็บข้อมูลเกี่ยวกับวัตถุ และเมธอด (Method) ใช้สำหรับดำเนินการต่างๆ เช่น เลือก (Select) หรือรวม (Merge)
  • 🔢 คุณสมบัติของเซลล์: คำสั่ง Cells(Row, Column) ใช้สำหรับอ้างอิงเซลล์ตามหมายเลข ซึ่งเหมาะสำหรับใช้ในลูปการเขียนโปรแกรม
  • 🇧🇷 การอ่านและการเขียน: คุณสมบัติ Value สามารถทั้งดึงเนื้อหาของเซลล์และเขียนเนื้อหาใหม่กลับเข้าไปได้
  • ↔️ คุณสมบัติออฟเซ็ต: คำสั่ง Offset จะเลื่อนค่าอ้างอิงไปตามจำนวนแถวและคอลัมน์ที่กำหนดจากเซลล์เริ่มต้น

วัตถุช่วง Excel VBA

ช่วง VBA คืออะไร

VBA Range Object แสดงถึงเซลล์หรือหลายเซลล์ในแผ่นงาน Excel ของคุณ เป็นวัตถุที่สำคัญที่สุดของ Excel VBA โดยใช้วัตถุช่วง Excel VBA คุณสามารถอ้างถึง

  • เซลล์เดียว
  • แถวหรือคอลัมน์ของเซลล์
  • การเลือกเซลล์
  • ช่วงสามมิติ

ดังที่เราได้กล่าวถึงในบทเรียนก่อนหน้านี้ VBA ใช้สำหรับบันทึกและเรียกใช้งาน แมโครแต่ VBA จะระบุได้อย่างไรว่าข้อมูลส่วนใดในชีตที่ต้องดำเนินการ? นี่คือจุดที่ Range Objects ใน VBA มีประโยชน์

รู้เบื้องต้นเกี่ยวกับการอ้างอิงวัตถุใน VBA

การอ้างอิงวัตถุช่วง VBA ของ Excel และตัวระบุวัตถุ

  • ตัวระบุวัตถุ: ใช้สำหรับอ้างอิงวัตถุ โดยจะระบุสมุดงานหรือแผ่นงานที่คุณอ้างถึง

เพื่อจัดการค่าของเซลล์เหล่านี้ อสังหาริมทรัพย์ และ วิธีการ ถูกนำมาใช้

  • อสังหาริมทรัพย์: คุณสมบัติจัดเก็บข้อมูลเกี่ยวกับวัตถุ
  • วิธีการ: วิธีการคือการกระทำของวัตถุที่มันจะดำเนินการ ออบเจ็กต์ช่วงสามารถดำเนินการต่างๆ เช่น เลือก คัดลอก ล้าง เรียงลำดับ ฯลฯ

VBA ใช้รูปแบบลำดับชั้นของวัตถุในการอ้างอิงถึงวัตถุใน Excel คุณต้องปฏิบัติตามโครงสร้างด้านล่าง โปรดจำไว้ว่า จุด (.) ในที่นี้ใช้เชื่อมต่อวัตถุในแต่ละระดับที่แตกต่างกัน

แอปพลิเคชัน สมุดงาน แผ่นงาน ช่วง

ลำดับชั้นนั้นสามารถเข้าถึงได้ผ่านคุณสมบัติสองอย่าง และคุณสมบัติ Range เป็นคุณสมบัติที่ใช้บ่อยที่สุด

วิธีอ้างอิงถึง Excel VBA Range Object โดยใช้คุณสมบัติ Range

คุณสมบัติช่วงสามารถนำไปใช้กับวัตถุสองประเภทที่แตกต่างกัน

  • วัตถุแผ่นงาน
  • วัตถุช่วง

ไวยากรณ์สำหรับคุณสมบัติช่วง

  1. คำหลัก "ช่วง"
  2. วงเล็บที่ตามหลังคำสำคัญ
  3. ช่วงเซลล์ที่เกี่ยวข้อง
  4. คำอ้างอิง (" ")
Application.Workbooks("Book1.xlsm").Worksheets("Sheet1").Range("A1")

เมื่อคุณอ้างอิงวัตถุ Range ดังที่แสดงด้านบน วัตถุนั้นจะถูกเรียกว่า การอ้างอิงที่มีคุณสมบัติครบถ้วนคุณได้ระบุช่วงข้อมูลที่ต้องการไปยัง Excel อย่างชัดเจนแล้ว รวมถึงชีตและเวิร์กชีตที่ต้องการด้วย

ตัวอย่าง: ข้อความBox แผ่นงาน (“Sheet1”).ช่วง (“A1”).ค่า

การใช้คุณสมบัติ Range คุณสามารถทำงานหลายอย่างเช่น

  • อ้างถึงเซลล์เดียวโดยใช้คุณสมบัติช่วง
  • อ้างถึงเซลล์เดียวโดยใช้คุณสมบัติ Worksheet.Range
  • อ้างถึงทั้งแถวหรือคอลัมน์
  • อ้างถึงเซลล์ที่ผสานโดยใช้ Worksheet.Range Property และอื่นๆ อีกมากมาย

ด้วยเหตุนี้จึงจะยาวเกินไปที่จะครอบคลุมสถานการณ์ทั้งหมดสำหรับคุณสมบัติของช่วง สำหรับสถานการณ์ที่กล่าวถึงข้างต้น เราจะสาธิตตัวอย่างเพียงสถานการณ์เดียวเท่านั้น อ้างถึงเซลล์เดียวโดยใช้คุณสมบัติช่วง

อ้างถึงเซลล์เดียวโดยใช้คุณสมบัติ Worksheet.Range

หากต้องการอ้างอิงถึงเซลล์ใดเซลล์หนึ่ง ให้ส่งที่อยู่ของเซลล์นั้นไปยังคุณสมบัติ Range ในรูปแบบสตริงข้อความ

ไวยากรณ์เป็นเรื่องง่าย “พิสัย(”เซลล์”)”

ที่นี่เราจะใช้คำสั่ง ".Select" เพื่อเลือกเซลล์เดียวจากแผ่นงาน

ขั้นตอน 1) ขั้นตอนนี้ ให้เปิดไฟล์ Excel ของคุณ

เซลล์เดียวโดยใช้คุณสมบัติ Worksheet.Range

ขั้นตอน 2) ในขั้นตอนนี้

  • คลิกที่ เซลล์เดียวโดยใช้คุณสมบัติ Worksheet.Range ปุ่ม
  • มันจะเปิดหน้าต่างขึ้นมา
  • ป้อนชื่อโปรแกรมของคุณที่นี่แล้วคลิกปุ่ม 'ตกลง'
  • ระบบจะนำคุณไปยังไฟล์ Excel หลัก จากเมนูด้านบนให้คลิกที่ปุ่มบันทึก 'หยุด' เพื่อหยุดการบันทึกมาโคร

เซลล์เดียวโดยใช้คุณสมบัติ Worksheet.Range

ขั้นตอน 3) ในขั้นตอนถัดไป

  • คลิกที่ปุ่มมาโคร เซลล์เดียวโดยใช้คุณสมบัติ Worksheet.Range จากเมนูด้านบน มันจะเปิดหน้าต่างด้านล่าง
  • ในหน้าต่างนี้ คลิกที่ปุ่ม 'แก้ไข'

เซลล์เดียวโดยใช้คุณสมบัติ Worksheet.Range

ขั้นตอน 4) ขั้นตอนข้างต้นจะเปิดโปรแกรมแก้ไขโค้ด VBA สำหรับไฟล์ชื่อ “Single Cell Range” ป้อนโค้ดตามที่แสดงด้านล่างเพื่อเลือกช่วงเซลล์ “A1” จากชีต Excel

Sub SingleCellRange()
    Range("A1").Select
End Sub

เซลล์เดียวโดยใช้คุณสมบัติ Worksheet.Range

ขั้นตอน 5) ตอนนี้บันทึกไฟล์ เซลล์เดียวโดยใช้คุณสมบัติ Worksheet.Range และรันโปรแกรมดังภาพด้านล่าง

เซลล์เดียวโดยใช้คุณสมบัติ Worksheet.Range

ขั้นตอน 6) คุณจะเห็นเซลล์ “A1” ถูกเลือกหลังจากการทำงานของโปรแกรม

เซลล์เดียวโดยใช้คุณสมบัติ Worksheet.Range

ในทำนองเดียวกัน คุณสามารถเลือกเซลล์ที่มีชื่อเฉพาะได้ ตัวอย่างเช่น หากคุณต้องการค้นหาเซลล์ที่มีชื่อว่า “Guru99- บทเรียน VBA” คุณต้องรันคำสั่งดังที่แสดงด้านล่าง คำสั่งนี้จะเลือกเซลล์ที่มีชื่อนั้น

พิสัย("Guru99- บทเรียน VBA”) เลือก

หากต้องการใช้ออบเจ็กต์ช่วงอื่น นี่คือตัวอย่างโค้ด

ช่วงสำหรับการเลือกเซลล์ใน Excel ประกาศช่วงแล้ว
สำหรับแถวเดี่ยว พิสัย("1:1")
สำหรับคอลัมน์เดียว ช่วง (“A:A”)
สำหรับเซลล์ที่อยู่ติดกัน พิสัย("A1:C5")
สำหรับเซลล์ที่ไม่ต่อเนื่องกัน พิสัย("A1:C5, F1:F5")
สำหรับจุดตัดของสองช่วง พิสัย("A1:C5 F1:F5")
(สำหรับเซลล์จุดตัด โปรดจำไว้ว่าไม่มีตัวดำเนินการเครื่องหมายจุลภาค)
เพื่อรวมเซลล์ พิสัย("A1:C5")
(หากต้องการรวมเซลล์ให้ใช้คำสั่ง "ผสาน")

การเลือกเซลล์เป็นเพียงขั้นตอนแรกเท่านั้น ในทางปฏิบัติ มาโครจะอ่านค่าที่อยู่ในเซลล์และเขียนค่าใหม่กลับเข้าไปในเซลล์นั้น

วิธีการอ่านและเขียนค่าด้วยออบเจ็กต์ Range

มาโครเกือบทุกตัวที่ทำงานกับเวิร์กชีตจะทำอย่างใดอย่างหนึ่งในสองอย่าง คือ อ่านค่าจากเซลล์ หรือเขียนค่าเข้าไปในเซลล์ ทั้งสองอย่างทำงานผ่านคุณสมบัติ Value และไม่จำเป็นต้องเลือกเซลล์ก่อน

Sub ReadAndWrite()
    Dim Price As Double
    Dim Qty As Long

    ' Read two values out of the sheet
    Price = Range("B1").Value
    Qty = Range("B2").Value

    ' Write the calculated result back
    Range("B3").Value = Price * Qty

    ' Fill a whole block in one statement
    Range("D1:D10").Value = "Guru99"

    ' Clear only the contents, keeping the formatting
    Range("F1:F10").ClearContents
End Sub

มีสี่ประเด็นที่ทำให้รูปแบบนี้เชื่อถือได้

  • ไม่จำเป็นต้องเลือกตัวเลือกนี้: การเขียน Range(“B3”).Value = 10 วิธีนี้เร็วกว่าและปลอดภัยกว่าการเลือกเซลล์ก่อน มาโครที่บันทึกไว้เต็มไปด้วยคำสั่ง .Select เพราะตัวบันทึกจำลองการทำงานของเมาส์ ไม่ใช่เพราะโค้ดต้องการเช่นนั้น
  • คุณค่าเทียบกับเนื้อหา: .Value จะส่งคืนข้อมูลพื้นฐาน ในขณะที่ .Text จะส่งคืนสตริงที่จัดรูปแบบแล้วซึ่งแสดงบนหน้าจอ ซึ่งอาจถูกตัดทอนตามความกว้างของคอลัมน์ อ่านค่า .Value ในการคำนวณ
  • บล็อกทั้งหมดเรียงกันในบรรทัดเดียว: การกำหนดค่าให้กับช่วงเซลล์หลายเซลล์จะเติมข้อมูลลงในทุกเซลล์พร้อมกัน ซึ่งเร็วกว่าการทำซ้ำมากping.
  • เคลียร์สิ่งที่ถูกต้อง: ClearContents จะลบเฉพาะค่า, Clear จะลบการจัดรูปแบบด้วย และ Delete จะลบเซลล์และเลื่อนเซลล์รอบข้างออกไป

ฟังก์ชัน Range ใช้สำหรับระบุตำแหน่งเซลล์โดยใช้ตัวอักษรและตัวเลข ส่วนฟังก์ชันอีกแบบใช้สำหรับระบุตำแหน่งเซลล์เดียวกันโดยใช้ตัวเลขสองตัวแทน

คุณสมบัติของเซลล์

ในทำนองเดียวกันกับช่วงใน VBA คุณสามารถใช้ "คุณสมบัติเซลล์" ได้เช่นกัน ความแตกต่างเพียงอย่างเดียวคือมันมีคุณสมบัติ "รายการ" ที่คุณใช้เพื่ออ้างอิงเซลล์ในสเปรดชีตของคุณ คุณสมบัติเซลล์มีประโยชน์ในลูปการเขียนโปรแกรม

ตัวอย่างเช่น

Cells.item(Row, Column). บรรทัดทั้งสองด้านล่างอ้างอิงถึงเซลล์ A1

  • เซลล์.รายการ(1,1) หรือ
  • Cells.item (1” A”)

ความแตกต่างระหว่างช่วง (Range) และเซลล์ (Cells) ใน VBA

การกำหนดช่วง (Range) และการใช้เซลล์ (Cells) เข้าถึงเซลล์ในเวิร์กชีตเดียวกันโดยใช้เส้นทางที่แตกต่างกัน และการเลือกใช้เส้นทางที่ถูกต้องจะทำให้โค้ดสั้นลงและอ่านง่ายขึ้น

จุดแตกต่าง พิสัย เซลล์
รูปแบบที่อยู่ สตริงข้อความ, ช่วง(“A1”) ตัวเลขสองตัว เซลล์(1, 1)
หลายเซลล์ ใช่ ช่วง (“A1:C5”) ทีละเซลล์
ภายในลูป จำเป็นต้องเชื่อมต่อสตริง หมายเลขแถวสามารถใช้เป็นตัวนับรอบได้
การอ่าน ตรงกับที่อยู่ที่คุณเห็นใน Excel คอลัมน์ที่ 27 นั้นยากต่อการจินตนาการมากกว่า AA
การใช้งานร่วมกัน Range(Cells(1, 1), Cells(5, 3)) สร้าง A1:C5 จากตัวเลข

หลักการใช้งานจริงคือ ใช้ Range สำหรับที่อยู่คงที่ที่คุณสามารถอ่านได้อย่างรวดเร็ว และใช้ Cells เมื่อใดก็ตามที่มีการคำนวณหมายเลขแถวหรือคอลัมน์ในระหว่างการทำงานของโปรแกรม

คุณสมบัติออฟเซ็ตช่วง

คุณสมบัติชดเชยช่วงจะเลือกแถว/คอลัมน์ให้ห่างจากตำแหน่งเดิม เซลล์จะถูกเลือกตามช่วงที่ประกาศ ดูตัวอย่างด้านล่าง

ตัวอย่างเช่น

Range("A1").Offset(RowOffset:=1, ColumnOffset:=1).Select

ผลลัพธ์ที่ได้คือเซลล์ B2 คุณสมบัติ Offset จะเลื่อนเซลล์ A1 ออกไป 1 คอลัมน์และ 1 แถว คุณสามารถเปลี่ยนค่า RowOffset / ColumnOffset ได้ตามต้องการ คุณสามารถใช้ค่าลบ (-1) เพื่อเลื่อนเซลล์ไปด้านหลังได้

ดาวน์โหลด Excel ที่มีโค้ดด้านบน

ดาวน์โหลดไฟล์ Excel ด้านบน Code

คำถามที่พบบ่อย

ใช้ Cells(Rows.Count, 1).End(xlUp).Row โดยจะเริ่มต้นที่ด้านล่างของคอลัมน์ A และกระโดดขึ้นไปยังเซลล์สุดท้ายที่มีข้อมูล ซึ่งมีความน่าเชื่อถือมากกว่า UsedRange หลังจากลบแถวแล้ว

การอ่านหรือเขียนข้อมูลทุกครั้งจะมีการสลับไปมาระหว่าง VBA และ Excel โหลดช่วงข้อมูลลงในอาร์เรย์ด้วยการกำหนดค่าเพียงครั้งเดียว ประมวลผลอาร์เรย์ในหน่วยความจำ จากนั้นเขียนกลับเข้าไปในหน่วยความจำด้วยคำสั่งเดียว การปิดใช้งาน ScreenUpdating ก็ช่วยได้เช่นกัน

โดยปกติแล้วสาเหตุเกิดจากที่อยู่ไม่ถูกต้อง ชื่อชีตไม่มีอยู่จริง หรือความพยายามเลือกช่วงข้อมูลในเวิร์กชีตที่ไม่ได้ใช้งานอยู่ ให้ระบุชื่อชีตให้ชัดเจน หรือเปิดใช้งานชีตก่อน

ใช่แล้ว วางโค้ดที่บันทึกไว้ แล้วผู้ช่วย AI จะแทนที่คู่ Select และ Selection แต่ละคู่ด้วยการอ้างอิง Range ที่สมบูรณ์และตรงประเด็น รันทั้งสองเวอร์ชันบนสำเนาและเปรียบเทียบชีตก่อนเก็บไว้ping การเปลี่ยนแปลง.

ใช่แล้ว อธิบายเป้าหมาย เช่น กรอกข้อมูลทุกแถวในคอลัมน์ A ถึง D บนแผ่นงานข้อมูล แล้วผู้ช่วย AI จะส่งคืนนิพจน์ช่วงที่ตรงกัน ตรวจสอบกับตัวอย่างขนาดเล็กก่อนนำไปใช้กับข้อมูลจริง

สรุปโพสต์นี้ด้วย: