วันจันทร์ที่ 26 กรกฎาคม พ.ศ. 2553

VBA ,Excel format : To Calculte Pi (Machin’s series)

This article aims to present The command to check conditions. Under the command to reproduce While I, for example, to calculate the PI using a case study For a description of this command. Finally, provides a set text format in VBA in order to display the calculation.

From previous posts. We have presented methods to calculate the PI using the function PI () in excel or using trigonometric relationships ATAN function through the end of the article. I leave recipes for your Machin the PI consider the formula for the PI in the form of infinite series. As shown in Equation 1.

PI Value

Figure 1 Machin Formular

From the equation, we see that the PI can be determined by the sum of each value of k until the resolution of the PI to the totals for repeated this Easily through computer programming a few lines. Let's see the code written in VBA and description below.

subrutene series

Sub series()
Dim p As Double
Dim q As Double
Dim tol As Double
Dim bfinish As Boolean
p = 0
q = 0
bfinish = True
tol = 0.000000000000001
Dim k As Integer
Dim j As Integer
Dim i As Integer
k = 0
j = 0
i = 0

While bfinish
k = (-1) ^ i
j = 2 * i + 1
p = p + (16 * k) / (j * (5 ^ j))
q = q + (4 * k) / (j * (239 ^ j))
'check condition 15 digit

If Abs(16*k)/(j*(5^j)) <tol And Abs(4*k)/(j * (239 ^ j))<tol Then
bfinish = False
End If
i = i + 1 ' increase i
Wend
Range("A1").Select

‘define format cell (text format)
ActiveCell.NumberFormat = "0.000000000000000"

ActiveCell.Value = p - q
End Sub

From the vba code has shown that Calculated the series for the PI command only two major commands that are used in a while ... wend reproduce and use the IF .. THEN check the terms of the resolution, while the PI of. Details of cell to use the command NumberFormat which enabled simple observations in code of the calculated PI I picked up the calculation in the variable temp. To facilitate the reading code and prevent errors in calculations.

แท็กของ Technorati: {กลุ่มแท็ก},

วันอังคารที่ 20 กรกฎาคม พ.ศ. 2553

ค่า PI in Engineering

บทความนี้อยากจะกล่าวถึงค่าคงที่ค่าหนึ่งที่ engineer ทุกคนรู้จักและเคยนำไปใช้ในการคำนวณมาบ้างแล้วไม่มากก็น้อย นั่นคือ ค่า PI นั่นเองครับ ค่าคงที่ PI ถูกนิยามว่า เป็นอัตราส่วนระหว่างความยาวเส้นรอบวงของวงกลมต่อความยาวเส้นผ่านศูนย์กลางของวงกลมนั้น จะเห็นได้ว่าค่าคงที่ PI ถูกนิยามขึ้นจากลักษณะรูปร่างของวัตถุ ดังนั้นจึงอาจกล่าวได้ว่า หากเราพบเจอค่าคงที่ PI ในสูตรการคำนวณใดๆ แล้ว ขอให้เราวิเคราะห์ได้เบื้องต้นว่า เรากำลังแก้ปัญหาที่เกี่ยวข้องกับรูปร่างอยู่ เช่น สูตรการหาพื้นที่วงกลมก็คือ PI *r^2 สูตรการคำนวณหาแรงกดวิกฤตในแนวแกนของเสาที่มีการยึดแบบ pinned end ก็จะเท่ากับ Pcr = PI ^2*E*I/l^2 หรือค่ามุมในหน่วยเรเดียนก็ยังเกี่ยวข้องกับ PI เนื่องด้วยการนิยามค่ามุมจะเกี่ยวข้องกับความยาวส่วนโค้งที่รองรับมุมที่กวาดไปรอบจุดศูนย์กลางของวงกลม เช่น มุม 90 องศาก็จะเท่ากับ PI /2 เป็นต้น

เอาหล่ะครับทีนี้มาเข้าเรื่องกันเลยครับ แล้ว PI มีค่าเท่าไหร่ ใน Excel หรือ VBA Excel จะกำหนดค่าอย่างไร ตอนเด็กๆเราคงจำได้และท่องขึ้นใจนะครับว่า PI มีค่าเท่ากับ 22/7 หรือประมาณ 3.14 แต่ทีนี้เราจะพบว่าการใช้ค่าประมาณในการคำนวณซ้ำๆกันเช่น การคูณ การหาร หรือ ยกกำลัง จะทำให้ผลลัพธ์ของเราเกิดความผิดพลาดขึ้นมาได้ แล้ว PI มีค่าเท่าไหร่ หล่ะ ครับ ใน Excel มีวิธีการหาค่า PI สองวิธีครับคือ

