ตัวอย่างนี้น่าจะช่วยแก้ปัญหาให้กับงานได้มากมายหลายประเภท ซึ่งต้องการกรอกข้อมูลลงไปในเซลล์ แล้วต้องการนำข้อมูลที่กรอกไว้ไปเก็บต่อท้ายข้อมูลที่มีอยู่แล้ว ทำให้เกิดเป็นตารางฐานข้อมูลในที่สุด
ชุดคำสั่ง : SendData
สิ่งที่ต้องการ
ส่งข้อมูลที่กรอกลงในเซลล์ B3:D3 ไปเก็บต่อท้ายรายการในตารางด้านขวา
ขั้นตอนการสร้างงาน
- สร้าง Range Name ชื่อ Source ให้กับเซลล์ B3:D3
- สร้าง Range Name ชื่อ Ref ให้กับเซลล์ G3
- สร้าง Formula Name ชื่อ Target ให้เป็นสูตร
=OFFSET( Ref, COUNTA($G:$G)-1, 0, 1, 3 )
วิเคราะห์สูตร
Target
=OFFSET( Ref, COUNTA($G:$G)-1, 0, 1, 3 )
ขอให้สังเกตเลข 0, 1, 3 ที่อยู่ด้านท้ายของสูตร Offset ก่อน
- เลข 0 กำหนดตำแหน่งของข้อมูล ให้เริ่มในแนว column เดียวกันกับ Ref
- เลข 1 คือ ความสูงของรายการข้อมูล ซึ่งต้องมีความสูงคงที่ 1 row เสมอ
- เลข 3 คือ ความกว้างของรายการ ซึ่งประกอบด้วย Id, Name, Amount จึงกำหนดให้กว้าง 3 column คงที่
ส่วนของสูตร COUNTA($G:$G)-1 เป็นตัวช่วยกำหนดตำแหน่งรายการใหม่ต่อท้ายรายการเดิม โดย COUNTA($G:$G) จะนับจำนวนเซลล์ที่มีข้อมูลใน column G ทั้งหมด แต่เนื่องจากนับเซลล์คำว่า Id รวมเกินมา 1 เซลล์ จึงต้องลบ COUNTA($G:$G) ออกเสีย 1 ตำแหน่ง ทั้งนี้เพื่อให้ตรงกับจำนวน row ที่ต้องนับให้ถัดไปจากตำแหน่งของเซลล์ Ref
ดังนั้นสูตร Offset นี้ จึงทำหน้าที่ส่งรายการข้อมูลที่กรอกไว้ในตารางที่มีความสูง 1 rowและกว้าง 3 column จาก Range Name ชื่อ Source ไปยัง Target ซึ่งมีขนาดความสูงและความกว้างเดียวกัน เพียงแต่ Target จะขยับไปหาตำแหน่งรายการถัดไปจาก Ref ตามที่นับได้ด้วยสูตร CountA-1