การใช้ excel ตอนนี้จะต่อจากบทความเรื่อง การใช้ excel : Reading and writing data from Cells in vba ครับ บทความนี้จะมาว่าถึงการใช้ คำสั่งควบคุมใน vba excel ในการเข้าถึงข้อมูลในเซลล์ครับ โดยจะใช้ฟังก์ชัน Cells กันครับ
คำสั่งควบคุมคำสั่งแรกที่ใช้ก็คือ For…Next มีรูปแบบการใช้งานดังนี้ครับ
For initial value To End value Step stepvalue
‘Do some thing
Next
สมมุติผมมีข้อมูลใน worksheet ดังภาพที่ 1 ครับ หากต้องการหาผลบวกในแต่ละแถวต้องทำอย่างไร หากคิดแบบมนุษย์ก็คงคิดได้ดังนี้ครับ เข้าไปอ่านค่าในเซลล์ที่ 1 และหาผลบวกรวมจนสิ้นสุดที่เซลล์ C1 จากนั้นนำผลลัพธ์ที่ได้ไปแสดงที่เซลล์ D1 จากนั้นก็ดำเนินการในแถวที่ 2 และ 3 ในทำนองเดียวกัน
จะเห็นว่าเป็นการคำนวณแบบซ้ำๆกัน แบบนี้เราสามารถใช้ For…Next ได้ ไปดูโค้ดใน vba กันครับ
Dim sum As Integer
For i = 1 To 3 Step 1
sum = 0 ‘กำหนดให้ตัวแปร sum เป็นศูนย์ทุกครั้งที่ขึ้นแถวใหม่
For j = 1 To 3 Step 1 ‘ท่องไปตามหลักต่างๆ ตั้งแต่ A-C
sum = sum + Cells(i,j)
Next j
Cells(i,j) = sum ‘แสดงผลลัพธ์ในเซลล์ Di
Next i
ผลการคำนวณด้วย vba excel ครับ
ภาพที่ 2 ผลการคำนวณใน excel
จากตัวอย่างท่านผู้อ่านจะเห็นว่าในปัญหานี้เราทราบจำนวนของข้อมูลที่แน่นอนดังนั้น For..next จึงใช้งานได้ง่าย ปัญหาคือหากเราไม่ทราบจำนวนของข้อมูลที่ต้องการคำนวณแต่เราทราบจุดเริ่มต้นของชุดข้อมูลดังกล่าว คำสั่ง Do While…Loop เป็นตัวเลือกที่ดีในการใช้งาน excel ครับมาดูโค้ดใน vba excel กันเลย
Dim sum As Integer
j = 1
i = 1
Do While Cells(i, j) <> ""
sum = 0
Do While Cells(i, j) <> ""
sum = sum + Cells(i, j)
j = j + 1
Loop
Cells(i, j) = sum
i = i + 1
j = 1
Loop
จากโค้ดเราจะพบว่าการตรวจสอบการสิ้นสุดของข้อมูลจะใช้การอ่านข้อมูลโดยหากข้อมูลใน Cells เป็นค่าว่างก็แสดงว่าสิ้นสุดข้อมูลแล้วครับ ท่านผู้อ่านสามารถเก็บจำนวนของข้อมูลได้โดยการเก็บข้อมูลจากค่า j ในแต่ละครั้งครับซึ่งสามารถนำไปประยุกต์ใช้ในการหาค่าเฉลี่ยของข้อมูลในแต่ละแถวได้ครับ
จากที่ผมได้นำเสนอไปเป็นตัวอย่างที่นำเสนอการควบคุมการท่องเข้าไปอ่านข้อมูลและบันทึกข้อมูลใน Cells แบบง่ายๆครับ ในบทความต่อไปผมจะนำเสนอการควบคุมการท่องเข้าไปอ่านและบันทึกให้ซับซ้อนขึ้นครับ หากมีเงื่อนไขในการหารวมในแต่ละแถวว่า ตัวเลขที่เป็นค่าลบจะไม่นำมาคำนวณด้วย เราจะใช้คำสั่งควบคุมตัวไหนมาช่วยครับ การใช้สูตร excel if คำตอบนี้ครับ แล้วพบกันตอนหน้าครับ สวัสดีครับ
ไม่มีความคิดเห็น:
แสดงความคิดเห็น