1. ใช้ฟังก์ชั่นที่เรียกใช้ค่า PI ได้เลยครับ โดยเราจะเรียกใช้ผ่านฟังก์ชั่น PI() ครับ ซึ่งฟังก์ชันนี้จะคืนค่า PI มาเท่ากับ 3.14159265358979 (ความละเอียด15 หลัก)

2. หาค่าโดยอ้อมผ่านฟังก์ชัน ATAN (ค่าอาร์กแทนเจนต์) ครับ ทุกท่านคงทราบดีนะครับว่า ATAN(1) จะคืนค่ามุมในหน่วยเรเดียนกลับ ซึ่งเราทราบอยู่แล้วว่า ATAN(1) = PI /4 ดังนั้น PI = 4*ATAN(1)

ครับที่กล่าวมาเป็นการเรียกใช้ฟังก์ชันใน Excel หากต้องใช้ใน VBA เราสามารถหาค่า PI ได้ตามวิธีการที่สองเท่านั้นครับ แต่ฟังก์ชันที่คืนค่าอาร์กแทนเจนต์ใน VBA จะไม่เหมือนกับฟังก์ชันใน Excel โดยจะสามารถเขียนได้ดังนี้ PI = 4*Atn(1) เมื่อ Atn คือ ฟังก์ชันที่คืนค่าอาร์กแทนเจนต์

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

สรุปสุดท้ายครับ ผมมีวิธีการคำนวณค่า PI ให้ท่านผู้อ่านได้พิจารณาครับเผื่อว่าจะต้องการความละเอียดมากกว่า 15 หลักครับ

โดยจะเขียนอยู่ในรูปแบบของอนุกรมได้ดังนี้ครับ (นำเสนอโดยคุณ John Machin ในปี คศ 1706)

PI Value

เดี๋ยวบทความต่อไปเรามาลองเขียน VBA code คำนวณอนุกรมนี้เพื่อหาค่า PI กันครับ

วันพฤหัสบดีที่ 15 กรกฎาคม พ.ศ. 2553

VBA Excel ตอน การทำซ้ำ Looping

บทความนี้ถูกเขียนด้วย Windows Live Writer เป็นบทความแรกครับ ต้องขอขอบคุณ http://www.hackublog.com ที่แนะนำเครื่องมือดีๆมาช่วยผมเขียนบทความได้สะดวกมากยิ่งขึ้น ขอบคุณจริงๆครับ มาเข้าเรื่องกันเลยดีกว่าครับ บทความที่ผ่านมาผมจะเน้นไปที่การประยุกต์ใช้ฟังก์ชันของ MS Excel ในการแก้ปัญหาทางวิศวกรรมเป็นหลัก ซึ่งก็แสดงให้เห็นถึงความสามารถในการช่วยคำนวณได้เป็นอย่างดี แต่ดังที่ผมได้แนะนำไปแล้วใน พื้นฐาน VBA Excel ซึ่งเป็นอีกหนึ่ง ความสามารถของ Excel นั่นคือ การกำหนด Macro เพื่อช่วยในการทำงานที่มีรูปแบบซ้ำๆกัน เรามาดูตัวอย่างที่ผมจะนำเสนอกันในบทความนี้ครับ

ผมได้ประสบปัญหาหนึ่งในการทำงานจริงครับ คือผมต้องเขียนคำสั่งในการจำลองให้วัตถุชิ้นหนึ่งเคลื่อนที่ซึ่งมีลักษณะแบบคาบเวลาดังแสดงในภาพที่ 1

Signal

ภาพที่ 1 การจำลองการเคลื่อนที่ของวัตถุ

โดยที่ Tp คือคาบเวลาของการเคลื่อนที่มีหน่วยเป็น วินาที(s)

T คือเวลาทั้งหมดในการจำลองการเคลื่อนที่มีหน่วยเป็น วินาที (s)

Amplitude คือขนาดของการเคลื่อนที่ มีค่าสูงสุดเท่ากับ 1 ต่ำสุดเท่ากับ 0

จากการจำลองลักษณะการเคลื่อนที่ดังแสดงในภาพที่ 1 เราสามารถหาจำนวนลูกคลื่นของการเคลื่อนที่ได้จากสูตร N = T/Tp เมื่อพิจารณาลักษณะของการเคลื่อนที่ พบว่าเป็นลักษณะของรูปสามเหลี่ยม ดังนั้นในการจำลองการเคลื่อนที่ของวัตถุชิ้นนี้ในเวลา T วินาที โดยมีคาบการเคลื่อนที่เท่ากับ Tp จะต้องใช้จำนวนชุดข้อมูลสำหรับการจำลองการเคลื่อนที่เท่ากับ 2N + 1 ชุด โดย

Amplitude ที่เวลา tn ใดๆ มีค่าเท่ากับ

An = 1 หาก n เป็นจำนวนคู่

An = 0 หาก n เป็นจำนวนคี่

โดย tn คือเวลาในชุดข้อมูลที่ n หาได้จาก

tn = Tp*(n-1)/2 ; n = 1 , 2 , 3 ,….,2N+1

โดยชุดข้อมูลจะถูกกำหนดในรูปของคู่อันดับ(tn , An) ;n = 1 , 2 , 3 ,..,2N+1

จากความสัมพันธ์ที่ได้อธิบายมาท่านผู้อ่านจะเห็นว่า การคำนวณคู่อันดับ (tn , An) ทำได้ไม่ยาก เพียงแต่ว่า หากจำนวนของชุดข้อมูลมีเป็นจำนวนมากจะเขียนคู่ลำดับให้ได้อย่างรวดเร็วและถูกต้องจะทำอย่างไร

เรามาดู ตัวอย่างการจำลองการเคลื่อนที่ของวัตถุชิ้นหนึ่งให้มีลักษณะการเคลื่อนที่ดังภาพที่ 1 โดยมีคาบเวลาในการเคลื่อนที่เท่ากับ 0.2 วินาที และวัตถุชิ้นนี้เคลื่อนที่โดยใช้เวลาทั้งหมด 6 วินาที เอาหล่ะคับมาเริ่มคำนวณกันเลย

อันดับแรกมาคำนวณจำนวนชุดข้อมูลก่อนครับจะได้ชุดข้อมูลเท่ากับ 2*6/0.2 +1 ชุด นั่นคือ 61 ชุด โอ้โห้ไม่น้อยนะครับ ผมขอเพิ่มเงื่อนไขอีกนิด เนื่องจากชุดข้อมูลเหล่านี้จะต้องถูกส่งไปยังโปรแกรมที่สาม(Third Party) ซึ่งมีข้อกำหนดว่า ในหนึ่งแถวจะต้องมีชุดข้อมูลเรียงกันเท่ากับ 4 ชุด ยกเว้นแถวสุดท้ายสามารถมีน้อยกว่า 4 ชุดได้ เอาหล่ะคับ จากข้อกำหนดนี้แสดงว่าเราต้อง บันทึกข้อมูลใน Excel ทั้งหมด 16 แถว (15 แถวแรกจะมีชุดข้อมูลแถวละ 4 ชุด แถวสุดท้ายจะมีข้อมูล 1 ชุด) และเนื่องจากการส่งชุดข้อมูลออกภายนอกนั้นชุดข้อมูลจะถูกกั้นด้วยเครื่องหมาย , ดังนั้นในการคำนวณของ Excel จะต้องบันทึกข้อมูลแต่ละชุดลงในแต่ละเซลล์โดยใน 1 ชุดข้อมูลต้องบันทึกแยก tn และ An ลงไปในแต่ละเซลล์ด้วย ดังนั้นใน 1 แถวจะต้องบันทึกผลลงไปในเซลล์ทั้งหมด 8 เซลล์ ยกเว้นแถวสุดท้ายอาจจะไม่ครบทั้งแปดเซลล์ ดังแสดงในตารางที่ 2

ตารางที่ 2 ตัวอย่างใน Worksheets ของ MS Excel

A B C D E F G H
1 t1 A1 t2 A2 t3 A3 t4 A4
2 t5 A5 t6 A6 t7 A7 t8 A8
16 t61 A61

ตรงนี้หล่ะคับที่เราต้องใช้เงื่อนไขการทำซ้ำและการตรวจสอบเงื่อนไขเพื่อให้ได้ชุดข้อมูลดังแสดงในภาพที่ 2 เอาหล่ะครับมาดูการกำหนด Macro และ ทำความเข้าใจกับ VBA Code กันครับ

  1. สร้าง Macro ชื่อ Amplitude ตามขั้นตอนที่เคยนำเสนอในบทความก่อนหน้านี้
  2. ใน Visual Basic Editor ท่านจะพบ Subrutene ชื่อ Amplitude ซึ่งเราจะทำการเขียน VBA Code สำหรับการคำนวณและกำหนดค่าการจำลองการเคลื่อนที่ลงในเซลล์ดังตารางที่ 2 โดยรายละเอียดของ VBA Code อธิบายได้ดังภาพที่ 2
  3. สร้างปุ่มกดและกำหนดป้ายชื่อเป็น Create และกำหนดมาโคร Amplitude ตามขั้นตอนที่ได้กล่าวมาในบทความที่ผ่านมา
  4. ทดสอบ macro โดยการคลิกปุ่ม Create จะได้ผลการทำงานของ macro ดังแสดงในภาพที่ 3

VBA Code

ภาพที่ 2 VBA Code (Amplitude Subrutene )

VBA Result

ภาพที่ 3 ผลการทำงานของ macro Amplitude ผ่านการคลิกปุ่ม Create

จากตัวอย่างที่ผมนำเสนอไป จะเห็นว่าหากเวลารวมมีค่าเพิ่มขึ้นจำนวนชุดข้อมูลก็จะเพิ่มมากขึ้น แต่การใช้งาน macro ยังสามารถทำงานได้เหมือนเดิม แต่สิ่งที่ต้องระวังคือ VBA Code ที่นำเสนอไปอาจเกิดข้อผิดพลาดขึ้นได้หากจำนวนชุดข้อมูลมีค่าเกินพิกัดของชนิดตัวแปรแบบ Integer วิธีการแก้ท่านผู้อ่านต้องเปลี่ยนชนิดข้อมูลของ Num เป็นแบบ Long ซึ่งทำให้แก้ไขข้อผิดพลาดนี้ได้

ในตัวอย่างนี้เป็นการแสดงการใช้เงื่อนไขการทำซ้ำและเงื่อนไขการตรวจสอบเพื่อช่วยในการคำนวณกรณีที่จำนวนข้อมูลมีเป็นจำนวนมากและลักษณะการคำนวณซ้ำๆกัน หวังว่าท่านผู้อ่านจะได้รับประโยชน์จากกรณีตัวอย่างนี้เพื่อนำไปใช้ในการแก้ปัญหาการคำนวณด้วย VBA Excel ต่อไป อ้อลืมไปครับ ท่านผู้อ่านคิดเหมือนผมมั้ยครับว่า macro นี้ยังใช้งานลำบากอยู่นิดหนึ่งครับ นั่นคือ เราต้องเข้าไปกำหนดค่า Total Time และ Time period ใน Subrutene Amplitude หากเราสามารถกำหนดค่าผ่าน Cell ใน Worksheet จะทำให้ทำงานได้สะดวกรวดเร็วกว่าเดิมครับ ลองนำไปแก้ไข VBA Code ตัวนี้ดูนะครับ

ของฝาก

VBA Data Type

ชนิดข้อมูล Integer มีช่วงในการเก็บข้อมูล –32,768 to 32,767

ชนิดข้อมูล Long มีช่วงในการเก็บข้อมูล –2,147,483,648 to 2,147,483,647

วันอังคารที่ 13 กรกฎาคม พ.ศ. 2553

VLOOKUP in Excel กับการค้นหาข้อมูลชนิด Text Format

เมื่ออาทิตย์ที่ผ่านมาสุดที่รักให้การบ้านมาหนึ่งชิ้นเกี่ยวกับการใช้ excel ค้นหาข้อมูลสินค้าตามรหัสและเมื่อหาเจอแล้วให้นำข้อมูลของปริมาณของสินค้าต่อกล่องไปคำนวณหาจำนวนกล่องซึ่งใช้บรรจุสินค้าใน Work Sheet ถัดไป เป็นไงครับเห็นโจทย์แล้วหลายท่านบอกว่าการใช้ excel แบบหมูๆ Search ด้วย VLOOKUP in Excel ซิ ผมก็คิดเช่นนั้นครับ ลองมาดูปัญหากัน ผมขอยกตารางมาให้ทุกท่านได้เข้าใจตรงกันดีกว่าครับ

สมมุติว่าผมมีตารางข้อมูลใน Work Sheet ที่ชื่อ Master Product ดังแสดงในตารางที่ 1 ครับ



ตารางที่ 1 ตาราง Master Product

ในแต่ละวันแฟนผมจะได้รับออร์เดอร์จากลูกค้าในการสั่งซื้อสินค้าแต่ละชนิดโดยข้อมูลการสั่งซื้อจะถูกบันทึกไว้ในไฟล์ Excel ที่ Work Sheet ชื่อ Order
ตัวอย่างข้อมูลดังแสดงในตารางที่ 2



ตารางที่ 2 ตาราง Order

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

ขั้นแรกเช็คหน่วยในหลัก D กันก่อนโดยใช้เงื่อนไข สูตร excel : OR ครับ สมมุติผมเริ่มเขียนในแถวที่สองหล่ะกัน เขียน สูตร excel ได้ดังนี้ OR(D2="ขด" , D2="ถง") เอาหล่ะคับ สูตร excel : OR จะคืนค่าจริง หากหน่วยใน D2 เป็น ขด หรือ ถง อย่างใดอย่างหนึ่ง และจะคืนค่าเท็จหากเป็นหน่วยอื่นๆ
จากนั้นเราจะเอาค่าที่คืนจาก สูตร excel : OR ไปเป็นเงื่อนไขใน สูตร excel : IF ครับโดยสามารถเขียนได้ดังนี้

IF(OR(D2="ขด" , D2="ถง") ,หากจริง, หากเท็จ)

มาดูต่อครับ หากเงื่อนไข สูตร excel : OR เป็นจริง แฟนผมบอกให้เอาค่าในหลักออเดอร์มาวางได้เลย ดังนั้นจะเขียน สูตร excel : ได้ต่อดังนี้

IF(OR(D2="ขด" , D2="ถง") ,C2, หากเท็จ)

ทีนี้หากเงื่อนไข สูตร excel : OR เป็นเท็จ เราก็ต้องหารจำนวนออเดอร์ของสินค้านั้นด้วยปริมาณบรรจุต่อถุงของสินค้าชนิดนั้น สามารถเขียน สูตร excel : ได้ต่อดังนี้

IF(OR(D2="ขด" , D2="ถง") ,C2, C2/ปริมาณบรรจุต่อถุงของสินค้าชนิดนั้น)

ปริมาณบรรจุต่อถุงของสินค้าชนิดนั้น เราสามารถหาได้จากข้อมูลในตาราง Master Product โดยค้นหาจากรหัสสินค้า ด้วยฟังก์ชัน VLOOKUP ซึ่งผมได้อธิบายไปแล้วในบทความที่ผ่านมา ขอยกมาใช้เลยครับ

ปริมาณบรรจุต่อถุงของสินค้าชนิดนั้น = VLOOKUP(A2,'Master Product'!$A$2:$C$4,3,0)
นำไปแทนในสูตรโดยรวมจะได้สูตรในหลัก E เพื่อหาจำนวนกล่องที่ต้องบรรจุสินค้าแต่ละชนิดดังนี้

IF(OR(D2="ขด" , D2="ถง") ,C2, C2/VLOOKUP(A2,'Master Product'!$A$2:$C$4,3,0))

เอาหล่ะครับ คำนวณได้เลย ผลการคำนวณแสดงได้ดังภาพที่ 1



ภาพที่ 1 ผลการคำนวณโดยใช้ excel

เป็นไงครับผลการคำนวณเป็นไปตามเงื่อนไขที่เราสั่งมั้ยครับ จะเห็นว่า excel ก็ทำงานตามคำสั่งนะครับ แล้วทำไม สองแถวแรกถึงแจ้งว่า #N/A ท่านที่ใช้ VLOOKUP อยู่บ้างแล้วคงแปลความหมายออกครับ มันบอกว่า ค้นหารหัสสินค้าที่ต้องการไม่พบครับ ตอนแรกผมงงมากบอกแฟนไปว่ารหัสสินค้าใน Master Product คงมีไม่ครบแน่ๆ มันถึงหาไม่เจอ แต่ก็ได้รับการยืนยันแบบจริงจังว่า มีครบทุกรหัส เอาแล้วไงครับ งานเข้า ทำไงดี
ก่อนแก้ปัญหาผมจึงสอบถามที่มาของข้อมูลใน Master Product เธอบอกว่านำเข้าจากโปรแกรมสำเร็จรูปตัวหนึ่ง เอาหล่ะครับเริ่มเห็นทางสว่าง จึงลองใช้ สูตร excel ที่จัดการด้าน Text มาช่วยตรวจสอบดูครับ อันดับแรก ผมลองเช็คความยาวของ รหัสสินค้า ด้วย สูตร excel : LEN(Text) ซึงจะคืนค่าความยาวของ Text ในเซลล์นั้นครับ ปรากฎว่าโชคดีมากครับ เพราะความยาวที่ สูตร excel : LEN คืนมาเท่ากับ 9 แต่หากนับตัวอักษรที่เห็นในรหัสสินค้ามันมี 7 หลัก นั่นไงครับเจอสาเหตุที่ VLOOKUP หารหัสสินค้าไม่เจอแล้ว สาเหตุคือ ข้อความของรหัสสินค้าที่นำเข้ามานอกจากมีตัวอักษร 7 ตัวแล้วยังมีช่องว่างแถมมาต่อท้ายด้วย 2 ช่อง ทำให้เมื่อนำรหัสที่ต้องการค้นหาจากตารางออเดอร์ซึ่งไม่มีช่องว่างเลย VLOOKUP เลยหาข้อมูลไม่เจอ วิธีแก้ของผมคือใช้ สูตร excel : LEFT เพื่อเอาเฉพาะข้อความที่เป็นตัวอักขระที่มองเห็นเท่านั้น โดยในที่นี้ผมทราบว่ารหัสสินค้าของแฟนผมมี 7 หลักเท่านั้น ดังนั้นผมจึงใช้ สูตร excel : ดังนี้
LEFT(text,7) เมื่อตัดช่องว่างออกไปเมื่อประมวลผลใหม่ก็ได้ภาพที่ 2 ครับ



ภาพที่ 2 ผลการคำนวณโดยใช้ excel หลังแก้ไข Text Format

จากปัญหาที่ผมได้นำเสนอจะสรุปได้ว่า
1. หากข้อมูลที่ต้องค้นหาด้วย สูตร excel : VLOOKUP เป็น Text Format เราต้องตรวจสอบข้อมูลให้แน่ใจว่าไม่มีอักขระที่มองไม่เห็นอยู่ใน Text
2. หาก Text Format ที่นำเข้ามาเป็นตัวเลขหมด ให้ใช้ สูตร excel : VALUE ใน excel แปลงเป็นตัวเลขก่อนซึ่งสามารถแก้ปัญหาในข้อที่ 1 ได้

ก็เป็นตัวอย่างประสบการณ์จริงของผมที่นำมาเสนอครับ หวังว่าคงเป็นประโยชน์กับท่านผู้อ่านครับ

ปล ข้อมูลที่นำเข้าจากโปรแกรมสำเร็จรูปอื่น จะพบปัญหาการดำเนินการกับช่องว่างภายในข้อความเนื่องจากช่องว่างดังกล่าวอาจจะไม่ใช่การเคาะ Space bar ลองเข้าไปอ่านดูในบทความ การใช้ excel แก้ปัญหาการค้นหาหรือลบช่องว่างภายในข้อความไม่ได้ดูนะครับ

วันศุกร์ที่ 9 กรกฎาคม พ.ศ. 2553

พื้นฐาน vba excel

เมื่อวานเย็นรังสิตฝนตกหนักมาก ถนนกลายเป็นคลองไปเลยครับ เอาแน่เอานอนกับธรรมชาติไม่ได้จริงๆ 5 โมงเย็นแดดจ้า 6 โมงเย็นฝนตกซะงั้นครับ
บทความนี้ผมชั่งใจอยู่นานว่าจะเขียนหรือไม่เนื่องจากเป็นเรื่องพื้นฐานของการเขียนโปรแกรมใน MS Excel ซึ่งในบทความที่ผ่านมาผมได้ยกตัวอย่างการเขียนมาโครสำหรับแก้ปัญหาการหาพื้นที่รูปหลายเหลี่ยมไปแล้ว แต่สุดท้ายผมก็ตัดสินใจได้ว่า จำเป็นต้องเขียนหัวข้อนี้เพื่อให้ท่านผู้อ่านได้เข้าใจพื้นฐานของการเขียนโปรแกรมบน MS Excel และรู้จักองค์ประกอบต่างๆใน MS Excel เพื่อให้เกิดประโยชน์ในการอ่านหรือศึกษาบทความที่ผมจะนำเสนอต่อๆไป แต่เนื่องด้วยเป็นเรื่องของพื้นฐาน ผมคงจะเขียนให้จบในครั้งเดียวคงเป็นไปได้ยาก ดังนั้นผมจะทยอยเรื่องพื้นฐานลงในบทความนี้เพื่อให้ท่านผู้อ่านมีความเข้าใจตรงกันก่อนครับ
ทำความรู้จักองค์ประกอบของ MS Excel เพื่อที่จะสามารถควบคุมส่วนประกอบเหล่านั้นได้ถูกต้อง ซึ่งจะประกอบไปด้วย 4 องค์ประกอบดังนี้
1. Workbook เป็นส่วนที่ใหญ่ที่สุดในไฟล์ Excel ทำหน้าที่เก็บข้อมูลทั้งหมดในไฟล์ โดยภายในจะประกอบด้วย Worksheet ต่างๆ(โดยปกติ Excel จะสร้่างWorksheet มาให้ 3 Worksheet ซึ่งผู้ใช้สามารถเพิ่มหรือลบWorksheetได้)
2. Worksheet คือ แผ่นงานที่ประกอบไปด้วยแถวและหลักในส่วนที่ตัดกันของแถวและหลักจะเรียกว่า เซลล์(Cell) ซึ่งสามารถพิมพ์ข้อมูลหรือสูตรต่างๆลงไปเพื่อคำนวณผล
3 Modules คือพื้นที่สำหรับเก็บเก็บรหัส คำสั่ง รวมถึงมาโครต่างๆที่ถูกบันทึกไว้
4 Class Modules คล้ายกับ Modules แต่จะใช้สร้างวัตถุขึ้นใหม่พร้อมทั้งกำหนดคุณสมบัติต่างๆของวัตถุนั้น



ภาพที่ 1 VBA Project
SKA36FJYPNVK

วันอาทิตย์ที่ 4 กรกฎาคม พ.ศ. 2553

Determine polygon area โดยใช้เทคนิค VBA in excel (Macro excel)

เข้าสู่ฤดูฝนอย่างเต็มตัวกันแล้วนะครับท่านผู้อ่าน ฟุตบอลโลก 2010 กำลังโม่แข้งกันงวดเข้ามาทุกที เยอรมันทีมโปรดของผมยังอยู่ในเส้นทางลุ้นแชมป์ อีกประมาณ 1 สัปดาห์คงทราบผลกัน รักษาสุขภาพกันด้วยนะครับ
บทความที่ต้องการนำเสนอทุกท่านวันนี้เป็นภาคต่อจากที่เคยนำเสนอระเบียบวิธีในการคำนวณหาพื้นที่หลายเหลี่ยมไปแล้ว และได้กล่าวทิ้งท้ายถึงเทคนิคที่จะนำมาใช้กับระเบียบวิธีดังกล่าว บทความนี้จึงขอนำเสนอเทคนิคการใช้ VBA in excel เข้ามาช่วยในการแก้ปัญหานี้ ซึ่งผู้อ่านต้องเข้าใจพื้นฐานของ VBA Excel มาพอสมควร โดยขอยกตัวอย่างการหาพื้นที่รูปหลายเหลี่ยมซึ่งมีจุดยอด (vertex) ในระบบพิกัดคาร์ทีเซียน ดังนี้ (0,0) , (10,0) , (10 , 10) , (5,10) , (5,15) , (0,10) , (0,0) เมื่อลากเส้นตรงเชื่อมจุดยอดจะได้รูปหลายเหลี่ยมดังแสดงในภาพที่ 1

ภาพที่ 1 รูปหลายเหลี่ยม (Polygon)

จากภาพพบว่ารูปหลายเหลี่ยมประกอบไปด้วยจุดยอดทั้งหมด 7 จุด และเมื่อพิจารณารูปหลายเหลี่ยมจะเห็นได้ว่าเกิดจากรูปร่างอย่างง่ายสองรูปประกอบเข้าด้วยกัน ได้แก่ รูปสี่เหลี่ยมจัตุรัส(A2) และรูปสามเหลี่ยมหน้าจั่ว A1 ดังนั้นสามารถคำนวณหาพื้นที่รูปหลายเหลี่ยมได้ง่ายๆดังนี้

A (polygon) = A1 + A2 = (5*5/2) + 10*10 = 112.5 ตารางหน่วย

ทีนี้หากต้องการใช้เทคนิค VBA ช่วยในการคำนวณหาพื้นที่จะเริ่มดำเนินการอย่างไร เรามาเริ่มกันเลยดีกว่า
เริ่มจากการนำเข้าข้อมูลจุดยอดของรูปหลายเหลี่ยมมายัง Excel โดยกำหนดให้คอลัมน์ A เป็นพิกัด X คอลัมน์ B เป็นพิกัด Y ดังแสดงในภาพที่ 2


ภาพที่ 2 พิกัดจุดยอดของ Polygon ในระบบพิกัดคาร์ทีเซียน

คลิก ปุ่ม Alt + F8 เพื่อจัดการมาโครสำหรับใช้คำนวณพื้นที่ โดยกำหนดชื่อมาโครเป็น PolygonArea ดังแสดงในภาพที่ 3 คลิกปุ่ม สร้างเพื่อเข้าสู่หน้า Visual Basic Editor โดยจะพบกับ Subroutine PolygonArea ดังรูปที่ 4



ภาพที่ 3 สร้าง Macro Excel


ภาพที่ 4 Visual Basic Editor

เราจะเขียนโค้ดสำหรับคำนวณพื้นที่ของ Polygon ใน Subroutine PolygonArea ตามระเบียบวิธีที่เคยนำเสนอมากันครับ โดยมีรายละเอียดดังนี้
แนวคิด
ในการคำนวณพื้นที่รูปหลายเหลี่ยมจะคำนวณได้จากผลรวมของ Xi*Yi+1 ลบด้วยผลรวมของ Xi+1*Yi หารด้วย 2 ดังแสดงในภาพที่ 5 จากสูตรที่กล่าวมาจะพบว่า แถวสุดท้ายที่สามารถหาผลคูณได้คือแถวที่ n-1 เนื่องจากแถวถัดไปคือแถวที่ n-1+1 นั่นคือ n เนื่องจากแถวที่ n+1 ไม่มีข้อมูล



ภาพที่ 5 ระเบียบวิธีการคำนวณ


ภาพที่ 6 แสดงการคำนวณแถวที่ n-1



ภาพที่ 7 code vba และคำอธิบาย

สร้างปุ่มกด และกำหนดมาโคร PolygonArea ให้กับปุ่มกดนี้ ดังแสดงในภาพที่ 8



ภาพที่ 8 ผลการคำนวณพื้นที่รูปหลายเหลี่ยม

ท่านผู้อ่านจะเห็นว่าการคำนวณด้วย มาโคร PolygonArea ให้ผลลัพธ์เท่ากับการคำนวณด้วยสูตรการคำนวณทั่วไป แต่หากเป็นรูปหลายเหลี่ยมที่มีจุดยอดเป็นจำนวนมากดังนำเสนอในบทความที่ผ่านมา เรายังสามารถใช้ มาโคร PolygonArea ที่ได้พัฒนานี้ช่วยคำนวณได้เหมือนเดิมโดยที่ไม่ต้องปรับเปลี่ยน และสามารถใช้งานได้ง่ายเพียงคลิกปุ่ม Polygon Area
มาโคร PolygonArea ที่ได้พัฒนาขึ้นยังไม่สมบูรณ์ที่สุดขอฝากท่านผู้อ่านพัฒนามาโครนี้ให้ถูกต้องสมบูรณ์โดยให้ค่าพื้นที่รูปหลายเหลี่ยมที่ถูกต้อง บักที่ยังไม่ได้แก้ไขเป็นบักที่ทำให้ผลการคำนวณอาจจะไม่ถูกต้องได้เป็นบางกรณี ขอบคุณครับ
Yahoo bot last visit powered by  Ybotvisit.com