tag:blogger.com,1999:blog-69891620054628012502024-03-21T20:02:17.845+07:00IT for HR (ความรู้ IT เพื่อนักบริหารทรัพยากรมนุษย์)วัตถุประสงค์ เพื่อแบ่งปันความรู้และประสบการณ์ เกี่ยวกับการประยุกต์ใช้เทคนิคด้านไอที (ทั้งฮาร์ดแวร์และซอฟต์แวร์) ในฐานะเครื่องมือสำคัญในการทำงานของบุคลากรยุคใหม่ (Modern HR) เนื้อหาที่นำมาแบ่งปันนี้ ส่วนใหญ่เป็นการนำเอาประสบการณ์จริงมาบอกเล่า โดยเฉพาะเรื่องการใช้โปรแกรม MS Excel ปัญหาในการใช้งาน การวิเคราะห์โจทย์ การสร้างสูตรคำนวณ เพื่อให้ผู้อ่านนำไปปรับใช้กับงานของตนเองได้ หากมีข้อแนะนำใดๆ กรุณาติดต่อที่ Email: ysamroeng@gmail.comครูเอกhttp://www.blogger.com/profile/01255634988258604526noreply@blogger.comBlogger55125tag:blogger.com,1999:blog-6989162005462801250.post-28950386197452478712017-01-16T15:50:00.000+07:002017-01-16T15:55:25.597+07:00การเก็บข้อมูลเป็นตารางฐานข้อมูล (Database, Table)<div class="separator" style="clear: both; text-align: left;">
มีลูกศิษย์คนหนึ่ง ส่งเมล์มาสอบถามเกี่ยวกับการทำการแจ้งเตือน เกี่ยวกับวันที่ ที่เกินระยะเวลาที่กำหนด เพื่อให้แสดงแถบสีเป็นที่พึงสังเกตได้ง่าย ซึ่งก็คือการใช้ Conditional formatting หรือ การจัดรูปแบบตามเงื่อนไข นั่นเอง</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOa0v2-qYEcIbjKtSb4DDKMPqjTIoRJYvzMjEe99gQ-Il5S3fmvv2zOj7FvEBr-WCRXjVQVHO8h15df9BJrujFUzABrRU4ijBc36a9d8t8LbVHkJ4GKlAYV74PUczWnv4f_ZZxfAaSVRY/s1600/16-1-2017+14-42-46+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="232" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOa0v2-qYEcIbjKtSb4DDKMPqjTIoRJYvzMjEe99gQ-Il5S3fmvv2zOj7FvEBr-WCRXjVQVHO8h15df9BJrujFUzABrRU4ijBc36a9d8t8LbVHkJ4GKlAYV74PUczWnv4f_ZZxfAaSVRY/s400/16-1-2017+14-42-46+PM.png" width="400" /></a></div>
<br />
แต่เมื่อดูไฟล์ที่แนบมา พบปัญหาใหญ่กว่าก็คือ รูปแบบการเก็บข้อมูลที่ไม่ถูกต้อง (ดังรูป) ส่วนแรกก็คือ ตารางข้อมูลดังกล่าว ไม่เป็นรูปแบบฐานข้อมูล <span style="color: red;">มีหัวคอลัมน์หลายแถว มีการผสานเซล (Merge cell) เยอะมาก และตำแหน่งไม่แน่นอน เก็บข้อมูลตัวเลข ตัวอักษร ปะปนกัน</span> ซึ่งยากต่อการอ้างอิงในสูตร<br />
<br />
แต่เนื่องจากความต้องการนี้ ไม่ได้เอาตารางฐานข้อมูลไปประมวลผล ฉะนั้น หลายๆ ประเด็นก็พอจะมองข้ามได้ ยกเว้น เรื่องของ<span style="color: blue;"><b>ประเภทข้อมูล</b> (Data type)</span> ที่ไม่ถูกต้อง ซึ่งที่พบก็คือ พิมพ์วันที่ไม่เป็นรูปแบบวันที่ (Date type) มีการใส่เครื่องหมาย <b><span style="color: red;">'</span></b> ไว้ข้างหน้าวันที่ทุกเซล เช่น <b><span style="color: red;">'13/10/2015</span></b> ทำให้ข้อมูลวันที่นั้น มีรูปแบบเป็นข้อความ (Text) นอกจากนั้น ก็มีการพิมพ์ข้อความหมายเหตุอื่นๆ ในลงวันที่บางเซลด้วย<br />
<br />
การเก็บข้อมูลให้เป็นตารางฐานข้อมูล เป็นเรื่องที่ผมมักจะแนะนำเสมอ แต่ผู้ใช้ส่วนใหญ่ก็ยังไม่ค่อยทำตาม ชอบที่จะสร้างแบบฟอร์ม แล้วกรอกข้อมูลตามอำเภอใจ เพราะการทำตารางฐานข้อมูล จะต้องมาสร้างหน้าผลลัพธ์ (Output) ต่างหากอีก ซึ่งผู้ใช้อาจจะมองว่ายุ่งยาก และเสียเวลา (หารู้ไม่ว่า เป็นผลดีอย่างมาก ในระยะยาว)<br />
<br />
ผมมี <b>คำแนะนำและข้อห้ามสำคัญ</b> ในการออกแบบตารางฐานข้อมูล มาฝาก ดังนี้<br />
<br />
1. ส่วนที่เป็นหัวคอลัมน์ ห้ามมีหลายบรรทัด<br />
<br />
2. ชื่อของหัวคอลัมน์ ห้ามซ้ำกัน<br />
<br />
3. ห้ามผสานเซล (Merge cell)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyP8uywDU8rGOCZ-VP9yALOMAOE0d3g02YAJHWd7TBZveaJChIn2TAXrg2KEyM1TTbojP6kdYciHaPLhQi6OwVH4ulttPHz9z8LwFCYolZ_DNZSc0JPqRNhSbDiTwTUY8VrjDgcH_4Fuk/s1600/16-1-2017+15-27-33+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="121" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyP8uywDU8rGOCZ-VP9yALOMAOE0d3g02YAJHWd7TBZveaJChIn2TAXrg2KEyM1TTbojP6kdYciHaPLhQi6OwVH4ulttPHz9z8LwFCYolZ_DNZSc0JPqRNhSbDiTwTUY8VrjDgcH_4Fuk/s400/16-1-2017+15-27-33+PM.png" width="400" /></a></div>
<br />
4. ห้ามเก็บข้อมูลตัวเลข รวมกับตัวอักษร ในเซลเดียวกัน โดยเฉพาะเซลที่ต้องนำไปคำนวณ เช่นคำว่า <span style="color: red;">"500 บาท"</span><br />
<br />
5. ห้ามเก็บข้อมูลในแนวขวาง แต่ให้เก็บในแนวตั้ง เรียงต่อเนื่องกันลงมา<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheJR0NF2VVJtuxk6UMNuYXtlVGKUAmOZPfj7AJ5D9ikZzjEzcc1eZZHFKsv_dUenYNwWKzg11YJFKVtIQ6PVp1c5VsL3HH2e15pIG8kMgR5tGb_1uDzbLbP3o1bnZb35uq8Cg3tAagB0E/s1600/16-1-2017+15-34-36+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheJR0NF2VVJtuxk6UMNuYXtlVGKUAmOZPfj7AJ5D9ikZzjEzcc1eZZHFKsv_dUenYNwWKzg11YJFKVtIQ6PVp1c5VsL3HH2e15pIG8kMgR5tGb_1uDzbLbP3o1bnZb35uq8Cg3tAagB0E/s400/16-1-2017+15-34-36+PM.png" width="400" /></a></div>
<br />
6. ห้ามมีผลรวมย่อย หรือหมายเหตุใดๆ มาแทรกในช่วงพื้นที่ตารางข้อมูล<br />
<br />
7. ห้ามมีคอลัมน์ว่าง หรือแถวว่าง มาคั่นในตารางข้อมูล มิฉะนั้น Excel จะมองเป็นคนละตาราง<br />
<br />
8. และไม่จำเป็น ก็อย่าค้างสูตรคำนวณไว้ในตารางข้อมูล เพราะการค้างสูตรเอาไว้ จะมีผลต่อความเร็วในการคำนวณ (โดยเฉพาะเครื่องที่มี Ram น้อยๆ) กรณีจำเป็นต้องมีสูตร ในคอลัมน์เดียวกันต้องเป็นสูตรเดียวกัน<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizjSzxKA6frs1OyPre_-vCW8iGzOoLPDTyol4rKC8SHBh_5zD9DyRamZdsWbqP8tdcnJSUk97CKtVjRtVuD7UKdjtkZ9WuAjs2EwM16hyrPj-3idjybH1-RoG7Z8O6_hZjpXhDSw_BTCc/s1600/16-1-2017+15-41-42+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="310" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizjSzxKA6frs1OyPre_-vCW8iGzOoLPDTyol4rKC8SHBh_5zD9DyRamZdsWbqP8tdcnJSUk97CKtVjRtVuD7UKdjtkZ9WuAjs2EwM16hyrPj-3idjybH1-RoG7Z8O6_hZjpXhDSw_BTCc/s400/16-1-2017+15-41-42+PM.png" width="400" /></a></div>
<br />
<br />
ถ้าออกแบบตารางข้อมูลในเบื้องต้นได้อย่างนี้แล้ว จะสามารถนำไปใช้งานได้สะดวกในระยะยาว ทั้งการประมวลผลข้อมูล การสร้างเงื่อนไขต่างๆ หรือการค้นหาและดึงข้อมูลมาแสดง<br />
<br />ครูเอกhttp://www.blogger.com/profile/01255634988258604526noreply@blogger.com0tag:blogger.com,1999:blog-6989162005462801250.post-46862795375530134272017-01-08T18:20:00.001+07:002017-01-09T07:32:13.362+07:00ช่วงข้อมูลแบบไดนามิก (Dynamic Range) การเขียนสูตรใดๆ เพื่ออ้างอิงไปที่เซลใดเซลหนึ่ง (Cell) หรือช่วงใดช่วงหนึ่ง (Range) <span style="background-color: #ffe599; color: #cc0000;">ที่ไม่แน่นอน</span> โดยเฉพาะการสรุปข้อมูลจากตารางฐานข้อมูล (Database) <span style="background-color: #ffe599; color: #cc0000;">ที่จำนวนรายการข้อมูลอาจจะมีเพิ่มขึ้น(หรือลดลง)ตลอดเวลา</span><br />
<br />
ตัวอย่างเช่น (จากรูปที่ 1) หาผลรวมด้วย SUM, หาค่าสูงสุด-ต่ำสุด ด้วย MAX-MIN หรือการหาค่าเฉลี่ยด้วย AVERAGE เป็นต้น (รวมถึงการเขียนสูตรขั้นสูงด้วยฟังก์ชันอื่นๆ ที่ต้องมีการอ้างอิงช่วงข้อมูลด้วย) ดังนั้น การเขียนสูตรที่อ้างอิงไปยังเซลหรือช่วงเซลที่คงที่ (Static) จึงไม่สะดวกต่อการใช้งานจริง<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxhSPC2DOfnIbqP-GGFx4DfOU2rAeDsYSonHFMPcUr4QRZJIBlvMu-7rNYS5tP748wyskyy-LuNeHFJfp8_HbIzICChY4DeBCPRqEmn7RnN_Qs19omk5CIs1RwQiYaR7lEH0SxtHqPZ4s/s1600/6-1-2017+12-49-44+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="216" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxhSPC2DOfnIbqP-GGFx4DfOU2rAeDsYSonHFMPcUr4QRZJIBlvMu-7rNYS5tP748wyskyy-LuNeHFJfp8_HbIzICChY4DeBCPRqEmn7RnN_Qs19omk5CIs1RwQiYaR7lEH0SxtHqPZ4s/s400/6-1-2017+12-49-44+PM.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="color: #cc0000; font-size: x-small;">รูปที่ 1</span></div>
<br />
<br />
เพราะเมื่อมีการเพิ่มรายการข้อมูลเข้ามาใหม่ สูตรที่เขียนไว้เดิมนั้น จะไม่ครอบคลุมไปถึงรายการใหม่ จะต้องทำการแก้ไขสูตรทุกครั้ง หากมีแค่สูตรเดียวก็คงไม่ยุ่งยากมาก แต่ถ้ามีหลายสูตร ความยุ่งยากก็ตามมา เพราะต้องแก้ให้ครบ มิฉะนั้น การนำผลลัพธ์ไปใช้งานก็อาจจะผิดพลาดได้ เพราะสูตรเดิมนั้น ยังอ้างอิงแค่ช่วงเซลเดิม ไม่เปลี่ยนแปลง<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuK1gV67OIIdvWn-XGHgM999kt7bqj_hHwI-YDzvgAn6Ofws-avtZwJosq92YpmnbzutjiaUDaIQ8VOaBB8oCWife45hV_uzmECQt81RhKBDXdJIkLpn4OnbR9jj1dT0KYPXOYU7Si44Y/s1600/6-1-2017+13-22-34+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="235" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuK1gV67OIIdvWn-XGHgM999kt7bqj_hHwI-YDzvgAn6Ofws-avtZwJosq92YpmnbzutjiaUDaIQ8VOaBB8oCWife45hV_uzmECQt81RhKBDXdJIkLpn4OnbR9jj1dT0KYPXOYU7Si44Y/s400/6-1-2017+13-22-34+PM.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="color: #cc0000; font-size: x-small;">รูปที่ 2</span></div>
<br />
<br />
แนวทางการแก้ไข มีด้วยกัน 3 วิธีใหญ่ๆ คือ<br />
<ol>
<li><b><span style="color: blue;">ระบุช่วงข้อมูลแบบไดนามิก</span></b> (Dynamic Range) ด้วยฟังก์ชัน</li>
<ul>
<li>การใช้ฟังก์ชัน OFFSET</li>
<li>การใช้ฟังก์ชัน INDEX</li>
<li>การใช้ฟังก์ชัน INDIRECT</li>
</ul>
<li><b><span style="color: blue;">การตั้งชื่อช่วงข้อมูลแบบไดนามิก</span></b> (Dynamic Range Name) แล้วนำชื่อ ไปใช้ในสูตร</li>
<li><b><span style="color: blue;">การแปลงช่วงข้อมูลให้เป็นตาราง</span></b> (Table)</li>
</ol>
<br />
<br />
<hr />
<b><span style="color: blue; font-size: large;">การระบุช่วงข้อมูลแบบไดนามิกด้วยฟังก์ชัน OFFSET</span></b><br />
<br />
โครงสร้างของฟังก์ชัน OFFSET คือ<br />
<span style="background-color: #ffe599;">OFFSET(<span style="color: #cc0000;"><i>reference, rows, cols, </i>[<i>height</i>], [<i>width</i>]</span>)</span><br />
หรือ OFFSET(<span style="color: #cc0000; font-size: x-small;"><i>เซลฐาน, ระยะแถว, ระยะคอลัมน์, </i>[<i>ความสูงช่วง</i>], [<i>ความกว้างช่วง</i>]</span>)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgG3G0yyWvKg9aWmBfknW-QVneH18VQ3WMSCI9BGtXm63qmOB09ntUUKOJ7J6mQd9FgniXQa_673gM9F_mFYcgvUb8kehvMZWU9tj5kWzQMMWNDGhtf5w_5SJZYRZ1dlgKLJltm5t0hi-Q/s1600/6-1-2017+13-31-21+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="235" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgG3G0yyWvKg9aWmBfknW-QVneH18VQ3WMSCI9BGtXm63qmOB09ntUUKOJ7J6mQd9FgniXQa_673gM9F_mFYcgvUb8kehvMZWU9tj5kWzQMMWNDGhtf5w_5SJZYRZ1dlgKLJltm5t0hi-Q/s400/6-1-2017+13-31-21+PM.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="color: #cc0000; font-size: x-small;">รูปที่ 3</span></div>
<br />
<b> เซลฐาน</b> (reference) คือ ตำแหน่งเซลที่จะใช้เป็น<b><span style="color: #cc0000;">จุดอ้างอิง</span></b>ไปยัง<b><span style="color: #cc0000;">เซลเริ่มต้น</span></b> (ซึ่งอาจจะเป็นจุดเดียวกันกับเซลเริ่มต้นก็ได้)<br />
<br />
เซลฐาน จะเป็นเซลไหนก็ได้ในชีทนั้นๆ แล้วระบุระยะจากเซลฐานไปยังเซลเริ่มต้น เป็น<b>ระยะแถว</b> (rows) และ<b>ระยะคอลัมน์</b> (cols) ถ้าใช้เซลฐานเป็นตำแหน่งเดียวกับเซลเริ่มต้น ให้ระบุระยะแถวและระยะคอลัมน์เป็น 0<br />
<br />
ส่วน<b>ความสูงช่วง</b> (height) และ<b>ความกว้างช่วง</b> (width) ค่าปกติเป็น 1 ซึ่งจะใส่หรือไม่ก็ได้ (ถ้าไม่ใช่การอ้างอิงเป็นช่วง)<br />
<br />
การนับระยะแถว <b>"ลง"</b> มาจากเซลฐาน จะมีค่าเป็น <b>"บวก"</b> ถ้านับ <b>"ขึ้น"</b> จะมีค่าเป็น <b>"ลบ"</b><br />
<br />
ทำนองเดียวกัน การนับระยะคอลัมน์ ไปทาง <b>"ขวา"</b> ของเซลฐาน จะมีค่าเป็น <b>"บวก"</b> ถ้านับไปทาง <b>"ซ้าย"</b> จะมีค่าเป็น <b>"ลบ"</b><br />
<br />
จากรูปที่ 3 ช่วงข้อมูลที่อ้างอิงของสูตร คือ C8:C21 ซึ่ง C8 ถือเป็นเซลเริ่มต้น ดังนั้น ถ้าใช้ C8 เป็นเซลฐาน ก็สามารถเขียนเป็น OFFSET ได้ดังนี้<br />
=OFFSET(<span style="color: #cc0000;">C8</span>,0,0)<br />
<br />
แต่ถ้ามีการลบแถวที่ 8 ออก สูตรจะเกิดข้อผิดพลาด <span style="color: red;">#REF!</span> (เพราะใช้ C8 เป็นเซลฐาน) ดังนั้น ในทางปฏิบัติ ขอแนะนำให้ใช้ C7 เป็นเซลฐาน แล้วนับลงมาหนึ่งแถว เพื่อใช้เป็นเซลเริ่มต้น<br />
=OFFSET(<span style="color: #cc0000;">C7</span>,1,0)<br />
<div>
<br /></div>
<div>
ช่วงเซลที่อ้างอิงตามสูตร(ในรูป)คือ C8:C21 (มีจำนวน 14 แถว) ซึ่งการจะนับว่าช่วงข้อมูลมีกี่แถวนั้น สามารถใช้ฟังก์ชัน COUNT หรือ COUNTA ช่วยในการนับได้ ขึ้นอยู่กับว่า เราจะนับข้อมูลด้วยเงื่อนไขอะไร</div>
<div>
<br /></div>
<div>
จากตัวอย่างในรูปที่ 3 คอลัมน์ A ช่วง A1:A5 เป็นข้อความ (Text), A6 เป็นเซลว่าง, A7 เป็นข้อความ และ A8:A21 ที่เป็นช่วงข้อมูลนั้น เป็นวันที่ (Date) ซึ่งเป็นข้อมูลประเภทตัวเลข (Number)<br />
<br />
ดังนั้น ถ้านับทั้งคอลัมน์ A ด้วย COUNT จะนับเฉพาะเซลที่เป็นวันที่ (ตัวเลข) ก็จะได้ 14 เซล (หรือ 14 แถว) ซึ่งก็คือช่วงเซลอ้างอิ่งนั่นเอง ดังนั้น การระบุช่วงเซลด้วย OFFSET ในที่นี้คือ</div>
<div>
OFFSET(<span style="color: #cc0000;">C7</span>,1,0,<span style="color: #cc0000;">COUNT(A:A)</span>,1)</div>
<div>
<br /></div>
<div>
แต่เนื่องจากผมได้นับจำนวนรายการด้วยฟังก์ชัน COUNT ไว้แล้วที่ C1 ดังนั้น จึงสามารถอ้างอิงจำนวนแถวด้วยผลลัพธ์ใน C1 ก็ได้ ดังนี้</div>
<div>
OFFSET(<span style="color: #cc0000;">C7</span>,1,0,<span style="color: #cc0000;">C1</span>,1)</div>
<div>
<br /></div>
<div>
เมื่อระบุช่วงข้อมูลได้แล้ว ก็สามารถนำช่วงข้อมูล(ที่เป็น OFFSET) ไปใช้งานได้แล้ว เช่น หาผลรวม หาค่าเฉลี่ย ฯลฯ เป็นต้น โดยเมื่อมีการเพิ่มข้อมูลต่อท้ายเข้าไป ฟังก์ชัน COUNT จะนับจำนวนรายการให้โดยอัตโนมัติ ส่งผลให้ OFFSET ขยายช่วงอ้างอิงออกไปโดยอัตโนมัติเช่นกัน<br />
<br />
เนื่องจากการระบุข้อมูลเป็นช่วงเซล ไม่สามารถแสดงผลในเซลใดๆ ได้โดยลำพัง จึงต้องใช้ร่วมกับฟังก์ชันที่ต้องการช่วงข้อมูล เช่น <span style="background-color: #ffe599;"><span style="color: blue;"><b>=SUM(</b></span>OFFSET(<span style="color: #cc0000;">C7</span>,1,0,<span style="color: #cc0000;">C1</span>,1)<span style="color: blue;"><b>)</b></span></span> เป็นต้น<br />
<br />
<br />
หมายเหตุ : อ่านเพิ่มเติมเกี่ยวกับการใช้ OFFSET ได้ที่<br />
http://it-for-hr.blogspot.com/2010/09/offset-dynamic.html?view=sidebar&m=1</div>
<div>
<br /></div>
<div>
<br />
<br />
<hr />
<b><span style="color: blue; font-size: large;">การระบุช่วงข้อมูลแบบไดนามิกด้วยฟังก์ชัน INDEX</span></b></div>
<div>
<br /></div>
ฟังก์ชัน INDEX จะส่ง <b><span style="color: blue;">"ค่า"</span></b> หรือ <span style="color: blue;"><b>"เซลอ้างอิง"</b></span> (ก็ได้) ไปยังค่าที่อยู่ภายในตารางหรือช่วงข้อมูล โดยมีโครงสร้างแบบง่ายๆ (สำหรับกรณีนี้) คือ<br />
<div>
<span style="background-color: #ffe599;">INDEX(<span style="color: #cc0000;"><i>reference, row_num</i></span>)</span><br />
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPGWMa0Kj5MV6EtFxUVsczXlv92z52LZthf8CsIXJttcfegykIduNTjFCE28rRUkAZ1mwxOSMVO0fCfSh8QcQ_1QFGvcQorl1eHTetrLpPTWQGD7zPDT8QopQzT1fON0NxAm74E3Omy_8/s1600/6-1-2017+13-42-09+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="272" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPGWMa0Kj5MV6EtFxUVsczXlv92z52LZthf8CsIXJttcfegykIduNTjFCE28rRUkAZ1mwxOSMVO0fCfSh8QcQ_1QFGvcQorl1eHTetrLpPTWQGD7zPDT8QopQzT1fON0NxAm74E3Omy_8/s400/6-1-2017+13-42-09+PM.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="color: #cc0000; font-size: x-small;">รูปที่ 4</span></div>
<br />
จากตัวอย่างในรูปที่ 4 เซลเริ่มต้นคือ C8 ซึ่งโดยปกติก็จะคงที่ เพราะเป็นเซลแรกของช่วงข้อมูล แต่เซลสุดท้าย หรือ C21 จะเปลี่ยนไปเรื่อยๆ เมื่อจำนวนรายการ เพิ่ม หรือ ลด<br />
<br />
เราจึงสามารถหาตำแหน่ง <b><span style="color: blue;">"เซลสุดท้าย"</span></b> ของคอลัมน์ C ได้ ด้วยการใช้ INDEX<br />
<br />
แต่ก่อนอื่น เราต้องรู้ก่อนว่า <span style="color: blue;">"ข้อมูลแถวสุดท้าย คือแถวที่เท่าไหร่?"</span><br />
<br />
จากการนับทั้งคอลัมน์ A ด้วย COUNT ในหัวข้อที่แล้ว จะนับเฉพาะเซลวันที่เท่านั้น แต่หากจะนับทุกเซลในคอลัมน์ A (ที่ไม่ใช่เซลว่าง) เราจะนับด้วยฟังก์ชัน COUNTA<br />
<br />
แต่เนื่องจากช่วง A1 ไปจนถึงเซล A21 ซึ่งเป็นเซลสุดท้ายในคอลัมน์ A นั้น มี A6 เป็นเซลว่างอยู่หนึ่งเซล ทำให้ COUNTA นับได้แค่ 20 แถว ดังนั้น ถ้าต้องการระบุแถวสุดท้าย (แถวที่ 21) จึงต้องบวกเพิ่มอีกหนึ่ง ดังนี้<br />
=COUNTA(A:A)+1<br />
<br />
ถ้าเราเขียนสูตร <span style="color: blue;">=INDEX(C:C, </span><span style="color: #cc0000;">21</span><span style="color: blue;">)</span> หรือ <span style="color: blue;">=INDEX(C:C, </span><span style="color: #cc0000;">COUNTA(A:A)+1</span><span style="color: blue;">)</span> ก็จะได้ผลลัพธ์เป็น <b>932.00</b> ซึ่งเป็นค่าสุดท้ายในแถวที่ 21 ของคอลัมน์ C นั่นเอง<br />
<br />
จากตัวอย่างในรูปที่ 4 ผมใช้ COUNTA+1 นับจำนวนแถวไว้ที่ E10 แล้ว ดังนั้น จึงใช้การอ้างอิงไปที่ E10 ดังนี้<br />
<span style="color: blue;">=INDEX(C:C, </span><span style="color: #cc0000;">E10</span><span style="color: blue;">)</span><br />
<br />
ดังนั้น ถ้าต้องการอ้างอิงช่วงข้อมูล C8:C21 จึงสามารถระบุช่วงได้ ดังนี้<br />
<b>C8:</b><span style="color: blue;">INDEX(C:C, </span><span style="color: #cc0000;">COUNTA(A:A)+1</span><span style="color: blue;">)</span> หรือ <b>C8:</b><span style="color: blue;">INDEX(C:C, </span><span style="color: #cc0000;">E10</span><span style="color: blue;">))</span><br />
<div>
<br />
ทำนองเดียวกัน เนื่องจากการระบุข้อมูลเป็นช่วงเซล ไม่สามารถแสดงผลในเซลใดๆ ได้โดยลำพัง จึงต้องใช้ร่วมกับฟังก์ชันที่ต้องการช่วงข้อมูล เช่น <span style="background-color: #ffe599;"><span style="color: blue;"><b>=SUM( </b></span><b>C8:</b><span style="color: blue;">INDEX(C:C, </span><span style="color: #cc0000;">E10</span><span style="color: blue;">))</span> <span style="color: blue;"><b>)</b></span></span> เป็นต้น<br />
<br />
<br />
<br />
<hr />
<b><span style="color: blue; font-size: large;">การระบุช่วงข้อมูลแบบไดนามิกด้วยฟังก์ชัน INDIRECT</span></b></div>
<br />
ทีแรกไม่คิดว่าจะเขียนเทคนิคนี้ เพราะในทางปฏิบัติแล้ว การใช้ INDIRECT ไม่ค่อยจะคล่องตัวเท่ากับสองวิธีแรก แต่เพื่อให้เห็นเทคนิคการระบุช่วงแบบ Dynamic ที่หลากหลาย จึงแนะนำอีกวิธีหนึ่งไว้ให้พิจารณากัน<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGZeyi4NA0OImh0HimFLET2FaKEaUYda4b3g6CPQeFsxZ9PfOLOSpWHjzRncoRzumvKhoGuWGfw7uKQxUlNwXwAxNkkI0RpWE_gzH51URAEVL8O4IFs5FnZRCTrItfRWdr3IbriCHj_pU/s1600/6-1-2017+19-10-36+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="285" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGZeyi4NA0OImh0HimFLET2FaKEaUYda4b3g6CPQeFsxZ9PfOLOSpWHjzRncoRzumvKhoGuWGfw7uKQxUlNwXwAxNkkI0RpWE_gzH51URAEVL8O4IFs5FnZRCTrItfRWdr3IbriCHj_pU/s400/6-1-2017+19-10-36+PM.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="color: #cc0000; font-size: x-small;">รูปที่ 5</span></div>
<br />
จากสูตร <span style="color: blue;">SUM(<b>C7:C</b></span><span style="color: red;">16</span><span style="color: blue;">)</span> ถ้าเพิ่มข้อมูลถึงแถวที่ 21 สูตรก็ต้องเปลี่ยนเป็น <span style="color: blue;">SUM(<b>C7:C</b></span><span style="color: red;">21</span><span style="color: blue;">)</span> หรือถ้าเพิ่มข้อมูลอีกสองแถว สูตรก็ต้องปรับเป็น <span style="color: blue;">SUM(<b>C7:C</b></span><span style="color: red;">23</span><span style="color: blue;">)</span><br />
<br />
จากทั้งสามสูตรข้างต้น หากมองตามตัวอักษรจะพบว่า ทุกสูตรจะประกอบด้วย <b><span style="color: blue;">C7:C</span></b> แตกต่างกันเฉพาะตัวเลขข้างหลัง คือ <span style="color: red;">16</span>, <span style="color: red;">21</span> และ <span style="color: red;">23</span> ตามลำดับ<br />
<br />
จากที่กล่าวไปในแล้วในเรื่องของการใช้ INDEX ถ้าเราหาแถวสุดท้ายของข้อมูลได้ เราก็สามารถระบุช่วงข้อมูลที่เป็นอัตโนมัติได้เช่นกัน<br />
<br />
ในเซล E10 เราเขียนสูตร =COUNTA(A:A)+1 เพื่อหาเลขแถวสุดท้าย ดังนั้น ถ้าเราเขียนสูตร<br />
="<span style="color: blue;"><b>C7:C</b></span>"&COUNTA(A:A)+1 หรือ ="<b><span style="color: blue;">C7:C</span></b>"&E10 ซึ่งก็จะได้ผลลัพธ์ เป็น <span style="color: blue;"><b>C7:C</b></span><span style="color: red;">16</span>, <span style="color: blue;"><b>C7:C</b></span><span style="color: red;">21</span> หรือ <span style="color: blue;"><b>C7:C</b></span><span style="color: red;">23</span> ตามจำนวนข้อมูลในขณะนั้นๆ<br />
<br />
แต่การเชื่อมตัวอักษรเพื่อประกอบเป็นช่วงเซลตามวิธีดังกล่าว Excel มองเป็นเพียง<b>ข้อความธรรมดา</b>เท่านั้น ไม่สามารถนำมาคำนวณได้ จึงจำเป็นต้องใช้ <b><span style="color: blue;">INDIRECT</span></b> เพื่อแปลงช่วงอ้างอิง ที่อยู่ในรูปข้อความให้เป็นช่วงอ้างอิง<br />
<b>=INDIRECT(</b><span style="color: blue;">"C7:C"</span>&COUNTA(A:A)+1<b>)</b> หรือ <b>=INDIRECT(</b><span style="color: blue;">"C7:C"</span>&E10<b>)</b><br />
<br />
ส่วนการนำไปใช้งาน ก็เช่นเดียวกับสองวิธีแรก นั่นคือ การระบุข้อมูลเป็นช่วงเซล ไม่สามารถแสดงผลในเซลใดๆ ได้โดยลำพัง จึงต้องใช้ร่วมกับฟังก์ชันที่ต้องการช่วงข้อมูล เช่น <span style="background-color: #ffe599;"><span style="color: blue;"><b>=SUM( </b></span>INDIRECT(<span style="color: blue;"><b>"C7:C"</b></span>&E10) <span style="color: blue;"><b>)</b></span></span> เป็นต้น<br />
<br />
<span style="color: #cc0000;">เนื่องจากการใช้ <b>"C7:C"</b> ซึ่งเป็นค่าคงที่ หากคัดลอกสูตรไปยังคอลัมน์อื่น จะไม่สะดวก เพราะ <b>"C7:C"</b> จะไม่สามารถเปลี่ยนได้เหมือนกับเซลอ้างอิงทั่วไป แต่ถ้าไม่มีการคัดลอกสูตรเพื่อไปอ้างอิงคอลัมน์อื่น สูตรนี้ก็ถือว่าใช้ได้เหมือนกัน</span><br />
<br />
<br />
<div>
<br />
<hr />
<b><span style="color: blue; font-size: large;">การตั้งชื่อช่วงข้อมูลแบบไดนามิก (Dynamic Range Name)</span></b></div>
<br />
<div class="separator" style="clear: both;">
การระบุช่วงข้อมูลแบบไดนามิกลงไปในสูตร อาจทำให้สูตรนั้นยาวมาก แต่ถ้าใช้การตั้งชื่อช่วงเซล (Range name) แล้วนำชื่อไปใช้ในสูตร ก็จะได้สูตรที่สั้นและกระชับกว่า</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
แต่การตั้งชื่อช่วงเซล ก็ต้องเป็นแบบไดนามิกด้วย (Dynamic range name) โดยใช้สูตรใดสูตรหนึ่ง จากสามวิธีการข้างต้น (แนะนำวิธี OFFSET และ INDEX) โดยเข้าไปที่แถบ Formula เลือก Define Name</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
พิมพ์ชื่อใดๆ ลงในช่อง Name และพิมพ์สูตรแบบไดนามิก ลงในช่อง Refers to: (ดังรูป) เวลานำไปใช้งาน ก็แค่เรียกชื่อนั้นในสูตร เช่น <b style="color: blue;">=SUM(</b><span style="color: #cc0000;"> จำนวนเงิน </span><b style="color: blue;">)</b> เป็นต้น</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDzE31qzRV_Yx-8yKXZun1LbHlySpnOkCpHcLM53EA-MJwX-5YDaAORoEazxLeT8zKr5CxZ6U2Dgx-0jNvE-8kAo0yXqpbc2V6b_ipY4a20-GhdJmQGn1aduAAlrovH6Z33A0YIAfXfhg/s1600/6-1-2017+19-18-13+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="285" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDzE31qzRV_Yx-8yKXZun1LbHlySpnOkCpHcLM53EA-MJwX-5YDaAORoEazxLeT8zKr5CxZ6U2Dgx-0jNvE-8kAo0yXqpbc2V6b_ipY4a20-GhdJmQGn1aduAAlrovH6Z33A0YIAfXfhg/s400/6-1-2017+19-18-13+PM.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="color: #cc0000; font-size: x-small;">รูปที่ 6</span></div>
<br />
<br />
ดังนั้น ไม่ว่าจะใช้วิธีการใดดังที่กล่าวมา ก็จะช่วยให้การระบุช่วงข้อมูลอ้างอิง เป็นไปโดยอัตโนมัติ เมื่อมีจำนวนข้อมูลเพิ่มขึ้น (หรือลดลง) สูตรที่เราเขียนไว้ ก็จะแสดงผลได้ถูกต้องเสมอ เพราะสามารถปรับช่วงอ้างอิงได้ตามจำนวนข้อมูลจริงโดยอัตโนมัติ<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhn-yEUrl-JOCLOIBDqE7Jl4EArJoggtzsEv2PWsxKAtEnubyJPAXHU_BtO642kUOWmK3bqavdYJz1jkEaMeUejSqKOO3On8RRgqBixlOFTo4kr2rd4CDHZqH26_xoEGapnn11KUXk7oew/s1600/8-1-2017+18-01-04+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="262" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhn-yEUrl-JOCLOIBDqE7Jl4EArJoggtzsEv2PWsxKAtEnubyJPAXHU_BtO642kUOWmK3bqavdYJz1jkEaMeUejSqKOO3On8RRgqBixlOFTo4kr2rd4CDHZqH26_xoEGapnn11KUXk7oew/s400/8-1-2017+18-01-04+PM.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="color: #cc0000; font-size: x-small;">รูปที่ 7</span></div>
<br />
สำหรับการแปลงตารางข้อมูลให้เป็น Table ขออนุญาตยังไม่กล่าวถึง ณ ที่นี้ เพราะดูเหมือนว่า เนื้อหาจะยาวมากเกินไปแล้ว ไว้ค่อยกล่าวถึงในโอกาสต่อไป<br />
<br /></div>
ครูเอกhttp://www.blogger.com/profile/01255634988258604526noreply@blogger.com0tag:blogger.com,1999:blog-6989162005462801250.post-25212434237850282572017-01-04T16:18:00.002+07:002017-01-04T16:18:23.973+07:00ตั้งคำถามผิด ชีวิตเปลี่ยน<b>สิ่งที่ไม่น่าเชื่อ มักเกิดขึ้นเสมอ</b><br />
<b>ตั้งคำถามผิด ชีวิตเปลี่ยนทันที</b><br />
<br />
ในคลาส Excel for Beginner<br />
ถ้าผมถามผู้เรียนว่า <span style="color: #cc0000;">รู้จักฟังก์ชัน Excel อะไรบ้าง? </span><br />
<br />
คำตอบที่ได้รับมักจะไม่พ้น SUM, COUNT, MAX, MIN, AVERAGE<br />
ที่แอดว๊านซ์หน่อยก็จะเพิ่ม IF, VLOOKUP มาด้วย<br />
นานๆ รั้ง ถึงจะได้ยินชื่อฟังก์ชันอื่น<br />
<br />
แต่เชื่อหรือไม่ว่า ถ้าผมตั้งคำถาม (ตามในรูป ข้อที่หนึ่ง)<br />
<span style="color: #cc0000;">"ต้องการหายอดขายที่มากกว่า เขียนสูตรยังงัย?" </span><br />
<br />
ซึ่งก็ไม่รู้ว่า ผมตั้งคำถามผิดคำตอบหรือเปล่า ไม่ทราบได้<br />
แต่เกือบจะทุกครั้ง มักไม่ได้คำตอบ<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" height="221" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5R0Npb914FdA1zCyYdl6vHxayZ7EkHQt-B-PR9nOMcQMgpPYW3Q_RsMB-3QZlsC8G9AX5064TR99NWMCbxPJui_u56euCqoKn_y90pvxEBiWSSHyGrn7cvuQxegQvOIQpfZIkfydvGEo/s400/22-12-2016+09-22-26+AM.png" width="400" /></div>
<br />
<br />
แต่ถ้าตั้งคำถามแบบข้อที่สอง (ตามในรูป)<br />
<span style="color: #cc0000;">"จงหาค่าที่มากที่สุด" </span><br />
มักจะได้คำตอบทุกครั้งว่า <span style="color: #cc0000;">"ใช้ MAX ครับ / ใช้ MAX ค่ะ"</span><br />
<br />
ก็เดาเอาเองว่า <span style="color: blue;">"คนส่วนใหญ่รับรู้ว่า ฟังก์ชัน MAX ใช้สำหรับหาค่าที่มากที่สุด" </span><br />
<span style="color: red;">ไม่เคยมีใครบอกว่า "ใช้หาค่าที่มากกว่า"</span> ฮ่าๆๆๆ<br />
<br />
เป็นงัยล่ะ ใครเจอแบบนี้ ไม่อึ้ง ให้เหยียบ ฮ่าๆๆๆ<br />
<br />
นั่นแสดงว่า ผู้ใช้ Excel ส่วนใหญ่ ใช้วิธีการ <b><span style="color: blue; font-size: large;">"จำ"</span></b> มากกว่าการ <span style="color: blue; font-size: large;"><b>"เข้าใจ"</b></span><br />
<br />
<span style="color: #cc0000;">"จำว่าโจทย์แบบนี้ต้องใช้สูตรแบบนี้"</span> หรือจำว่า <span style="color: #cc0000;">"ฟังก์ชันนี้ต้องใช้กับงานแบบนี้" </span><br />
<br />
แต่เมื่อเงื่อนไขเปลี่ยน โจทย์เปลี่ยน คำถามเปลี่ยน<br />
เปลี่ยนไปจากความที่คุ้นเคย ก็จะ <b><span style="color: blue; font-size: large;">"ประยุกต์"</span></b> ไปต่อไม่ได้<br />
<br />
จากรูป ข้อที่ 1 สูตรก็คือ<br />
<span style="color: blue;">=MAX(B2:B3)</span> กรณีเซลข้อมูลติดกัน หรือ<br />
<span style="color: blue;">=MAX(B2,B3)</span> กรณีเซลข้อมูลไม่ติดกัน<br />
<br />
ส่วนในข้อที่ 2 สูตรก็คือ<br />
<span style="color: blue;">=MAX(B9:B12)</span> กรณีเซลข้อมูลติดกัน หรือ<br />
<span style="color: blue;">=MAX(B9,B10,B11,B12) </span>กรณีเซลข้อมูลไม่ติดกัน<br />
<br />
เห็นคำตอบแล้ว ก็ไม่ยากใช่มั๊ยล่ะ? แต่ทำไมกันคิดไม่ออก ฮ่าๆๆครูเอกhttp://www.blogger.com/profile/01255634988258604526noreply@blogger.com0tag:blogger.com,1999:blog-6989162005462801250.post-32323304870754423352016-10-03T10:50:00.001+07:002017-01-30T21:51:41.051+07:00หลักสูตร Excel ที่มุ่งเน้นผลลัพธ์ตั้งแต่ก่อนเรียนวันนี้มีสมาชิกในเพจท่านหนึ่ง ตั้งคำถามด้วยความสงสัยว่า....<br />
<blockquote class="tr_bq">
<i><span style="color: #cc0000;">เห็นอาจารย์มักพูดถึงจุดเด่นของหลักสูตรว่า เน้นที่ผลลัพธ์ ซึ่งแตกต่างจากหลักสูตรของวิทยากรท่านอื่นๆ ไม่ทราบว่าเป็นอย่างไร? โดยส่วนตัวมีความรู้สึกว่า วิทยากรทุกท่าน ก็น่าจะหวังผลลัพธ์ให้ผู้เรียน สามารถนำความรู้ไปใช้งานได้เช่นกัน</span></i></blockquote>
<br />
ขออนุญาตตอบดังนี้ครับ<br />
<br />
ที่จริงคำว่า <b>"ผลลัพธ์"</b> ที่ผมพูดถึงบ่อยๆ นั้น ไม่ได้หมายถึงผลลัพธ์ <b>"หลังจากเรียน"</b> แต่เป็นผลลัพธ์ <b>"ก่อนที่จะเรียน"</b> (ความคาดหวัง) ซึ่งที่จริงในตอนแรก ผมก็ไม่รู้ว่าจะใช้คำว่าอะไรดี แต่มันก็คือ สิ่งที่ผู้เรียนจะต้องได้เป็นชิ้นเป็นอัน มากกว่าแค่รู้ว่า Excel ทำอะไรได้บ้าง<br />
<br />
<blockquote class="tr_bq">
<span style="color: #0b5394;">ที่มาของเรื่องการเน้นผลลัพธ์นั้น เกิดจากเมื่อหลายปีก่อน ก่อนที่ผมจะมาจับงานวิทยากรซะอีก (นานมากๆ เลย) มีรุ่นน้องคนหนึ่งมาเล่าให้ฟังว่า บริษัทส่งไปอบรมหลักสูตรการใช้โปรแกรมคอมพิวเตอร์ หลักสูตรละ 30 ชม. กับสถาบันสอนคอมพิวเตอร์ที่มีชื่อเสียงแห่งหนึ่ง</span></blockquote>
<blockquote class="tr_bq">
<span style="color: #0b5394;">น้องคนนั้นบอกว่า อาจารย์สอนทุกอย่างเกี่ยวกับโปรแกรม รู้ว่ามีเมนูคำสั่งอะไรบ้าง แต่ละคำสั่งใช้งานอะไร อย่างไร ฯลฯ แต่หลังจากเรียนจบได้ใบประกาศมาแล้ว น้องมีความรู้สึกว่า ก็ยังทำงานจริงๆ ไม่ได้มากนัก ตอนเรียน อาจารย์จะแนะนำทีละเมนู ทีละคำสั่ง แล้วยกตัวอย่างให้ลองทำตาม ซึ่งก็ทำได้และคิดว่าเข้าใจ </span></blockquote>
<blockquote class="tr_bq">
<span style="color: #0b5394;">แต่ในงานจริงที่ทำอยู่ทุกวันนั้น เขาไม่รู้ว่าจะต้องใช้เมนูไหน หรือคำสั่งอะไร เพื่อทำออกมาให้เป็นผลสำเร็จ หัวหน้าไม่ได้สั่งว่า จะให้ใช้เมนูไหน คำสั่งไหน เพื่อทำงานนี้ออกมา มีแต่บอกว่า ไปทำอย่างนี้ให้หน่อยซิ (จะทำอย่างไร มันเรื่องของเอ็ง)</span></blockquote>
<i><br /></i>
ฟังเรื่องแล้ว ผมก็ปิ๊งขึ้นมาในตอนนั้นเลยว่า การเรียนรู้โปรแกรมคอมพิวเตอร์สำนักงาน Word, Excel หรือ PowerPoint ควรเน้นที่งานที่เราจะต้องทำ เช่น <b><span style="color: #cc0000;">ถ้าอยากจะทำกราฟ ก็ทำกราฟ จะทำด้วยโปรแกรมอะไร เวอร์ชันไหนก็สุดแล้วแต่ แต่ต้องให้ได้กราฟออกมา</span></b><br />
<br />
ผมลองพิสูจน์มาหลายครั้งแล้ว ก็พบความจริงว่า การสอนให้ใครสักคน โฟกัสไปที่จะทำอะไรสักอย่าง จนเขาสามารถทำออกมาได้สำเร็จนั้น ได้ผลเร็วกว่าการที่จะไปบอกว่า องค์ประกอบมีอะไรบ้าง แล้วให้เขาไปประกอบชิ้นส่วนเอาเอง เพราะคนส่วนใหญ่จะตีโจทย์ไม่ออก วิเคราะห์ปัญหาไม่แตก จึงมองไม่ออกว่า จะใช้การแก้ปัญหาด้วยวิธีอะไร ทั้งๆ ที่เป็นเรื่องที่ตนเองเคยเรียนรู้มาแล้วก็ตาม<br />
<br />
<br />
<b>ขอยกตัวอย่างเปรียบเทียบดังนี้</b><br />
<br />
คุณลองนึกถึงห้องครัวสักแห่งหนึ่ง ที่มีเครื่องครัวครบครัน มีเครื่องปรุง มีวัตถุดิบ ครบทุกชนิด ถ้ามีพ่อครัวแม่ครัว ที่ประกอบอาหารเป็น เข้ามาใช้ห้องนี้ แน่นอนว่า คุณจะได้มีของอร่อยๆ ทานแน่นอน<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxIY0q2MymmhPtUW6ceoeEfZA4EKN4wwtqTtdnTSiiaYmEFesjea9h6xN_zzmg-r6bfa8cuO8K1iDdEgM9aaOxWo-gZTpYsI4FOGMUrm9udrX8yrWTnEnr10JxBPSELQ_tS2qRM6YikAA/s1600/UpToKit.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxIY0q2MymmhPtUW6ceoeEfZA4EKN4wwtqTtdnTSiiaYmEFesjea9h6xN_zzmg-r6bfa8cuO8K1iDdEgM9aaOxWo-gZTpYsI4FOGMUrm9udrX8yrWTnEnr10JxBPSELQ_tS2qRM6YikAA/s400/UpToKit.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="color: red; font-size: x-small;">เครดิตภาพ รายการทีวี "ครัวคริตจานด่วน"</span></div>
<br />
<br />
แต่ถ้าคุณอยากจะสอนใครสักคน ให้สามารถใช้ห้องครัวแห่งนี้ทำอาหารได้ โดยคุณสอนเพียงให้เขารู้จักว่า <span style="color: #cc0000;">เครื่องครัวชิ้นไหนคืออะไร อยู่ตรงไหน กะปิ มะนาว น้ำปลา เก็บไว้ที่ไหน ใช้ปรุงอะไร จะเปิดเตาอย่างไร การหั่นต้องแบบไหน การตำต้องอย่างไร หั่นหอมอย่างไรไม่ให้แสบตาหรือไม่โดนมีดบาด</span> โดยคุณอาจสาธิตการหั่นให้ดู แล้วให้เขาหั่นตาม ถ้าเขาหั่นซอยหัวหอมได้สวย คุณก็ปรบมือชื่นชม "เก่งมาก" ฯลฯ<br />
<br />
เมื่อผู้เรียนเรียนรู้ครบทุกอย่างแล้ว คุณก็บอกให้เขาทำอาหารให้คุณทาน เขาก็จะเริ่มทำอาหารง่ายๆ มาก่อน เท่าที่เขาจะคิดได้ จากวัตถุดิบที่มี ไข่ดาว ไข่ต้ม ไข่เจียว ผ่านไปหนึ่งอาทิตย์ หรือหนึ่งเดือน สามเดือน คุณก็ยังเห็นเมนูเดิมๆ เวียนซ้ำไปซ้ำมา (แต่คุณอาจจะได้กินเร็วขึ้น ไม่ต้องรอนานเหมือนเมื่อก่อน เพราะเขาชำนาญขึ้น) คุณคงอดสงสัยไม่ได้ว่า วัตถุดิบตั้งเยอะแยะ ทำไมไม่ทำเมนูอื่นบ้าง? ก็ทำอย่างไรได้ เขาคิดทำได้แค่นั้นจริงๆ<br />
<br />
ในทางกลับกัน ถ้าคุณจะสอนให้เขาทำ <b>"แกงเขียวหวานไก่"</b> คุณก็ต้องเน้นไปแต่เรื่องที่เกี่ยวกับแกงเขียวหวานไก่ อะไรที่ไม่เกี่ยวก็ยังไม่ต้องพูดถึง วันต่อมาคุณก็สอนให้เขาทำเมนู "หลนปลาสลิด" ก็เช่นเดียวกัน พูดถึงแต่เฉพาะส่วนผสมของเมนูหลนปลาสลิดเท่านั้นพอ<br />
<br />
วันต่อๆ มา คุณก็สอนเมนูอื่นอีก แม้ว่าจะดูคล้ายๆ กัน เช่น หลนปลาร้า หลนปูเค็ม หลนเต้าเจี้ยว ฯลฯ ถ้าอยากให้เขาทำเป็นเร็ว ก็จำเป็นต้องสอน อย่าเพิ่งคิดไปเองว่าเขาจะทำได้ (เพราะเคยหลนปลาสลิดมาแล้ว) ยูสเซอร์จำนวนไม่น้อย ยังแยกไม่ออกเลยว่า อันไหนปลาสลิด? อันไหนปลาร้า?<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRb8XWdsI8E2nU5GHTa0Hici2RXJN36sHx5V9ld8eiPvMaHlQD6EWSfH1AZNc3o5Y_WqjKSQ9CwQTsSUSA5gtGIFDbkq4m6wpeMne2GkajBwbt6OaWl7Nw4zVcZq_7njJ8_a46Jec-vFQ/s1600/3-10-2016+10-35-24.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="276" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRb8XWdsI8E2nU5GHTa0Hici2RXJN36sHx5V9ld8eiPvMaHlQD6EWSfH1AZNc3o5Y_WqjKSQ9CwQTsSUSA5gtGIFDbkq4m6wpeMne2GkajBwbt6OaWl7Nw4zVcZq_7njJ8_a46Jec-vFQ/s400/3-10-2016+10-35-24.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="color: red; font-size: x-small;">ภาพแกงเขียวหวานไก่และเครื่องปรุง เครดิตภาพ จากอินเทอร์เน็ต</span></div>
<br />
<br />
<br />
<b>ย้อนกลับมาที่การใช้โปรแกรม Excel</b><br />
<br />
มีงานหลายๆ งาน ที่ใช้ฟังก์ชันเดียวกัน ในการสรุปข้อมูล เช่น SUMIF, COUNTIF, VLOOKUP และผู้เรียนก็เคยเรียนรู้ฟังก์ชันเหล่านี้มาแล้ว เช่น หามูลค่าการขายแยกเป็นรายลูกค้า แต่พอโจทย์เปลี่ยน ให้หามูลค่าการขายแยกตามสินค้า หรือหาจำนวนการซื้อของลูกค้าแยกเป็นรายเดือน จะพบว่ามีเพียงไม่กี่คนเท่านั้นที่ทำได้<br />
<br />
ในอดีต ผู้สอนส่วนใหญ่ เน้นสอนให้รู้จักว่า <b>คำสั่งนั้นคืออะไร</b> เช่น VLOOKUP แล้วให้ลองฝึกปฏิบัติ แสดงข้อมูลสินค้าจากรหัสสินค้า ผู้เรียนทั้งห้องทำได้ ผู้สอนก็คาดหวังผู้เรียนจะเอา VLOOKUP ไปใช้งานได้ แต่มีจำนวนไม่น้อย ไม่สามารถแสดงข้อมูลพนักงานจากรหัสพนักงานได้ หรือไม่สามารถแสดงข้อมูลลูกค้าจากรหัสลูกค้า ทั้งๆ ที่ในความเป็นจริง ก็น่าจะใช้ VLOOKUP ได้เช่นกัน<br />
<br />
<span style="color: blue;">ดังนั้น ในมุมมองของผมก็คือ <b>ควรจะแยกสอนเป็นเรื่องๆ</b> (ไม่ว่าจะหลนปลาสลิด หลนปลาร้า หลนปูเค็ม หลนเต้าเจี้ยว ฯลฯ) <b>เพื่อให้สอดคล้องกับพฤติกรรมการเรียนรู้ของคนไทย</b> ไม่ว่าจะฐานข้อมูลสินค้า ข้อมูลพนักงาน หรือข้อมูลลูกค้า ก็เน้นไปเลยว่าความต้องการคืออะไร หรืออยากได้อะไร </span><br />
<br />
<div style="text-align: center;">
<b>เพราะนั่นคือผลลัพธ์ หรือ Output ที่ผู้เรียนคาดหวังต้องการ </b></div>
<br />
จากนั้นก็สอนวิธีการให้พวกเขาไปยังผลลัพธ์นั้นๆ ด้วยทรัพยากรที่มีอยู่ <span style="color: #cc0000;">(ไม่ว่าจะด้วย Excel 2003, Excel 2010 หรือ Excel 2016 ก็ตาม)</span> เพียงแต่เครื่องมือแต่ละตัว อาจจะมีความสามารถต่างกันบ้าง บางเวอร์ชันให้ผลลัพธ์นั้นได้ โดยการคลิกเพียงไม่กี่ครั้ง แต่บางเวอร์ชันก็อาจจะมีขั้นตอนที่ซับซ้อนมากขึ้น หรือใช้เวลานานขึ้น<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzANyAgYynRM3SYW4363Xs1HbwcUFIn6jZ37B1qh9Kb5IGU8sTrVtVma5mREKS0mA96J7-RNthSLQ7L5TD5jRgetoVxNYLdimTYbic2DpxmMBkzAwPx5M5pVf8qUQ3Qi3A9hg-2-gpnTo/s1600/exchangeanalytics.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="317" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzANyAgYynRM3SYW4363Xs1HbwcUFIn6jZ37B1qh9Kb5IGU8sTrVtVma5mREKS0mA96J7-RNthSLQ7L5TD5jRgetoVxNYLdimTYbic2DpxmMBkzAwPx5M5pVf8qUQ3Qi3A9hg-2-gpnTo/s400/exchangeanalytics.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="color: red; font-size: x-small;">ตัวอย่างรายงานแบบสรุปในหน้าเดียว (Dashboard) เครดิตภาพจากอินเทอร์เน็ต</span></div>
<br />
<br />
<b>บทสรุป</b><br />
<br />
แทนที่จะสอนการใช้โปรแกรม Excel ในภาพรวมๆ <b><span style="color: blue;">"ให้รู้ว่า Excel ทำอะไรได้บ้าง?"</span></b> แต่ผมจะสอนในลักษณะที่ว่า <b><span style="color: #cc0000;">"จะเอา Excel มาทำอะไรได้บ้าง"</span></b> ผมจึงออกแบบหลักสูตรแยกเป็นเรื่องๆ เช่น<br />
<br />
<ul>
<li>Excel for Beginner : สูตรและฟังก์ชัน Excel เพื่อการทำงานแบบมืออาชีพ</li>
<li>Excel for HR : การใช้ Excel ในงานทรัพยากรบุคคล</li>
<li>Excel for Admin : การใช้ Excel ในงานธุรการและงานสำนักงาน</li>
<li>Excel Database : การใช้ Excel สำหรับงานฐานข้อมูลและทะเบียนประวัติ</li>
<li>Excel Dashboard & Report : การประมวลผลข้อมูลและสร้างรายงานด้วย Excel</li>
<li>Excel Data Convert : การแปลงข้อมูลจาก Text file ให้เป็นตารางฐานข้อมูล</li>
<li>Excel Form : เทคนิคการสร้างแบบฟอร์มอัจฉริยะด้วย Excel</li>
<li>Excel กับงานจัดซื้อ, Excel กับงานบัญชี หรือ Excel กับงานซ่อมบำรุง ฯลฯ เป็นต้น</li>
</ul>
ครูเอกhttp://www.blogger.com/profile/01255634988258604526noreply@blogger.com0tag:blogger.com,1999:blog-6989162005462801250.post-52707389732999211242016-10-01T16:58:00.003+07:002016-10-01T16:58:46.264+07:00ทำไมจึงต้องเรียน(ให้)รู้พื้นฐานของ Excelบทความวันนี้จะเรียกว่า "บ่น" ก็ได้ครับ ขอระบายหน่อยเถอะ บ่อยครั้งที่มักจะเจอผู้เรียนที่.... เอ่อ...บางทีก็ไม่ใช่ผู้เรียนครับ แต่เป็นฝ่ายบุคคล หรือคนที่พิจารณาหัวข้อหลักสูตร เพื่อตัดสินใจ(แทนผู้เรียน) ว่าอันไหนใช่ อันไหนไม่ใช่ เรื่องไหนควรเรียน เรื่องไหนไม่จำเป็นต้องเรียน<br />
<br />
สำหรับหลักสูตร <b><span style="color: blue;">"Excel for Beginner : เทคนิคการใช้ Excel เพื่อการทำงานอย่างมีประสิทธิภาพ"</span></b> ถูกออกแบบมาให้เป็นหลักสูตรแรก หรือ Part-I ของชุดหลักสูตร Excel ทั้งหมดของผม เนื้อหาหลักๆ จะเน้นให้ผู้เรียนได้รู้จัก Excel แบบรู้จริง เรียนรู้คุณสมบัติพื้นฐานสำคัญ ขีดจำกัด ประเภทของข้อมูล (Data type) สูตรและฟังก์ชันสำคัญ การตั้งชื่อช่วงข้อมูล ฯลฯ เพื่อให้มีพื้นฐานที่แน่น จะได้ไปศึกษาต่อในระดับที่สูงขึ้นได้<br />
<br />
เพราะการศึกษาบ้านเรา ผมกล้าฟันธงได้เลย ไม่มีโรงเรียนไหนหรือมหาวิทยาลัยไหน ที่สอนโปรแกรมไมโครซอฟต์ออฟฟิศ (MS Office) แบบลงลึกถึงคุณสมบัติสำคัญ โดยเฉพาะโปรแกรมยอดนิยมอย่าง Excel<br />
<br />
<i><span style="color: #cc0000;">"หลักสูตรนี้ ขอเรียนแค่วันเดียวได้มั๊ยครับ/ได้มั๊ยคะ? เนื่องจากผู้เรียนใช้ Excel อยู่ทุกวัน และใช้มานานหลายปีแล้ว พื้นฐานดีอยู่แล้ว"</span></i> คนที่พูดแบบนี้ ร้อยทั้งร้อย คือไม่รู้จัก Excel และส่วนใหญ่เมื่อไปสอนจริง ก็จะพบว่า ที่บอกใช้อยู่ทุกวัน หรือใช้มานานแล้วนั้น คือ <i><span style="color: #cc0000;">"ใช้งานแบบไม่รู้เรื่องเลย หรือประเภท ตาบอดคลำช้าง"</span></i><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDQnq5WQ9ky0_FrqfTxeZOzarYBfdYCV7PXIQrEwjVwk7zdth_G27CTDtIwRR72nS8s4wc50yrT4V1NINlxIdiBvdhTFADh3OeFnHF2Z1Flf3tdB_JhAZ2iUkGRiuI5vlhbsuT8W0YVpQ/s1600/192521a.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDQnq5WQ9ky0_FrqfTxeZOzarYBfdYCV7PXIQrEwjVwk7zdth_G27CTDtIwRR72nS8s4wc50yrT4V1NINlxIdiBvdhTFADh3OeFnHF2Z1Flf3tdB_JhAZ2iUkGRiuI5vlhbsuT8W0YVpQ/s1600/192521a.jpg" /></a></div>
<div style="text-align: center;">
<span style="color: red; font-size: x-small;">เรื่องแรกที่ควรจะต้องรู้และทำความเข้าใจก่อนใช้ Excel ที่คนส่วนใหญ่มองข้าม</span></div>
<br />
<span style="color: blue;"><br /></span>
<b><span style="color: blue;">ทำไมจึงเป็นเรื่องจำเป็น ที่จะต้องเรียนรู้ถึงคุณสมบัติพื้นฐาน</span></b><br />
<br />
<ul>
<li>จะมีผู้ใช้ (User) สักกี่คนที่รู้ว่า สเปคของฮาร์ดแวร์ มีผลต่อประสิทธิภาพการทำงานของ Excel ไม่ว่าจะเป็นความเร็ว CPU หรือขนาด RAM รวมไปถึง OS ที่ใช้เป็นแบบกี่บิต ที่สำคัญ ยังมีผู้ใช้จำนวนมากที่ไม่รู้แม้กระทั่ง เวอร์ชันของ Excel ที่ตนเองใช้งาน<br /></li>
<li>การตั้งค่ารูปแบบภาษา ประเทศ ของ Windows ที่ใช้งานอยู่ เป็นแบบไหน คนที่ไม่รู้เรื่อง ก็จะทำให้เก็บบันทึกข้อมูลผิดประเภท<br /></li>
<li>บางคนอยากทำงานเร็วๆ คล่องๆ แต่เสียเวลากับการคลิกเมาท์ หรือเลือกหาปุ่มเมนูคำสั่ง แต่ถ้ารู้จักการใช้แป้นพิมพ์ลัด หรือเอาคำสั่งที่ใช้ประจำมาไว้ในเมนูเข้าถึงด่วน (Quick Access Toolbar) ก็จะช่วยลดเวลาทำงานไปเยอะ</li>
</ul>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVGxMm_vglbZQginENriWoW_je4Mer1nNohRf8xqIuwLnCPxzNkMJFg5LMobB4WISt1AvdFv2pnjg0JHvd5HTHOgDRycA8z-ZViIDeVWyA5m-SEDBXCd676B3_yRVQAUUnxooC5osbgjQ/s1600/1-10-2016+15-16-42.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVGxMm_vglbZQginENriWoW_je4Mer1nNohRf8xqIuwLnCPxzNkMJFg5LMobB4WISt1AvdFv2pnjg0JHvd5HTHOgDRycA8z-ZViIDeVWyA5m-SEDBXCd676B3_yRVQAUUnxooC5osbgjQ/s1600/1-10-2016+15-16-42.jpg" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="color: red; font-size: x-small;">การเปิดไฟล์รูปแบบเก่าใน Excel เวอร์ชันใหม่</span></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<ul>
<li>ทำงานมาตั้งแต่ Excel เวอร์ชันเก่าๆ ไฟล์เดิมๆ จนทุกวันนี้ก็ยังใช้อยู่ โดยไม่รู้เลยว่า ทำไมไฟล์ของเรามีแค่ 6 หมื่นกว่าแถว 2 ร้อยกว่าคอลัมน์ ขณะที่ไฟล์ของคนอื่น เขาเห็นกันเป็นล้านแถว<br /></li>
<li>เวลาสั่งบันทึก (Save) มีหน้าต่างอะไรเตือนขึ้นมาทุกครั้งก็ไม่รู้ ลำคาญจริงๆ แต่ก็กด Continue ทุกครั้ง มันก็ทำงานต่อได้</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmGp4RW21q7boQ_6oyB0H1zQelTgNsKoEH8-bP62DM1lTWRoN46oiJssq0b5DU3EYjoJD3Bx7-edlMWlIFOtbfvIaNouGnLxsoTyn5Bed5ZwpQ9IkHxXyPsIGTKMgLBP6o1JqlEPTxekc/s1600/1-10-2016+15-18-22.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmGp4RW21q7boQ_6oyB0H1zQelTgNsKoEH8-bP62DM1lTWRoN46oiJssq0b5DU3EYjoJD3Bx7-edlMWlIFOtbfvIaNouGnLxsoTyn5Bed5ZwpQ9IkHxXyPsIGTKMgLBP6o1JqlEPTxekc/s1600/1-10-2016+15-18-22.jpg" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="color: red; font-size: x-small;">การแจ้งเตือนเมื่อมีอะไรบางอย่างที่ไม่รองรับกับไฟล์รูปแบบเก่า</span></div>
<br />
<br />
<ul>
<li>พอทดสอบโดยการให้ลองพิมพ์วันที่ (Date) บางคนพิมพ์เป็น ค.ศ. บางคนพิมพ์เป็น พ.ศ. บางคนพิมพ์ พ.ศ.แค่สองหลักสุดท้าย บางคนพิมพ์ชื่อเดือนเป็นข้อความเลย ชิดขวาบ้าง ชิดซ้ายบ้าง งงไปหมด พอตำแหน่งไม่สวย ก็บังคับคอลัมน์นั้น ให้จัดกึ่งกลางซะเลย รู้แล้วรู้รอดไป<br /></li>
<li>พอบอกให้พิมพ์เวลา (Time) ก็ชอบพิมพ์เป็น จำนวนเงิน ส่วนสูง น้ำหนัก หรือระยะทางซะงั้น<br /></li>
<li>คุณอาจจะเคยหาผลรวมของตัวเลข ในช่วง E2:E39 โดยการเขียนสูตร =SUM(E2:E39) และคิดว่าเรื่องง่ายๆ แบบนี้ ใครๆ ก็รู้ แต่เชื่อผมเถอะ ผมเคยเจอผู้เรียนหลายคนที่เขียนสูตรว่า =E2+E3+E4+E5+......+E39 และที่ไม่น่าเชื่อยิ่งกว่าก็คือสูตรนี้ =SUM(E2+E3+E4+E5+......+E39)<br /></li>
<li>เอาวันที่หรือเวลาที่น้อยกว่า ตั้ง แล้วลบด้วยวันที่หรือเวลาที่มากกว่า แล้วเกิด Error ###### ไม่รู้จบ ซึ่งไม่รู้จะแก้ยังงัย? หรือบางทีไม่อยากให้ผลลัพธ์ของสูตรแสดงเลขศูนย์ ก็ไม่รู้จะทำอย่างไร<br /></li>
<li>แค่เขียนสูตรเอาเบี้ยเลี้ยง คูณกับ จำนวนวัน ก็ยังใช้เวลามากกว่า ครึ่งชั่วโมง<br /></li>
<li>ฯลฯ และอื่นๆ อีกมากมาย (ที่ไม่ใช่เพลงของเฉลียง)</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUkPCNek-Rq4IWgH5Tk-5J-2KxrS_6Xi9dUPKejOmUrelTF6I7sVQQrPfoAm6EGvc360sSzivfA7hTtDRgKEXPUCI0R_ZWpPgvA6cHb8aq63AW6zGnAE5ft5SppriSoqXkgKXNfc64E_c/s1600/1-10-2016+16-43-09.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="273" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUkPCNek-Rq4IWgH5Tk-5J-2KxrS_6Xi9dUPKejOmUrelTF6I7sVQQrPfoAm6EGvc360sSzivfA7hTtDRgKEXPUCI0R_ZWpPgvA6cHb8aq63AW6zGnAE5ft5SppriSoqXkgKXNfc64E_c/s640/1-10-2016+16-43-09.jpg" width="640" /></a></div>
<div>
<br /></div>
<div>
<b><span style="color: blue;">ไม่ยอมเรียนพื้นฐาน แล้วเขาสนใจจะเรียนอะไรกัน?</span></b></div>
<div>
<br /></div>
<div>
ส่วนใหญ่จะร้องขอให้เน้น IF, VLOOKUP และ PivotTable ถ้าขอมาแบบนี้ก็ชัดเลยว่า ไม่รู้เรื่อง Excel เอาซะเลย คนที่จะกล้าพูดได้ว่า มีพื้นฐาน Excel ดีแล้ว เขาไม่ร้องขอเรียน IF หรือ VLOOKUP กันหรอก หรือแม้แต่ PivotTable ก็ตาม ไม่รู้ใครไปจำกัดความว่า IF, VLOOKUP และ PivotTable จะต้องอยู่ในหลักสูตร Advance</div>
<div>
<br /></div>
<div>
บางทีก็อยากพิสูจน์เหมือนกัน โอเค...พื้นฐานไม่เอาก็ได้ พอให้จัดรูปแบบตัวเลข รูปแบบวันที่ ก็ไปไม่เป็นแล้ว <i><span style="color: #cc0000;">อาจารย์อันนี้มายังงัย? อาจารย์แบบนี้ทำยังงัย?</span></i> เอ๊า....ก็ไหนว่ารู้แล้ว</div>
<div>
<br /></div>
<div>
ตึกสูงใหญ่เทียมฟ้า ก็ยังต้องอาศัยเสาเข็มที่แข็งแรงแน่นหนา ฉะนั้น "ความรู้พื้นฐาน" จึงเป็นเรื่องสำคัญ ที่จะทำให้ผู้ใช้ สามารถต่อยอดไปเรียนรู้ในเรื่องที่ยากๆ ได้ </div>
<div>
<br /></div>
<div>
<span style="color: blue;">จำไว้ง่ายๆ ว่า อะไรก็ตามถ้าเรามีพื้นฐานหรือมีความเข้าใจในเรื่องนั้นๆ ดี ก็จะรู้สึกว่า "ง่าย" แต่ถ้าเรารู้สึกว่า "ยาก" แสดงว่าพื้นฐานเรายังไม่ดีนั่นเอง</span></div>
<div>
<span style="color: blue;"><br /></span></div>
<div>
<span style="color: blue;">เพราะฉะนั้น อย่าละเลยที่จะเรียนให้รู้พื้นฐาน ยิ่งเรียนซ้ำๆ ก็จะยิ่งเข้าใจ ยิ่งฝึกบ่อยๆ ก็จะยิ่งชำนาญ หนังสือบางเล่ม หนังบางเรื่อง ที่คุณอ่านซ้ำหรือดูซ้ำ แม้จะรู้ตอนจบแล้ว แต่ดูกี่ทีกี่ทีก็ยังสนุก และเข้าใจเรื่องราวมากขึ้นเสมอ</span></div>
ครูเอกhttp://www.blogger.com/profile/01255634988258604526noreply@blogger.com0tag:blogger.com,1999:blog-6989162005462801250.post-57642384220104434192016-07-12T17:18:00.000+07:002016-07-12T17:18:01.700+07:00หาชั่วโมงการทำงาน กรณีเลิกงานหลังเที่ยงคืนวันนี้มีคำถามทางอีเมล์ สอบถามเกี่ยวกับการคำนวณชั่วโมงทำงาน กรณีทำงานข้ามวัน (หมายถึงเวลาเลิกงานเลยเที่ยงคืน เข้าสู่วันใหม่) ดังตัวอย่างข้างล่าง<br />
<br />
<div>
</div>
<div>
เวลาเข้าทำงาน : <span style="color: rgb(204 , 0 , 0);">วันที่ 9 พฤษภาคม 2554 เวลา 20:30 น.</span></div>
<div>
เวลาออก : <span style="color: rgb(204 , 0 , 0);">วันที่ 10 พฤษภาคม 2554 เวลา 02:45 น.</span> (ตีสอง สี่สิบห้านาที) </div>
<div>
ใน Excel ไม่ทราบว่าต้องใช้สูตรอะไรคะ ขอความกรุณาแนะนำด้วยค่ะ<br />
<br />
<br />
<span style="color: rgb(0 , 0 , 153); font-size: 130%;"><span style="font-weight: bold;">แนวทางคำตอบ</span></span><br />
<br /></div>
สำหรับท่านที่มี CD <span style="color: rgb(0 , 0 , 153); font-weight: bold;">"รวมไฟล์ตัวอย่าง Excel จากงานจริง" ชุดที่2</span> ลองเปิดดูในโฟลเดอร์ <span style="color: rgb(204 , 0 , 0); font-weight: bold;">"213-ตัวอย่างการคำนวณเกี่ยวกับเวลา"</span> จะมีไฟล์ตัวอย่าง เช่นเดียวกับกรณีนี้<br />
<br />
เนื่องจากผู้ถามไม่ได้แนบไฟล์ตัวอย่างมาด้วย ผมจึงไม่ทราบว่า มีการบันทึกข้อมูลในลักษณะไหน แต่ถ้าดูจากโจทย์ เห็นว่าวันที่บันทึกในแบบปี พ.ศ. และก็ไม่รู้ว่า มีการเก็บวันที่และเวลา แบบมีตัวอักษรปนด้วยหรือเปล่า ดังนั้น ก่อนที่ผมจะตอบคำถาม จึงแนะนำไปว่า ให้บันทึกข้อมูลวันที่ ในแบบปี ค.ศ. เท่านั้น และบันทึกเวลา โดยการใช้จุดคู่ ( : ) ห้ามใช้เป็นทศนิยม<br />
<br />
สำหรับคำถามนี้ ผมคิดว่าน่าจะมี 2 แนวทาง ขึ้นอยู่กับว่า มีการบันทึกข้อมูลในลักษณะใด<br />
<br />
<br />
<span style="color: rgb(51 , 51 , 255); font-size: 130%; font-weight: bold;">กรณีที่หนึ่ง</span><br />
ถ้าบันทึกข้อมูลทั้งวันที่และเวลาลงในเซลล์เดียวกัน เช่น<br />
เวลาเข้า <span style="color: rgb(204 , 0 , 0);">9/5/2011 20:30</span> และเวลาออก <span style="color: rgb(204 , 0 , 0);">10/5/2011 2:45</span><br />
การหาจำนวนชั่วโมงการทำงาน สามารถหาได้จากสูตร<br />
<br />
<table align="center" border="1" style="height: 32px; width: 200px;"><tbody>
<tr><td align="center"><span style="font-size: 130%;"><span style="color: rgb(204 , 0 , 0);">=<span style="color: rgb(0 , 0 , 153);">เวลาออก</span> - <span style="color: rgb(0 , 0 , 153);">เวลาเข้า</span></span></span></td></tr>
</tbody></table>
<br />
<br />
แล้วจัดรูปแบบเซลล์ผลลัพธ์ให้เป็น h:mm<br />
<br />
<br />
<span style="color: rgb(51 , 51 , 255); font-size: 130%;"><span style="font-weight: bold;">กรณีที่สอง</span></span><br />
ถ้าบันทึกข้อมูล เฉพาะเวลาเข้า-ออกเท่านั้น โดยไม่มีวันที่ เช่น<br />
เวลาเข้า <span style="color: rgb(204 , 0 , 0);">20:30</span> และเวลาออก <span style="color: rgb(204 , 0 , 0);">2:45</span><br />
การหาจำนวนชั่วโมงการทำงาน สามารถหาได้จากสูตร<br />
<br />
<table align="center" border="1"><tbody>
<tr><td><span style="font-size: 130%;">=(<span style="color: rgb(0 , 0 , 153);">เวลาออก</span> - <span style="color: rgb(0 , 0 , 153);">เวลาเข้า</span>) + (<span style="color: rgb(0 , 0 , 153);">เวลาออก</span> < <span style="color: rgb(0 , 0 , 153);">เวลาเข้า</span>)</span></td></tr>
</tbody></table>
<br />
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMIR2eLAnjcTvF7lnDJ8i2EUGs05DEkPqEr5DY3LAK1ZSobjgf1HuPu8szioEHcwIrX5XaqG6EcVMPkqjE_GnGYDpBuYPDALtiNp3KJJM3yr1gSNi4cCjtp6PChiji-iQgJKNjLeM1f1k/s1600/Time_Calculate.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5605818473386709650" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMIR2eLAnjcTvF7lnDJ8i2EUGs05DEkPqEr5DY3LAK1ZSobjgf1HuPu8szioEHcwIrX5XaqG6EcVMPkqjE_GnGYDpBuYPDALtiNp3KJJM3yr1gSNi4cCjtp6PChiji-iQgJKNjLeM1f1k/s400/Time_Calculate.jpg" style="cursor: hand; cursor: pointer; height: 78px; width: 400px;" /></a><br />
<span style="color: rgb(204 , 0 , 0); font-size: 85%;">รูปที่ 1 ตัวอย่างการคำนวณชั่วโมงการทำงาน</span></div>
<br />
หรือจะใช้ IF เข้ามาช่วยตรวจสอบก่อนก็ได้ เช่น<br />
<br />
<div style="text-align: center;">
=IF(<span style="color: #cc0000;">เวลาออก < เวลาเข้า</span>, <span style="color: blue;"><b>1 </b>+ เวลาออก - เวลาเข้า</span>, เวลาออก - เวลาเข้า)</div>
<div style="text-align: center;">
<br /></div>
<br />
<span style="color: rgb(0 , 0 , 153); font-size: 130%;"><span style="font-weight: bold;">การหาผลรวมของเวลา และการคิดค่าตอบแทน</span></span><br />
<br />
มีคำถามเพิ่มเติมว่า เมื่อทำการรวมคอลัมน์เวลา (จากรูปที่ 1 คือคอลัมน์ C) จากการนับดูจะได้ 99:39 ชม. แต่ทำไมผลลัพธ์จึงแสดงออกมาแค่ 3:39 ชม. เท่านั้น<br />
<br />
ที่จริงแล้ว สิ่งที่คุณเห็นนั้น มันไม่ใช่อย่างที่มันเป็น ลองเข้าไปอ่านเพิ่มเติมเรื่อง "<a href="http://it-for-hr.blogspot.com/2010/09/date-time-format.html">ข้อมูลประเภทวันที่และเวลา (Date-Time Format)</a>" ซึ่งผมได้เคยเขียนอธิบายไปแล้ว ที่เป็นเช่นนั้นเพราะ 1 วันมี 24 ชม. หากเกิน 24 ชม.ขึ้นไป ส่วนที่เป็น 24 ชม.แรก Excel จะปัดเป็น 1 วัน โดยอัตโนมัติ ดังนั้น 99:39 ชม. จึงหมายถึง 4 วัน กับอีก 3:39 ชม.<br />
<br />
เมื่อทำการ SUM ช่วงเวลาทั้งหมด และต้องการให้แสดงผลเป็น 99:39 ชม. จะต้องจัดรูปแบบเซลล์ ของเซลล์ผลรวม เป็น <span style="color: rgb(204 , 0 , 0); font-weight: bold;">[h]:mm</span><br />
<br />
<br />
หากต้องการเอาผลรวมเวลาดังกล่าว ไปหาค่าตอบแทน โดยคูณกับอัตราค่าตอบแทนต่อชั่วโมง<br />
เช่น ชั่วโมงละ 50 บาท ก็สามารถเขียนสูตรได้ดังนี้<br />
<br />
<table align="center" border="1" style="height: 32px;"><tbody>
<tr><td align="center"><span style="font-size: 130%;"><span style="color: rgb(204 , 0 , 0);">=<span style="color: rgb(51 , 51 , 255);">ผลรวมเวลา</span> x <span style="color: rgb(51 , 51 , 255);">24</span> x <span style="color: rgb(51 , 51 , 255);">อัตราค่าตอบแทนต่อชั่วโมง</span></span></span></td></tr>
</tbody></table>
<br />
<br />
ผลลัพธ์ของค่าตอบแทน ให้จัดรูปแบบเซลเป็น #,##0.00;;<br />
ลองนำไปใช้ดูนะครับ<br />
<br />
<br />
<hr />
ครูเอกhttp://www.blogger.com/profile/01255634988258604526noreply@blogger.com1tag:blogger.com,1999:blog-6989162005462801250.post-2553666507499920632016-01-08T18:21:00.000+07:002016-01-08T19:00:49.803+07:00การจัดกลุ่มนักเรียน จากคะแนนเฉลี่ย<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi78S1-UAczuTBzvGUvQ37LPIlGo_NuxAi-PNXU5tbf1CNWpge0HmCY6gntMTYRoRW9IrA_IyYGR0FVGGvNAx5Naf2wr6mK5_DMDsR65zmUwkoswauE0_ImgWhoAqMYAsfUoCS_793eQDg/s1600/180844-1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="274" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi78S1-UAczuTBzvGUvQ37LPIlGo_NuxAi-PNXU5tbf1CNWpge0HmCY6gntMTYRoRW9IrA_IyYGR0FVGGvNAx5Naf2wr6mK5_DMDsR65zmUwkoswauE0_ImgWhoAqMYAsfUoCS_793eQDg/s640/180844-1.jpg" width="640" /></a></div>
เมื่อปีก่อน มีชาวต่างชาติท่านหนึ่ง ในฟอรั่มที่ผมเป็นสมาชิก ตั้งคำถามนี้ ความต้องการของเขาก็คือ ในคอลัมน์ E ต้องการให้แสดงข้อความใดข้อความหนึ่ง First, Second, Pass และ Fail โดยมีเงื่อนไขคือ<br />
<span style="color: blue;">ถ้าเปอร์เซ็นต์เฉลี่ย มากกว่าหรือเท่ากับ 60% --> First</span><br />
<span style="color: blue;">ถ้าเปอร์เซ็นต์เฉลี่ย มากกว่าหรือเท่ากับ 45% --> Second</span><br />
<span style="color: blue;">ถ้าเปอร์เซ็นต์เฉลี่ย มากกว่าหรือเท่ากับ 30% --> Pass</span><br />
<span style="color: blue;">แต่ถ้าต่ำกว่า 30% --> Fail</span><br />
<br />
ถ้าเป็นคุณ คุณจะแนะนำสูตรอะไร?<br />
<br />
ผมเคยเอาโจทย์นี้ไปถามหลายๆ คน ส่วนใหญ่นึกถึงฟังก์ชัน IF<br />
<b><span style="color: #cc0000;">ครับ....ใช้ฟังก์ชัน IF ก็ได้</span></b><br />
<br />
แต่ก่อนอื่น ต้องหาค่าเฉลี่ยของคะแนนจาก 3 คอลัมน์ B, C และ D ก่อน เนื่องจากทั้งสามคอลัมน์ มีคะแนนเต็ม 100 เท่ากัน ฉะนั้น จึงสามารถหาค่าเฉลี่ยด้วยฟังก์ชัน AVERAGE ก็ได้<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaOeibmM4KKKCr_MhJTaNb9Qf5gWeH6kH18rMRavO9VS-u-_W_9jVZq2cj7WxIVNIga0A5xkXgr_H7AGAjhZgNZ1sPSCbfQeP29BKvf8u6GbAZjz0jZuacDVRPRsJoTqZE-TxDRGlgjNM/s1600/180844-3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaOeibmM4KKKCr_MhJTaNb9Qf5gWeH6kH18rMRavO9VS-u-_W_9jVZq2cj7WxIVNIga0A5xkXgr_H7AGAjhZgNZ1sPSCbfQeP29BKvf8u6GbAZjz0jZuacDVRPRsJoTqZE-TxDRGlgjNM/s1600/180844-3.jpg" /></a></div>
มีสูตรอื่นที่สั้นกว่านี้หรือไม่? ยิ่งถ้ามีเงื่อนไขมากกว่านี้ สูตรคงยาวน่าดู<br />
<br />
<b><span style="color: #990000;">ลองใช้ VLOOKUP ก็ได้ครับ</span></b> แต่ต้องสร้างตารางเงื่อนไขขึ้นมาก่อน ดังรูป<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFGUq_DETSVr7o-upuAUhiQHdAs-X3YY4eGR1JzorkCmV4_2n0jZrwl_qQNATavrb3nhZye2xrfMq3XPQbeEP-16Z8OocrWmwrZegHQLzBwcwXOVRosVGIPFsvlJWsgSGnbWr2iaPQHjc/s1600/180844-2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFGUq_DETSVr7o-upuAUhiQHdAs-X3YY4eGR1JzorkCmV4_2n0jZrwl_qQNATavrb3nhZye2xrfMq3XPQbeEP-16Z8OocrWmwrZegHQLzBwcwXOVRosVGIPFsvlJWsgSGnbWr2iaPQHjc/s1600/180844-2.jpg" /></a></div>
<div>
<br /></div>
<div>
ช่วงเงื่อนไขคือ J2:K5</div>
<div>
<br /></div>
<div>
ดังนั้น ที่ E2 สามารถใช้ VLOOKUP ได้ ดังนี้</div>
<div>
=VLOOKUP(AVERAGE(B2:D2),$J$2:$K$5,2) หรือ</div>
<div>
=VLOOKUP(AVERAGE(B2:D2),$J$2:$K$5,2,1) หรือ</div>
<div>
=VLOOKUP(AVERAGE(B2:D2),$J$2:$K$5,2,TRUE)</div>
<div>
<br /></div>
<div>
<i><span style="color: #990000;">ซึ่งการใช้ VLOOKUP ในลักษณะนี้ เรียกว่า เป็นการ Lookup แบบหาค่าใกล้เคียง (Approximate match) โดยเงื่อนไขในคอลัมน์ J ซึ่งเป็นคอลัมน์แรกของตารางข้อมูล จะต้องเรียงลำดับ <b>จากน้อยไปมาก </b>เสมอ</span></i></div>
<div>
<br /></div>
<div>
จากนั้น ก็คัดลอกสูตรลงมาจนถึงแถวสุดท้าย</div>
<div>
<br />
<br />
ปล. ถ้าคะแนนเต็มของแต่ละวิชา ไม่ใช่ 100 คะแนนล่ะ? (เช่น คะแนนเต็ม = 50) แต่เงื่อนไขของโจทย์ ต้องการเทียบเป็นเปอร์เซ็นต์ กรณีนี้ จะต้องรวมคะแนนของทั้ง 3 วิชา แล้วหารด้วย 150 (50x3 วิชา) แล้วไปคูณ 100 เพื่อเทียบออกมาเป็นเปอร์เซ็นต์อีกทีหนึ่ง เช่น<br />
<br />
=VLOOKUP(<span style="color: #990000;">SUM(B2:D2)/150*100</span>,$J$2:$K$5,2) เป็นต้น<br />
<br /></div>
ครูเอกhttp://www.blogger.com/profile/01255634988258604526noreply@blogger.com0tag:blogger.com,1999:blog-6989162005462801250.post-87111799394052989192016-01-05T20:35:00.000+07:002016-01-05T20:45:48.189+07:00การนับจำนวน "คำ" หรือจำนวน "ตัวอักษร" ในประโยค<b>ถ้าต้องการหาจำนวน "คำ" หรือจำนวน "ตัวอักษร" ที่ต้องการ จากประโยคยาวๆ ว่ามีกี่คำ หรือมีกี่ตัวอักษร จะต้องใช้สูตรอย่างไร</b><br />
<br />
<br />
<b><u><span style="font-size: large;">กรณีที่หนึ่ง</span></u></b> ต้องการหาจำนวน "<b>ตัวอักษร</b>" ที่ต้องการ เช่น ถ้า A1 มีข้อความว่า <span style="color: blue;">"Krungthepm</span><span style="color: red;">a</span><span style="color: blue;">h</span><span style="color: red;">a</span><span style="color: blue;">n</span><span style="color: red;">a</span><span style="color: blue;">khon </span><span style="color: red;">A</span><span style="color: blue;">monr</span><span style="color: red;">a</span><span style="color: blue;">tt</span><span style="color: red;">a</span><span style="color: blue;">n</span><span style="color: red;">a</span><span style="color: blue;">kosin"</span> และต้องการทราบว่า ในประโยคนี้มีอักษรตัว "<b><span style="color: red;">A</span></b>" กี่ตัว ทั้งตัวพิมพ์ใหญ่ และตัวพิมพ์เล็ก<br />
<br />
ในฟังก์ชันปกติของ Excel ไม่มีฟังก์ชันที่ใช้นับเฉพาะจำนวนตัวอักษรที่ต้องการ จึงต้องใช้เทคนิคพิเศษ หลักการก็คือ ทำการนับจำนวนตัวอักษรทั้งหมดในประโยคเดิม และลบด้วย จำนวนตัวอักษรทั้งหมดในประโยคที่ "ตัด" ตัวอักษรนั้นออกไปแล้ว เช่น<br />
<br />
ประโยคเดิม : <span style="color: blue;">"Krungthepm</span><span style="color: red;">a</span><span style="color: blue;">h</span><span style="color: red;">a</span><span style="color: blue;">n</span><span style="color: red;">a</span><span style="color: blue;">khon </span><span style="color: red;">A</span><span style="color: blue;">monr</span><span style="color: red;">a</span><span style="color: blue;">tt</span><span style="color: red;">a</span><span style="color: blue;">n</span><span style="color: red;">a</span><span style="color: blue;">kosin" </span>มีความยาว 36 ตัวอักษร<br />
ประโยคใหม่ : <span style="color: blue;">"Krungthepm</span><span style="color: blue;">h</span><span style="color: blue;">n</span><span style="color: blue;">khon </span><span style="color: blue;">monr</span><span style="color: blue;">tt</span><span style="color: blue;">n</span><span style="color: blue;">kosin" </span>มีความยาว 29 ตัวอักษร<br />
<br />
ดังนั้น ถ้าเอา 36 - 29 จะได้ผลลัพธ์ 7 ซึ่งคือจำนวนของอักษรตัว "A" นั่นเอง (ทั้งตัวพิมพ์ใหญ่ และตัวพิมพ์เล็ก)<br />
<br />
สูตรสำหรับ "ตัด" ตัวอักษรที่ต้องการออกไป (เช่นตัว A หรือ a) เมื่อประโยคเดิมอยู่ที่ A1 โดยเขียนสูตรที่ A2 ดังนี้<br />
<br />
=SUBSTITUTE(SUBSTITUTE(A1,"<span style="color: red;">A</span>",""),"<span style="color: red;">a</span>","") หรือ<br />
=SUBSTITUTE(LOWER(A1),"<span style="color: red;">a</span>","") หรือ<br />
=SUBSTITUTE(UPPER(A1),"<span style="color: red;">A</span>","")<br />
<br />
สูตรสำหรับนับจำนวนตัวอักษรในประโยค<br />
B1 =LEN(A1) จะได้ผลลัพธ์ 36<br />
B2 =LEN(A2) จะได้ผลลัพธ์ 29<br />
ณ เซลใดๆ (ที่ต้องการหาผลลัพธ์ของจำนวนตัวอักษร A หรือ a) พิมพ์สูตร<br />
=B1-B2 จะได้ผลลัพธ์ 7<br />
<br />
ดังนั้น สามารถยุบสูตรให้เหลือขั้นตอนเดียว ดังนี้<br />
=LEN(A1) - LEN(SUBSTITUTE(SUBSTITUTE(A1,"<span style="color: red;">A</span>",""),"<span style="color: red;">a</span>","")) หรือ<br />
=LEN(A1) - LEN(SUBSTITUTE(LOWER(A1),"<span style="color: red;">a</span>","")) หรือ<br />
=LEN(A1) - LEN(SUBSTITUTE(UPPER(A1),"<span style="color: red;">A</span>",""))<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtveQyNOVuq2c5vo1OMVDgk8o8LCosqzdxtlAgNr7X_2Jrmen71BtP4mE8sLxMjafgZ_MuxBPqMilZWikkq_Bm7wM9zrqkJOTMiSZALcA-WvyxZ7DzD3okYQUYJlOwBPa1bLUM9bn8u0s/s1600/5-1-2016+20-23-05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtveQyNOVuq2c5vo1OMVDgk8o8LCosqzdxtlAgNr7X_2Jrmen71BtP4mE8sLxMjafgZ_MuxBPqMilZWikkq_Bm7wM9zrqkJOTMiSZALcA-WvyxZ7DzD3okYQUYJlOwBPa1bLUM9bn8u0s/s400/5-1-2016+20-23-05.png" width="400" /></a></div>
<br />
<br />
-----------------------------------------------<br />
<br />
<b><u><span style="font-size: large;">กรณีที่สอง</span></u></b> ต้องการหาจำนวน "<b>คำ</b>" ที่ต้องการ เช่น ถ้า A1 มีข้อความว่า<br />
<span style="color: blue;">"</span><span style="color: red;">บัน</span><span style="color: blue;">ดาลลง</span><span style="color: red;">บัน</span><span style="color: blue;">ได </span><span style="color: red;">บัน</span><span style="color: blue;">ทึกไว้ใส่เกศี </span><span style="color: red;">บัน</span><span style="color: blue;">เทิงรื่นเริงมี </span><span style="color: red;">บัน</span><span style="color: blue;">ลือลั่นสนั่นเมือง"</span> และต้องการทราบว่า ในประโยคนี้มีคำว่า "<b><span style="color: red;">บัน</span></b>" กี่คำ<br />
<br />
สำหรับการนับจำนวนคำที่ต้องการนี้ โดยพื้นฐานก็ยังใช้หลักการเดียวกัน กับการนับจำนวนตัวอักษร นั่นคือ ทำการนับจำนวนตัวอักษรทั้งหมดในประโยคเดิม และลบด้วย จำนวนตัวอักษรทั้งหมดในประโยคที่ "ตัด" คำนั้นออกไปแล้ว<br />
<br />
<span style="color: #cc0000;">แต่เนื่องจาก "คำ" แต่ละคำ จะมีจำนวนตัวอักษรหลายตัว ดังนั้น จึงต้องเอาจำนวนตัวอักษรของคำมาหารอีกครั้ง ก็จะได้เป็นจำนวนคำที่ต้องการ</span> เช่น<br />
<br />
=<b><span style="color: red;">(</span></b>LEN(A1) - LEN(SUBSTITUTE(A1,"<span style="color: red;">บัน</span>",""))<span style="color: red;"><b>) </b></span>/ LEN("<span style="color: red;">บัน</span>")<br />
ก็จะได้ผลลัพธ์เป็น 5 ซึ่งก็คือจำนวน 5 คำ นั่นเอง<br />
<br />
ในการเขียนสูตร เพื่อค้นหาจำนวนคำหรือจำนวนตัวอักษร ไม่ควรใส่ค่าคงที่ลงไปในสูตร ควรกำหนดให้พิมพ์เงื่อนไข "ตัวอักษร" หรือ "คำ" ที่ต้องการ ลงในเซลใดเซลหนึ่ง เช่น B3 แล้วเขียนสูตรเพื่ออ้างอิงไปยังเซลนั้น เช่น<br />
<br />
=<b><span style="color: red;">(</span></b>LEN(A1) - LEN(SUBSTITUTE(A1,<span style="color: blue;">B3</span>,""))<span style="color: red;"><b>) </b></span>/ LEN(<span style="color: blue;">B3</span>) ดังรูป<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1cV6Re8mFl0QDIZAI2WGrOHfy_Xdr0N1xah8bytHNOM0IgV2NsfmPHeMLhnxoV2Ovm5iKX88wyAB9xSmWZIaiTGO6P0w1nK_C8Wx8EcppUovQrxhuTkipjSBmQLi-rq-fL7zs_zNRPfQ/s1600/5-1-2016+20-29-34.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="103" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1cV6Re8mFl0QDIZAI2WGrOHfy_Xdr0N1xah8bytHNOM0IgV2NsfmPHeMLhnxoV2Ovm5iKX88wyAB9xSmWZIaiTGO6P0w1nK_C8Wx8EcppUovQrxhuTkipjSBmQLi-rq-fL7zs_zNRPfQ/s400/5-1-2016+20-29-34.png" width="400" /></a></div>
<br />
<br />ครูเอกhttp://www.blogger.com/profile/01255634988258604526noreply@blogger.com0tag:blogger.com,1999:blog-6989162005462801250.post-74697551469562471392016-01-04T16:16:00.000+07:002016-01-04T16:23:36.290+07:00การนับจำนวนรายการที่ไม่ซ้ำกันจากรูปตัวอย่าง ถ้าต้องการจะทราบว่า <b>"มีผลไม้ทั้งสิ้นกี่ชนิด"</b> จะต้องใช้สูตรอย่างไร?<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMT0XEhpxNGyVEHrMn2p9fa9A7DlLdzh_ey4KyEM8VYhjWOKO-d8CH6sVf-_xyoQ6MDz4S_tg-c00x1Y6dNc2JnmtygiMvhbTFoODCDwqmTN71EJQK8eYpT76zEehX6nzzUVbySSUrqlo/s1600/4-1-2016+15-43-48.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMT0XEhpxNGyVEHrMn2p9fa9A7DlLdzh_ey4KyEM8VYhjWOKO-d8CH6sVf-_xyoQ6MDz4S_tg-c00x1Y6dNc2JnmtygiMvhbTFoODCDwqmTN71EJQK8eYpT76zEehX6nzzUVbySSUrqlo/s320/4-1-2016+15-43-48.png" width="320" /></a></div>
<br />
การนับจำนวนเฉพาะรายการที่ไม่ซ้ำกัน จากตารางที่มีข้อมูลที่ซ้ำๆ กัน (ดังรูป) สามารถใช้สูตรใดสูตรหนึ่ง ดังนี้<br />
<br />
<br />
<ol>
<li>พิมพ์สูตร =SUM(<span style="color: blue;">1/COUNTIF(A2:A16,A2:A16)</span>) แล้วกดแป้น Ctrl+Shift+Enter สามแป้นพร้อมกัน สูตรจะเปลี่ยนเป็น <span style="color: red;"><b>{</b></span>=SUM(<span style="color: blue;">1/COUNTIF(A2:A16,A2:A16)</span>)<span style="color: red;"><b>}</b></span> จะมีวงเล็บปีกกาครอบสูตรโดยอัตโนมัติ จะได้ผลลัพธ์เป็น 7</li>
<li>พิมพ์สูตร =SUMPRODUCT(<span style="color: blue;">1/COUNTIF(A2:A16,A2:A16)</span>) จะได้ผลลัพธ์เป็น 7 เช่นเดียวกัน</li>
</ol>
<br />
<br />
<b><u><span style="font-size: large;">แนวคิดของสูตร</span></u></b><br />
<br />
1. ที่ B2 ลองพิมพ์สูตร =COUNTIF($A$2:$A$16,$A$2:$A$16) แล้วคัดลอกสูตรลงมาถึง B16 จะได้ผลลัพธ์ ดังรูป ซึ่งก็คือจำนวนรายการที่ซ้ำกัน ของชื่อผลไม้แต่ละชนิด เช่น มีคำว่า "องุ่น" อยู่ 6 รายการ หรือมีคำว่า "ทุเรียน" อยู่ 3 รายการ เป็นต้น<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQDrQ2Ll72MdxN6NGQqWK6GurICssUj2hCHegKnXXWsFk_gnTpRkcMa4jkiybKUDk1MPQPYrvrhSepdfGBp1ZthBsSob9HR23izBncSCowW_kL3r21hhUQVTSufoCH2rSWbqZ8tjlKDAA/s1600/4-1-2016+15-59-01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQDrQ2Ll72MdxN6NGQqWK6GurICssUj2hCHegKnXXWsFk_gnTpRkcMa4jkiybKUDk1MPQPYrvrhSepdfGBp1ZthBsSob9HR23izBncSCowW_kL3r21hhUQVTSufoCH2rSWbqZ8tjlKDAA/s320/4-1-2016+15-59-01.png" width="320" /></a></div>
<br />
2. ที่ C2 ลองพิมพ์สูตร =1/B2 แล้วคัดลอกสูตรลงมาถึง C16 จะได้ผลลัพธ์ ดังรูป<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6pTicDM-XiVBc2nKgViCZJZF3d4yCDeFS8vfMlMV4StbmDNnvhng3SmxW3cjiHsFb8fyP15kH4ftj7g3LREakRFR56qvegRPEGR0vYFzq7aDVye08uZViVapT3U8YNNzfZstLajjDZv0/s1600/4-1-2016+16-02-41.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6pTicDM-XiVBc2nKgViCZJZF3d4yCDeFS8vfMlMV4StbmDNnvhng3SmxW3cjiHsFb8fyP15kH4ftj7g3LREakRFR56qvegRPEGR0vYFzq7aDVye08uZViVapT3U8YNNzfZstLajjDZv0/s320/4-1-2016+16-02-41.png" width="320" /></a></div>
<br />
3. ที่ตำแหน่งเซลใดๆ ลองพิมพ์สูตร =SUM(C2:C16) จะได้ผลลัพธ์เท่ากับ 7 ซึ่งก็คือ จำนวนชนิดรายการผลไม้ทั้งหมด ในตารางข้อมูลนั่นเอง<br />
<br />
ถ้ายุบสูตรจากขั้นตอนที่ 1 และขั้นตอนที่ 2 ก็จะได้เป็น =1/COUNTIF($A$2:$A$16,$A$2:$A$16)<br />
<br />
ในทำนองเดียวกัน ก็สามารถยุบสูตรทั้งสามขั้นตอนข้างต้น ให้เหลือเพียงขั้นตอนเดียว นั่นคือ<br />
<span style="color: blue;">=SUM(1/COUNTIF($A$2:$A$16,$A$2:$A$16))</span> แต่เนื่องจากการเอาช่วงข้อมูลไปหาร 1 นั้น ต้องกระทำทั้งช่วง ต้องใช้สูตรที่มีการทำงานแบบ <b>อาเรย์ (Array)</b> ฉะนั้น จึงต้องกด Ctrl+Shift+Enter 3 แป้นพร้อมกัน (ซึ่งจะมีเครื่องหมายวงเล็บปีกกาครอบสูตรให้โดยอัตโนมัติ)<br />
<br />
หรือเปลี่ยนไปใช้ฟังก์ชันที่มีการทำงานแบบอาเรย์ในตัว คือ SUMPRODUCT ก็ได้ โดยพิมพ์สูตร<br />
<span style="color: blue;">=SUMPRODUCT(1/COUNTIF($A$2:$A$16,$A$2:$A$16))</span> แล้วกด Enter ตามปกติครูเอกhttp://www.blogger.com/profile/01255634988258604526noreply@blogger.com4tag:blogger.com,1999:blog-6989162005462801250.post-90304801662737659762014-08-19T11:48:00.002+07:002014-08-19T11:48:22.409+07:00สูตรและฟังก์ชัน ต่างกันอย่างไร?เมื่อวานมีท่านหนึ่งโทรมาคุย เกี่ยวกับการอบรม Excel และช่วงหนึ่งของการสนทนา ก็มีคำถามว่า <b><span style="color: blue;">"สูตรและฟังก์ชัน ต่างกันอย่างไร?"</span></b> สำหรับเขาเข้าใจประมาณว่า สูตรเป็นส่วนย่อยในฟังก์ชัน ใช่หรือไม่?<br />
<br />
คุณผู้อ่านคิดว่าอย่างไร?<br />
<br />
ผมขออธิบายดังนี้ว่า<br />
<span style="color: blue;"><b>"ฟังก์ชัน : Function"</b></span> เป็นคำสั่งสำเร็จรูป ที่ถูกเขียนขึ้นมาด้วยคำสั่งทางโปรแกรม เพื่อให้แสดงผลลัพธ์อย่างใดอย่างหนึ่ง ตามวัตถุประสงค์ของฟังก์ชันนั้นๆ<br />
<span style="color: #990000;">ลักษณะสำคัญของทุกฟังก์ชัน คือ มีวงเล็บเปิด-ปิด 1 คู่เสมอ</span><br />
<br />
<b><span style="color: blue;">"สูตร : Formula" </span></b>เป็นการสร้างชุดคำสั่งใหม่ เพื่อให้ได้ผลลัพธ์อย่างใดอย่างหนึ่ง ที่ไม่สามารถหาได้จากฟังก์ชัน ซึ่งภายในสูตรนั้น อาจจะประกอบไปด้วยตัวแปร หรือฟังก์ชันด้วยก็ได้<br />
<span style="color: #990000;">ลักษณะสำคัญของสูตร คือ ต้องขึ้นต้นด้วยเครื่องหมายเท่ากับ = เสมอ</span><br />
<br />
<br />
<b>เมื่อไหร่จะใช้สูตร เมื่อไหร่จะใช้ฟังก์ชัน</b><br />
<br />
ถ้าเราต้องการผลลัพธ์ใดๆ ซึ่งผลลัพธ์นั้นสามารถแสดงได้ด้วยฟังก์ชัน ฟังก์ชันนั้นก็ถือว่าเป็นสูตรไปในตัว ตัวอย่างเช่น ฟังก์ชัน TODAY เป็นฟังก์ชันที่ใช้เพื่อแสดงวันที่ปัจจุบัน<br />
ถ้าต้องการสูตรแสดงวันที่ปัจจุบัน ก็พิมพ์ <span style="background-color: #ffd966; color: blue;">=TODAY()</span> แค่นี้ก็ได้ผลลัพธ์ตามต้องการ<br />
<br />
แต่ถ้าเราต้องการสูตรเพื่อให้แสดงว่า วันที่ปัจจุบันนั้น ตรงกับวันอะไรในสัปดาห์ เช่น วันจันทร์ วันอังคาร ฯลฯ ในกรณีนี้ ไม่มีฟังก์ชันใดใน Excel ที่จะแสดงผลลัพธ์ดังกล่าวได้ จึงจำเป็นต้องเขียนสูตรขึ้นมาใหม่ เช่น <span style="background-color: #ffd966;"><span style="color: blue;">=</span>"วัน"<span style="color: #990000;">&</span><span style="color: blue;">TEXT(</span><span style="color: #990000;">TODAY()</span><span style="color: blue;">,"วววว")</span></span><br />
<br />
โดยในสูตรนี้ มีการนำฟังก์ชัน TEXT (ช่วยในการจัดรูปแบบ) และฟังก์ชัน TODAY (วันที่ปัจจุบัน) มาใช้งานด้วย โดยมีการเชื่อมคำว่า "วัน" เอาไว้ข้างหน้าสุด<br />
<br />
พอจะมองเห็นความแตกต่างของคำว่า <b>"ฟังก์ชัน"</b> และ <b>"สูตร"</b> หรือยังครับ<br />
<br />
July 6, 2012ครูเอกhttp://www.blogger.com/profile/01255634988258604526noreply@blogger.com0tag:blogger.com,1999:blog-6989162005462801250.post-65638477491409666742014-08-18T23:25:00.002+07:002014-08-18T23:25:43.246+07:00การใช้ Smart Phone แบบ Smart Manเชื่อว่าในปัจจุบัน ผู้ใช้โทรศัพท์มือถือโดยทั่วไปในประเทศนี้ มากกว่า 90% จะเป็น Smart Phone ประเภทรูดปื๊ด รูดปื๊ด ไม่ว่าจะราคาถูกหรือราคาแพง แต่ยังพบเห็นบ่อยๆ ว่า ยังใช้งานกันแบบไม่ค่อยสมราคา ประมาณว่า ใช้คอมพิวเตอร์แบบเครื่องพิมพ์ดีดนั่นแหละครับ<br />
<br />
<span style="color: #990000;">ตัวอย่างง่ายๆ ที่พบเห็นบ่อยๆ ก็คือ กรณีเปลี่ยนเบอร์ เปลี่ยนเครื่อง เครื่องหาย ซิมหัก ย้ายค่าย ฯลฯ แล้วเบอร์โทรเพื่อนๆ หายหมด ทำอะไรไม่ได้ ต้องรอเพื่อนคนนั้นๆ โทรเข้ามา หรือโพสเฟสบุ๊คบอกเพื่อนๆ ว่า "ขอเบอร์กรูหน่อย เครื่องหาย ไม่มีเบอร์พวกเมิงเลย" ฯลฯ อะไรประมาณนี้</span><br />
<br />
โดยส่วนตัว ผมใช้ SmartPhone แอนดรอย ดังนั้น วิธีการที่จะแนะนำในที่นี้ ก็เฉพาะกับมือถือแอนดรอยเท่านั้น <i><span style="color: #990000;">(สำหรับ i-Phone เข้าใจว่าก็น่าจะมีวิธีการที่ Smart เช่นกัน แต่ผมไม่เคยใช้ ดังนั้น ไปหาวิธีการเอาเองนะครับ อิอิ)</span></i><br />
<br />
คนที่ใช้มือถือหรือแท๊ปเล็ตแอนดรอย แน่นอนว่า คุณจะต้องมีบัญชีของกูเกิล (Google Account) หรือต้องมี G-mail นั่นเอง จึงจะสามารถโหลด App ต่างๆ มาเล่นได้ การมี Google Account มันมีประโยชน์มากกว่าแค่ใช้โหลด App นะครับ โดยเฉพาะในเรื่องการเก็บรายชื่อ เบอร์โทร ของเพื่อนๆ (Contact)<br />
<br />
<span style="color: blue;">ตั้งแต่เปลี่ยนมาใช้ SmartPhone ผมก็ย้ายรายชื่อ เบอร์โทร และข้อมูลต่างๆ ของเพื่อน หรือคนที่ต้องติดต่อด้วย ไปไว้ใน Contact List ของ G-mail จะไม่เก็บข้อมูลเหล่านั้นไว้ในซิม หรือในเครื่องอีกต่อไป เวลาที่ผมจะเปลี่ยนเครื่อง เปลี่ยนเบอร์ เปลี่ยนซิม หรือใช้มือถือมากกว่า 1 เครื่องขึ้นไป เวลาที่ซิงค์ข้อมูล ก็ใช้ G-mail ตัวเดียวกัน ก็จะได้ข้อมูลที่เหมือนกัน เวลาอัพเดตข้อมูล เพิ่มหรือแก้ไขเบอร์โทร ทุกเครื่องที่ใช้ก็ได้รับการอัพเดตเหมือนกันทุกเครื่อง</span><br />
<br />
ในสมุดรายชื่อของ G-mail หรือ Contact List นั้น เราสามารถจัดกลุ่มรายชื่อ แบ่งหมวดหมู่ เพื่อสะดวกในการค้นหา การสำรองข้อมูล หรือการส่งออก (Export Data) เพื่อแบ่งปันรายชื่อ-ข้อมูล ของเพื่อนกลุ่มนั้นๆ ไปให้คนอื่นได้โดยสะดวก<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg22lG4dtbjn8po6damtel1Mm9oCwm_M7xgMacYpkN140UBrH5hQSIQMyupIruYYhQ6KrwNEmjPj3k1xRIkIvY1gdCVcd9OIloOwRg0ELFwF8m1dPLbkOxuTJukq2Tl4JSiRQuqSvmSMNA/s1600/Gmail_Contact.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg22lG4dtbjn8po6damtel1Mm9oCwm_M7xgMacYpkN140UBrH5hQSIQMyupIruYYhQ6KrwNEmjPj3k1xRIkIvY1gdCVcd9OIloOwRg0ELFwF8m1dPLbkOxuTJukq2Tl4JSiRQuqSvmSMNA/s1600/Gmail_Contact.jpg" height="276" width="400" /></a></div>
<div style="text-align: center;">
<span style="color: #990000; text-align: center;">ตัวอย่างข้อมูลใน Contact List ของ G-mail</span></div>
<br />
<br />
นอกจากแค่ ชื่อ และเบอร์โทรแล้ว เรายังสามารถเพิ่มความสมบูรณ์ให้กับรายชื่อเพื่อนๆ ได้อีก เช่น เพิ่มรูปภาพ, เพิ่มเบอร์โทร (กรณีที่เพื่อนมีหลายเบอร์ ก็ไม่ต้องบันทึกหลายชื่อ) ทั้งเบอร์บ้าน ที่ทำงาน เบอร์แฟ็กซ์ ฯลฯ เช่นเดียวกับที่อยู่ ทั้งที่บ้าน ที่ทำงาน, วันเดือนปีเกิด (ซึ่งมันจะขึ้นโชว์เตือนเราได้ว่า อีกกี่วันจะถึงวันเกิดเพื่อนคนนี้) ทั้งยังเพิ่มบันทึกย่อๆ เพิ่มเติมได้อีก เช่น เพื่อนคนนี้ ชอบกินอะไร ไม่ชอบกินอะไร หรืออาจจะจดเบอร์บัญชีธนาคารไว้ก็ได้ ไม่ต้องโทรถามกันบ่อยๆ เวลาที่จะโอนเงินให้กัน ฯลฯ<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1MkpeZLv6jbJXsmSI9oBvS_D7vc6m4P9dzrkgP6PnCMyqe2_mFkBWzaHDGZY2yvqIOaeqC0imn4XQ_t4YeBN7j-uF-qo6n6eSnKP2HmuIIvxr_ytIDl_AlHR9biSjEXFSHLNwLuP0PxI/s1600/Gmail_Contact2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1MkpeZLv6jbJXsmSI9oBvS_D7vc6m4P9dzrkgP6PnCMyqe2_mFkBWzaHDGZY2yvqIOaeqC0imn4XQ_t4YeBN7j-uF-qo6n6eSnKP2HmuIIvxr_ytIDl_AlHR9biSjEXFSHLNwLuP0PxI/s1600/Gmail_Contact2.jpg" height="342" width="400" /></a></div>
<div style="text-align: center;">
<span style="color: #990000;">ตัวอย่างรายละเอียดของข้อมูลแต่ละคนใน Contact List</span></div>
<br />
<br />
เพียงแค่จัดการข้อมูล Contact List ใน G-mail ของเราให้สมบูรณ์ ต่อไปก็ไม่ต้องกังวลแล้วว่า เวลาเปลี่ยนเครื่อง เปลี่ยนเบอร์ ฯลฯ เบอร์เพื่อนๆ จะหาย<br />
<br />
นอกจากเรื่อง Contact List แล้ว Google Account ยังมีประโยชน์อื่นๆ อีก โอกาสหน้าจะมาเล่าสู่กันฟังใหม่ สวัสดีครับ<br />
<br />
<br />
November 9, 2013ครูเอกhttp://www.blogger.com/profile/01255634988258604526noreply@blogger.com0tag:blogger.com,1999:blog-6989162005462801250.post-71447183074216927142014-08-18T23:13:00.001+07:002014-08-18T23:13:30.345+07:00โหลดคลิปง่ายๆ ด้วย KEEPVID.COMเมื่อหลายปีก่อน ผมเคยเขียนเรื่อง "<a href="http://it-for-hr.blogspot.com/2009/03/youtube.html" target="_blank">วิธีง่ายๆ ในการโหลดคลิปจาก youtube มาเก็บไว้ดูในเครื่อง</a>" โดยใช้เพจที่ชื่อว่า KickYoutube ต่อมาผมก็เจอว่า มีอีกเว็บเพจหนึ่งที่สามารถดาวน์โหลดคลิปจากยูทูปได้เช่นกัน เพียงแค่เอา URL ของคลิปนั้นไปวาง นั่นคือ <a href="http://keepvid.com/" target="_blank">KEEPVID.COM</a> ผมก็เลยใช้บริการอยู่เป็นประจำ เพราะใช้ง่าย และสะดวก<br />
<br />
แต่เดิมเคยคิดว่า <a href="http://keepvid.com/" target="_blank">KEEPVID</a> ใช้โหลดคลิปจากยูทูปได้อย่างเดียว วันหนึ่งลองเอาลิงค์คลิปจากเฟซบุ๊ก วางลงไป ก็เลยเพิ่งรู้ว่า KEEPVID มันใช้ดาวน์โหลดวิดีโอในเฟซบุ๊กได้อีกด้วย เพียงแต่วิธีการบันทึกไฟล์จะต่างกันนิดหน่อย<br />
<br />
<b><u><span style="font-size: large;">วิธีการใช้งาน KEEPVID</span></u></b><br />
<br />
1. เมื่อคุณดูคลิปวิดีโอใดๆ แล้วต้องการโหลดมาเก็บไว้ในเครื่อง ให้คัดลอก URL ของวิดีโอนั้นไว้ จากนั้นก็เปิดเว็บ keepvid.com แล้ววาง URL นั้นลงไปในช่องด้านบน (ดังรูป) แล้วคลิกปุ่ม Download ที่อยู่ทางขวามือของช่องนั้น (อย่าเผลอไปกดในพื้นที่โฆษณานะครับ)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1EbWbWxW_ScWvAHei6LxFQ03MXSswI0IiP3W7AHO_pOFS9uE7c6gNTKXuEeQOzemDf64cRJwYuHPNshTq4wqsltFgkaUVSPhssegQSFP2gwLgP3Nxs_2nJ21ZRIP6eZZ_79lBcqjiz-Y/s1600/16-7-2014+11-52-29+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1EbWbWxW_ScWvAHei6LxFQ03MXSswI0IiP3W7AHO_pOFS9uE7c6gNTKXuEeQOzemDf64cRJwYuHPNshTq4wqsltFgkaUVSPhssegQSFP2gwLgP3Nxs_2nJ21ZRIP6eZZ_79lBcqjiz-Y/s1600/16-7-2014+11-52-29+AM.png" height="236" width="320" /></a></div>
<br />
<br />
2. สักครู่ก็จะมีลิงค์ให้ดาวน์โหลดขึ้นมาด้านล่าง (ดังรูป) โดยมีให้เลือกหลายนามสกุล หลายความละเอียด คุณก็คลิกเลือกตามต้องการ<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoStiBDfy_UH_3LlkUEw_rkuMcEgxq8qKJ5Am2SpPZ__DTH7VrKFiray79jPZ6Wfgxlz8O9qU6I16-LUGsjK2v7QEx3ntijyieknQt-qUlvBv1mInmi89yFkN45qezpla1gaShoek7Vh0/s1600/16-7-2014+12-34-28+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoStiBDfy_UH_3LlkUEw_rkuMcEgxq8qKJ5Am2SpPZ__DTH7VrKFiray79jPZ6Wfgxlz8O9qU6I16-LUGsjK2v7QEx3ntijyieknQt-qUlvBv1mInmi89yFkN45qezpla1gaShoek7Vh0/s1600/16-7-2014+12-34-28+PM.png" height="201" width="320" /></a></div>
<br />
<i><span style="color: #990000;">ปล. ในขั้นตอนนี้ กรณีที่เป็นการดาวน์โหลดวิดีโอจากเฟซบุ๊ก ให้คุณคลิกขวาที่ลิงค์ที่ต้องการ แล้วเลือก Save Link as.. แล้วใส่ชื่อไฟล์ตามต้องการ</span></i><br />
<br />
3. จากนั้น ก็จะปรากฎหน้าต่างเพื่อให้เราตั้งชื่อไฟล์ และเลือกว่า จะบันทึกไปไว้ที่ไหน<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqN6D2DNMSHvrLj8N1Hzl7Sw7wFIV5X21K04FaFzB02G8MljjisPUJx59m2ByFyhpJOUidMxAgph-EHpvq0yAIHLplTylmwOViJHRh5Vf6FbLmqC0PrLQHWHH2jzS79c8Z9F_BNiNTjmc/s1600/16-7-2014+12-35-27+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqN6D2DNMSHvrLj8N1Hzl7Sw7wFIV5X21K04FaFzB02G8MljjisPUJx59m2ByFyhpJOUidMxAgph-EHpvq0yAIHLplTylmwOViJHRh5Vf6FbLmqC0PrLQHWHH2jzS79c8Z9F_BNiNTjmc/s1600/16-7-2014+12-35-27+PM.png" height="224" width="320" /></a></div>
<br />
<br />
เพียงเท่านี้ คุณก็จะได้คลิปที่คุณชื่นชอบ มาเก็บไว้ในเครื่องของคุณแล้ว เพื่อเอาไว้ดูย้อนหลัง หรือเอาไปใช้ประกอบการสอน หรือการนำเสนอต่อไป<br />
<br />
<br />
July 16, 2014ครูเอกhttp://www.blogger.com/profile/01255634988258604526noreply@blogger.com0tag:blogger.com,1999:blog-6989162005462801250.post-36312746350361967302012-04-30T11:31:00.000+07:002012-04-30T11:31:58.588+07:00การหาวันครบระยะทดลองงานของพนักงานบริษัทแห่งหนึ่ง มีนโยบายให้ฝ่ายบุคลากร ดำเนินการประเมินผลพนักงานใหม่แต่ละคน ที่ใกล้จะครบระยะทดลองงาน ในช่วงประมาณ 15 วันก่อนครบกำหนด แต่ในระยะเวลาใกล้เคียงกัน มีพนักงานเข้าใหม่เป็นจำนวนมาก<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX5Pxp7C6gxW44j22NlXA8VXK91_wpGeI7QpMc0_TiJdDBxQzneIjYAg_ADv1xQW_1FXvoTktMFCx54zhJWiIyRXYH_bWn1ZNX6fObT4VFi3fSQHZQtNa1NRQZDeczrguKMXh_xUyvG2Q/s1600-h/03-01-%E0%B8%84%E0%B8%A3%E0%B8%9A%E0%B8%97%E0%B8%94%E0%B8%A5%E0%B8%AD%E0%B8%87%E0%B8%87%E0%B8%B2%E0%B8%99.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5316545458359485874" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX5Pxp7C6gxW44j22NlXA8VXK91_wpGeI7QpMc0_TiJdDBxQzneIjYAg_ADv1xQW_1FXvoTktMFCx54zhJWiIyRXYH_bWn1ZNX6fObT4VFi3fSQHZQtNa1NRQZDeczrguKMXh_xUyvG2Q/s320/03-01-%E0%B8%84%E0%B8%A3%E0%B8%9A%E0%B8%97%E0%B8%94%E0%B8%A5%E0%B8%AD%E0%B8%87%E0%B8%87%E0%B8%B2%E0%B8%99.jpg" style="cursor: pointer; height: 111px; width: 350px;" /></a><br />
<span style="color: #cc0000;">รูปที่ 1 ตารางเตือนสถานะการทดลองงานของพนักงานเข้าใหม่</span><br /><br /><br />เจ้าหน้าที่เกรงว่า จะตรวจสอบไม่ทั่วถ้วน จึงต้องการสร้างตารางเตือน ด้วย Excel ให้มีลักษณะข้อมูล และความสามารถในการแจ้งเตือน ดังรูปที่ 1 โดยมีเงื่อนไขหลักๆ ดังนี้<br />
<ol>
<li> วันครบทดลองงานคือ วันเริ่มงาน + 119 รวมเป็น 120 วัน</li>
<li>ถ้าวันครบทดลองงานตรงกับวันปัจจุบัน ให้แสดงคำว่า "<span style="color: #cc0000;"><b>ครบวันนี้</b></span>" ในช่อง<span style="color: #cc0000;"><b>สถานะ</b></span></li>
<li>ถ้าวันปัจจุบันเลยวันครบทดลองงานมาแล้ว ไม่ต้องแสดงข้อความใดๆ ในช่อง<span style="color: #cc0000;"><b>สถานะ</b></span></li>
<li>ถ้าวันปัจจุบันยังไม่ถึงวันครบทดลองงาน ให้แสดงจำนวนวันที่เหลือในช่อง<span style="color: #cc0000;"><b>คำเตือน</b></span> โดย<ul type="disc">
<li>ถ้าเหลือเวลามากกว่า 15 วัน ในช่อง<span style="color: #cc0000;"><b>สถานะ</b></span> ให้แสดงคำว่า "<span style="color: #cc0000;"><b>ช่วงทดลองงาน</b></span>"</li>
<li>ถ้าเหลือระยะเวลาไม่เกิน 15 วัน ในช่อง<span style="color: #cc0000;"><b>สถานะ</b></span> ให้แสดงคำว่า "<span style="color: #cc0000;"><b>ช่วงประเมินผล</b></span>"</li>
</ul>
</li>
</ol>
<br /><br />อ่านเงื่อนไขแล้วมึนหรือเปล่าครับ แค่รู้วันที่ครบทดลองงานก็นับว่าเก่งแล้ว นี่ยังมีการตรวจสอบระยะเวลาอีก ว่าช่วงไหนคือช่วงทดลองงาน ช่วงไหนคือช่วงประเมินผล ดังนั้นหน้าที่ของเราคือ <span style="color: blue;"><b>การตีโจทย์ให้แตก แล้วคิดวิธีเขียนสูตร หรือเลือกใช้ฟังก์ชัน เพื่อให้ตารางนี้ มีความเก่งในตัวเอง และให้ผลลัพธ์ตามที่เราต้องการ</b></span><br /><br />ขอให้คุณลองทำตารางข้อมูล ให้มีลักษณะเหมือนกับรูปที่ 2 เพื่อจะได้ลองทำไปพร้อมๆ กัน<br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjP5J9lAzaMFlj76i_YQMUevL59iam4PJMErOIGyPqKV35ND5tWeEsAMMR-RvYIcuC0ITYdpIkTu3eVnTPhjc7eGpHr5ZWCPCsTKFp_pY5CybPanqlU4MZZFk2mZnbSzM4ng2VlOp1GzRE/s1600-h/03-01-%E0%B8%84%E0%B8%A3%E0%B8%9A%E0%B8%97%E0%B8%94%E0%B8%A5%E0%B8%AD%E0%B8%87%E0%B8%87%E0%B8%B2%E0%B8%991.JPG"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5316546008498620562" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjP5J9lAzaMFlj76i_YQMUevL59iam4PJMErOIGyPqKV35ND5tWeEsAMMR-RvYIcuC0ITYdpIkTu3eVnTPhjc7eGpHr5ZWCPCsTKFp_pY5CybPanqlU4MZZFk2mZnbSzM4ng2VlOp1GzRE/s320/03-01-%E0%B8%84%E0%B8%A3%E0%B8%9A%E0%B8%97%E0%B8%94%E0%B8%A5%E0%B8%AD%E0%B8%87%E0%B8%87%E0%B8%B2%E0%B8%991.JPG" style="cursor: pointer; height: 111px; width: 350px;" /></a><br />
<span style="color: #cc0000;">รูปที่ 2 ตารางเตือนสถานะการทดลองงานของพนักงานเข้าใหม่</span><br /><br /><br />ก่อนอื่น ที่เซล F1 พิมพ์ <span style="color: blue;"><b>=TODAY()</b></span> เพื่อให้แสดงวันที่ปัจจุบัน<br />(อย่าลืมตั้งวันที่ในเครื่อง ให้ตรงกับวันปัจจุบันด้วยนะครับ)<br /><br />จากความต้องการของโจทย์ วันครบทดลองงานคือ วันเริ่มงาน + 119 ดังนั้นในเซล G3 พิมพ์ <b><span style="color: #cc0000;">=F3+119</span></b> เสร็จแล้วก็คัดลอกสูตรจาก G3 ลงมาที่ G4 ถึง G10<br /><br /><br />
<table align="center" border="1" cellpadding="1" cellspacing="0"><tbody>
<tr><td><b><u>หมายเหตุ</u></b><br />
ตาม พ.ร.บ.คุ้มครองแรงงาน พ.ศ.2541 หมวด 11 เรื่อง<b style="color: #000099;">ค่าชดเชย</b> กำหนดให้นายจ้างจ่ายค่าชดเชยให้แก่ลูกจ้างซึ่งเลิกจ้าง ดังมาตรา 118 (1) กล่าวว่า <span style="color: #cc0000;">"ลูกจ้างซึ่งทำงานติดต่อกันครบหนึ่งร้อยยี่สิบวัน แต่ไม่ครบหนึ่งปี ให้จ่ายไม่น้อยกว่าค่าจ้างอัตราสุดท้ายสามสิบวัน..."</span> ซึ่งในทางปฏิบัติเป็นที่รู้กันว่า ช่วงหนึ่งร้อยยี่สิบวันดังกล่าวเราเรียกกันว่า <span style="color: #000099;">"</span><b style="color: #000099;">ช่วงทดลองงาน</b><span style="color: #000099;">"</span> กรณีที่จ้างพนักงานสักคนเข้ามาทำงาน และผลการปฏิบัติงานเห็นว่า "<b>ไม่ไหวจริงๆ</b>" ไม่สามารถที่จะพิจารณาเพื่อบรรจุแต่งตั้งได้ ฝ่าย HR จะต้องดำเนินการแจ้งการเลิกจ้าง <b style="color: #cc0000;"><u>ก่อน</u>ถึงวันครบทดลองงาน</b> เพราะถ้าปล่อยจนถึงวันครบทดลองงาน ก็จะต้องจ่ายค่าชดเชยตามที่กำหนดใน มาตรา 118 (1) ด้วย</td></tr>
</tbody></table>
<br /><br />เมื่อทราบแล้วว่าพนักงานใหม่แต่ละคน จะครบทดลองงานในวันที่เท่าไรกันบ้าง ก็มาดูในส่วนที่เป็น<b><span style="color: #cc0000;">คำเตือน</span></b> เราจะเขียนสูตรเพื่อแจ้งเตือนตามที่โจทย์ระบุ ผมเห็นว่าการเขียนสูตรในช่องนี้ค่อนข้างง่าย เพราะเงื่อนไขไม่วุ่นวายมากนัก โจทย์บอกว่า <span style="color: #cc0000;">"ถ้าวันปัจจุบันยังไม่ถึงวันครบทดลองงาน ให้แสดงจำนวนวันที่เหลือในช่อง<span style="font-weight: bold;">คำเตือน</span>"</span> วันที่เหลือก็คือ อีกกี่วันจะครบทดลองงาน ดังนั้น <b><span style="color: blue;">จำนวนวันที่เหลือ (I3) คือ วันครบทดลองงาน (G3) – วันปัจจุบัน (F$1)</span></b> นั่นเอง<br /><br />แต่หากลองพิจารณาดูจะเห็นว่า ถ้าวันปัจจุบันยังไม่ถึงวันครบทดลองงาน เมื่อ<b><span style="color: blue;">วันครบทดลองงาน – วันปัจจุบัน</span></b> ก็จะได้เป็น <span style="color: blue;">"<b>ค่าบวก</b>"</span> แต่ในทางกลับกัน ถ้าวันปัจจุบันเลยวันครบทดลองงานแล้ว ก็จะได้เป็น <span style="color: blue;">"<b>ค่าลบ</b>"</span> คงจะดูตลกมากถ้าบอกว่า <span style="color: blue;">"<b>เหลืออีก (–5) วันจะครบทดลองงาน</b>"</span><br /><br />เราจึงเพิ่มเงื่อนไขว่า <b><span style="color: blue;">ถ้าวันปัจจุบันยังไม่ถึงวันครบทดลองงาน ก็ให้เอาวันครบทดลองงาน – วันปัจจุบัน</span></b> แล้วแจ้งเตือนว่าเหลืออีกกี่วัน<b> <span style="color: blue;">แต่ถ้าวันปัจจุบันเท่ากับวันครบทดลองงานพอดี หรือเลยวันครบทดลองงานไปแล้ว ก็ไม่ต้องแจ้งเตือนใดๆ</span></b> ดังนั้นในเซล I3 เราจึงเขียนสูตรใหม่โดยมีฟังก์ชัน IF เข้ามาตรวจสอบ และใช้เทคนิคการรวมข้อความมาช่วยดังนี้<br /><br />
<center style="color: #cc0000;"><b>=IF(F$1<$G3 , <b>"เหลืออีก "</b>&$G3-F$1&<b>" วัน"</b> , "")</b></center><br /><br />เสร็จแล้วก็ทำการคัดลอกสูตรจาก I3 ไปยัง I4 ถึง I10 สังเกตว่า พนักงานคนที่ครบกำหนดทดลองงานในวันนี้ (11/07/2006) พอดี หรือพ้นระยะทดลองงานมาแล้ว จะไม่มีคำแจ้งเตือนใดๆ ในช่อง<b><span style="color: #cc0000;">คำเตือน</span></b> แต่สำหรับคนที่ยังไม่ครบทดลองงาน ก็จะแสดง จำนวนวันที่เหลือให้ทราบ ดังรูปที่ 1<br /><br />คราวนี้ลองมาดูในช่อง<span style="color: #cc0000;"><b>สถานะ</b></span>กัน บ้าง ช่องนี้มีเงื่อนไขค่อนข้างมากกว่าช่องอื่นๆ ซึ่งอ่านจากโจทย์แล้วค่อนข้างจะสับสน ผมก็เลยเขียนออกมาเป็นแผนผัง เพื่อให้ดูง่ายขึ้น ดังรูปที่ 3<br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyze2uR20oDtdfOPT3c3MMHQJM4yzJLqZSirVLN8E_iVvZ5qeax_GuR-gUy7-3lctP2gODLVIQ7PgmnK-2ZC8I9lkvnPU4Jovah6C89S0bbrMd_ZUHahkXOw-scKJjwl8gvG_NHk8quq4/s1600-h/03-02-%E0%B8%84%E0%B8%A3%E0%B8%9A%E0%B8%97%E0%B8%94%E0%B8%A5%E0%B8%AD%E0%B8%87%E0%B8%87%E0%B8%B2%E0%B8%99.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5316547486727188786" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyze2uR20oDtdfOPT3c3MMHQJM4yzJLqZSirVLN8E_iVvZ5qeax_GuR-gUy7-3lctP2gODLVIQ7PgmnK-2ZC8I9lkvnPU4Jovah6C89S0bbrMd_ZUHahkXOw-scKJjwl8gvG_NHk8quq4/s320/03-02-%E0%B8%84%E0%B8%A3%E0%B8%9A%E0%B8%97%E0%B8%94%E0%B8%A5%E0%B8%AD%E0%B8%87%E0%B8%87%E0%B8%B2%E0%B8%99.jpg" style="cursor: pointer; height: 226px; width: 320px;" /></a><br />
<span style="color: #cc0000;">รูปที่ 3 แผนผังแสดงแนวคิดในการแสดงข้อความในคอลัมน์ "สถานะ"</span><br /><br /><br />จากแผนผังจะเห็นว่า ในขั้นตอนแรกเราจะตรวจสอบดูก่อนว่า วันปัจจุบัน (F$1) เลยกำหนดครบทดลองงาน (G3) หรือยัง ซึ่งถ้าเกินวันแล้ว ก็ไม่ต้องแสดงข้อความใดๆ (หรือใครจะให้แสดงข้อความว่า <span style="color: #cc0000;"><b>"เกินวันแล้ว"</b></span> ก็ไม่ว่ากันครับ)<br /><br />ถ้าวันปัจจุบัน (F$1) ยังไม่เกินกำหนดครบทดลองงาน (G3) แต่ตรงกับวันครบทดลองงานพอดี (F$1=G3) ก็ให้แสดงคำว่า <span style="color: #cc0000;"><b>"ครบวันนี้"</b></span><br /><br />ส่วนเงื่อนไขสุดท้ายคือ ถ้าวันปัจจุบัน (F$1) ยังไม่ถึงกำหนดทดลองงาน (น้อยกว่า G3) ก็ทำการตรวจสอบว่า ยังเหลืออีกกี่วัน (G3-F$1) ซึ่งถ้าเหลือมากกว่า 15 วัน ให้แสดงข้อความว่า <span style="color: #cc0000;"><b>"ช่วงทดลองงาน"</b></span> มิฉะนั้นแล้วก็ให้แสดงข้อความว่า <span style="color: #cc0000;"><b>"ช่วงประเมินผล"</b></span><br /><br />รวมแล้วมีด้วยกันทั้งสิ้น 3 เงื่อนไข ผมใช้ฟังก์ชัน IF ซ้อนกัน 3 ชั้น โดยพิมพ์สูตรที่ H3 ดังนี้<br /><br />
<center><span style="color: #cc0000;">=IF(F$1>G3,"",IF(F$1=G3, <b>"ครบวันนี้"</b>,<br />IF(G3-F$1>15, <b>"ช่วงทดลองงาน"</b>, <b>"ช่วงประเมินผล"</b>)))</span></center><br /><br />เนื่องจากเราใช้ฟังก์ชัน IF ซ้อนกัน 3 ชั้น ดังนั้น ให้ระวังเรื่องของ เครื่องหมายวงเล็บเปิด วงเล็บปิด จุลภาค หรือเครื่องหมายคำพูด เพราะถ้าตกหล่นหลงลืมกันไปบ้าง จะทำให้สูตรมีความผิดพลาดเกิดขึ้นได้ รวมถึงเครื่องหมายที่ใช้ ตรึงแถวตรึงคอลัมน์ด้วย ($) เพื่อความสะดวกในการคัดลอกสูตร นอกจากนี้ สูตรที่แสดงในตัวอย่างด้านบน จะต้องพิมพ์ให้อยู่ในบรรทัดเดียวกันด้วยนะครับ<br /><br /><br /><span style="color: #3333ff; font-size: 130%;">การจัดรูปแบบเซล</span><br /><br />มีคำถามว่า อยากให้พื้นเป็นสีแดง เมื่อสถานะ "ช่วงประเมินผล" และอยากให้ตัวหนังสือเป็นสีแดง ขึ้นเมื่อสถานะ "ครบแล้ว" เราต้องใช้สูตรยังไง<br /><br />เราก็จะใช้การจัดรูปแบบตามเงื่อนไข (Conditional Formatting) โดยปฏิบัติดังนี้1. เลือกช่วงเซล H3 ถึง I10<br />2. เข้าเมนู Format > Conditional formatting...<br />3. ในช่องกลาง เปลี่ยนจาก between เป็น equal to<br />4. ในช่องขวามือ พิมพ์ <b>="ครบแล้ว"</b> แล้วคลิกที่ปุ่ม Format ด้านล่าง<br />5. ที่แท็ป Font เลือกสีตัวอักษรเป็นสีแดง แล้วคลิกปุ่ม OK<br />6. คลิกที่ปุ่ม <span style="font-weight: bold;">Add >></span> (เพื่อเพิ่มเงื่อนไข)<br />7. ในช่องกลาง เปลี่ยนจาก between เป็น equal to<br />8. ในช่องขวามือ พิมพ์ <b>="ช่วงประเมินผล"</b> แล้วคลิกที่ปุ่ม Format ด้านล่าง<br />9. ที่แท็ป Font เลือกสีตัวอักษรเป็นสีขาว<br />10. ที่แท็ป Patterns เลือกสีพื้นเป็นสีแดง แล้วคลิกปุ่ม OK<br />11. แล้วคลิกปุ่ม OK อีกครั้งหนึ่ง<br />
<br />
ลองฝึกดูนะครับ<br />
<hr />
ครูเอกhttp://www.blogger.com/profile/01255634988258604526noreply@blogger.com0tag:blogger.com,1999:blog-6989162005462801250.post-91482092676323233152012-04-30T11:28:00.002+07:002012-04-30T11:29:58.692+07:00หาชั่วโมงการทำงาน กรณีเลิกงานหลังเที่ยงคืนวันนี้มีคำถามทางอีเมล์ สอบถามเกี่ยวกับการคำนวณชั่วโมงทำงาน กรณีทำงานข้ามวัน (หมายถึงเวลาเลิกงานเลยเที่ยงคืน เข้าสู่วันใหม่) ดังตัวอย่างข้างล่าง<br />
<br />
<div>
</div>
<div>
เวลาเข้าทำงาน : <span style="color: #cc0000;">วันที่ 9 พฤษภาคม 2554 เวลา 20:30 น.</span></div>
<div>
เวลาออก : <span style="color: #cc0000;">วันที่ 10 พฤษภาคม 2554 เวลา 02:45 น.</span> (ตีสอง สี่สิบห้านาที) </div>
<div>
ใน Excel ไม่ทราบว่าต้องใช้สูตรอะไรคะ ขอความกรุณาแนะนำด้วยค่ะ<br />
<br />
<br />
<span style="color: #000099; font-size: 130%;"><span style="font-weight: bold;">แนวทางคำตอบ</span></span><br />
<br /></div>
สำหรับท่านที่มี CD <span style="color: #000099; font-weight: bold;">"รวมไฟล์ตัวอย่าง Excel จากงานจริง" ชุดที่2</span> ลองเปิดดูในโฟลเดอร์ <span style="color: #cc0000; font-weight: bold;">"213-ตัวอย่างการคำนวณเกี่ยวกับเวลา"</span> จะมีไฟล์ตัวอย่าง เช่นเดียวกับกรณีนี้<br />
<br />
เนื่องจากผู้ถามไม่ได้แนบไฟล์ตัวอย่างมาด้วย ผมจึงไม่ทราบว่า มีการบันทึกข้อมูลในลักษณะไหน แต่ถ้าดูจากโจทย์ เห็นว่าวันที่บันทึกในแบบปี พ.ศ. และก็ไม่รู้ว่า มีการเก็บวันที่และเวลา แบบมีตัวอักษรปนด้วยหรือเปล่า ดังนั้น ก่อนที่ผมจะตอบคำถาม จึงแนะนำไปว่า ให้บันทึกข้อมูลวันที่ ในแบบปี ค.ศ. เท่านั้น และบันทึกเวลา โดยการใช้จุดคู่ ( : ) ห้ามใช้เป็นทศนิยม<br />
<br />
สำหรับคำถามนี้ ผมคิดว่าน่าจะมี 2 แนวทาง ขึ้นอยู่กับว่า มีการบันทึกข้อมูลในลักษณะใด<br />
<br />
<br />
<span style="color: #3333ff; font-size: 130%; font-weight: bold;">กรณีที่หนึ่ง</span><br />
ถ้าบันทึกข้อมูลทั้งวันที่และเวลาลงในเซลล์เดียวกัน เช่น<br />
เวลาเข้า <span style="color: #cc0000;">9/5/2011 20:30</span> และเวลาออก <span style="color: #cc0000;">10/5/2011 2:45</span><br />
การหาจำนวนชั่วโมงการทำงาน สามารถหาได้จากสูตร<br />
<br />
<table align="center" border="1" style="height: 32px; width: 200px;"><tbody>
<tr><td align="center"><span style="font-size: 130%;"><span style="color: #cc0000;">=<span style="color: #000099;">เวลาออก</span> - <span style="color: #000099;">เวลาเข้า</span></span></span></td></tr>
</tbody></table>
<br />
<br />
แล้วจัดรูปแบบเซลล์ผลลัพธ์ให้เป็น h:mm<br />
<br />
<br />
<span style="color: #3333ff; font-size: 130%;"><span style="font-weight: bold;">กรณีที่สอง</span></span><br />
ถ้าบันทึกข้อมูล เฉพาะเวลาเข้า-ออกเท่านั้น โดยไม่มีวันที่ เช่น<br />
เวลาเข้า <span style="color: #cc0000;">20:30</span> และเวลาออก <span style="color: #cc0000;">2:45</span><br />
การหาจำนวนชั่วโมงการทำงาน สามารถหาได้จากสูตร<br />
<br />
<table align="center" border="1"><tbody>
<tr><td><span style="font-size: 130%;">=(<span style="color: #000099;">เวลาออก</span> - <span style="color: #000099;">เวลาเข้า</span>) + (<span style="color: #000099;">เวลาออก</span><span style="color: white;">"</span><<span style="color: white;">"</span><span style="color: #000099;">เวลาเข้า</span>)</span></td></tr>
</tbody></table>
<br />
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMIR2eLAnjcTvF7lnDJ8i2EUGs05DEkPqEr5DY3LAK1ZSobjgf1HuPu8szioEHcwIrX5XaqG6EcVMPkqjE_GnGYDpBuYPDALtiNp3KJJM3yr1gSNi4cCjtp6PChiji-iQgJKNjLeM1f1k/s1600/Time_Calculate.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5605818473386709650" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMIR2eLAnjcTvF7lnDJ8i2EUGs05DEkPqEr5DY3LAK1ZSobjgf1HuPu8szioEHcwIrX5XaqG6EcVMPkqjE_GnGYDpBuYPDALtiNp3KJJM3yr1gSNi4cCjtp6PChiji-iQgJKNjLeM1f1k/s400/Time_Calculate.jpg" style="cursor: hand; cursor: pointer; height: 78px; width: 400px;" /></a></div>
<br />
<br />
ลองนำไปใช้ดูนะครับ<br />
<br />
<br />
<hr />
ครูเอกhttp://www.blogger.com/profile/01255634988258604526noreply@blogger.com1tag:blogger.com,1999:blog-6989162005462801250.post-38409583584274100252012-04-30T11:05:00.004+07:002016-01-15T14:23:35.566+07:00สูตรการหาอายุงานนอกเหนือจาก DATEDIF<div class="mbl notesBlogText clearfix" style="font-family: Verdana,sans-serif;">
<div>
<span style="font-size: small;"> เมื่อช่วงปีใหม่ 2555
ที่ผ่านมานี้ มีผู้ใช้ Excel2007 หลายท่าน ทั้งเมล์เข้ามา ทั้งโทรเข้ามา
แจ้งปัญหาให้ทราบว่า เคยใช้ DATEDIF ในสูตรคำนวณหาอายุงาน
ซึ่งที่ผ่านมาก็ไม่มีปัญหาอะไร แต่หลังจากขึ้นปีใหม่ที่ผ่านมา
ปรากฏว่าสูตรที่ใช้อยู่เดิมนั้น กลับแสดงผลที่ผิดพลาด
คือแสดงจำนวนวันออกมาเป็นหลักร้อย เช่น <b><span style="color: blue;">"xปี xเดือน <span style="color: red;">125</span>วัน"</span></b>
ซึ่งผิดหลักความจริงไปมาก</span><br />
<div style="color: #cc0000;">
<span style="font-size: x-small;">(อ่านเพิ่มเติมเรื่อง การคำนวณหาอายุงานด้วย DATEDIF ได้ที่ <a href="http://it-for-hr.blogspot.com/2010/10/blog-post_28.html">http://it-for-hr.blogspot.com/2010/10/blog-post_28.html</a>)</span></div>
<br />
<span style="font-size: small;"> ผมยังได้รับไฟล์ที่เป็นปัญหามาจากหลายๆ ท่าน แต่เมื่อมาเปิดดูในเครื่องผม
ก็เห็นว่าแสดงผลเป็นปกติ ไม่ว่าจะเปิดด้วย Excel 2003, 2007 หรือแม้กระทั่ง
2010 ก็เลยเดาว่าน่าจะมาจากตัวโปรแกรมที่ใช้งาน อาจจะติดตั้งไม่สมบูรณ์
(แต่ก็ยังไม่รู้ว่า แท้จริงแล้วมาจากสาเหตุอะไร)</span><br />
<br />
<span style="font-size: small;"> ขณะเดียวกัน
ก็มีผู้เชี่ยวชาญหลายท่านได้แนะนำฟังก์ชัน DATEDIFF ของ John Walkenbach
ซึ่งผมก็ได้นำ code มาผนวกไว้ใน Add-Ins ที่ชื่อว่า <span style="color: blue;">ThaiFunction.xla</span>
(หาดาวน์โหลดได้จากเว็บ <a href="https://sites.google.com/site/excel4hr/" target="_blank">http://www.e-hrit.com</a>) ซึ่งจากที่ผมทดลองใช้
ก็เห็นว่าได้ผลลัพธ์ไม่แตกต่างจาก DATEDIF
จึงได้แนะนำให้ผู้ใช้ไปดาวน์โหลดมาติดตั้ง และทดลองใช้งานดู</span><br />
<br />
<span style="font-size: small;"> อย่างไรก็ตาม ก็มีผู้ใช้โปรแกรม OpenOffice บางท่าน ได้สอบถามมาว่า ใน
OpenOffice ไม่มีฟังก์ชัน DATEDIF ดังนั้น ถ้าจะหาอายุงาน
จะต้องเขียนสูตรอย่างไร หรือเลือกใช้ฟังก์ชันอะไร
ทำให้ผมต้องไล่ดูฟังก์ชันต่างๆ ที่เกี่ยวกับวันที่ ทั้งใน Excel และใน
OpenOffice เพื่อจะดูว่าพอจะมีฟังก์ชันอะไรให้ประยุกต์ใช้ได้บ้างหรือไม่</span><br />
<br />
<span style="font-size: small;"> ในที่สุดผมก็เจอฟังก์ชันตัวหนึ่ง คือ YEARFRAC ซึ่งปกติแล้วก็ไม่เคยได้ใช้งานเลย ฟังก์ชันตัวนี้บอกว่า <b style="color: blue;">"คำนวณเศษส่วนของปี ที่แสดงด้วยจำนวนเต็มของวัน ระหว่างวันที่สองวันที่ คือ วันที่เริ่มต้น และ วันที่สิ้นสุด"</b> หลังจากที่ลองศึกษาการใช้งานจาก Help ของ Excel ก็เริ่มจะเห็นแนวทางในการนำมาประยุกต์ใช้หาอายุงานได้ จึงได้มาเขียนแนะนำในวันนี้</span><br />
<br />
<span style="font-size: small;"><span class=""><img alt="" class="photo_img img" src="http://a4.sphotos.ak.fbcdn.net/hphotos-ak-ash3/s720x720/540623_456864637662258_145659405449451_93922368_453472915_n.jpg" /><span style="color: #cc0000; font-size: x-small;"><span class="caption">รูปที่ 1 แสดงวิธีการหาอายุงานด้วยวิธีต่างๆ ใน Excel</span></span></span></span><br />
<br />
<br />
<span style="font-size: small;"> จากรูป ผมใส่วันที่เริ่มต้น และ วันที่สิ้นสุด ไว้ที่ A2 และ B2 ตามลำดับ วิธีแรกทดลองใช้ DATEDIF ที่ C2:C4 และวิธีที่สองทดลองใช้ Add-Ins Function ที่ C6:C8 เพื่อเอาไว้เปรียบเทียบผลลัพธ์</span><br />
<br />
<span style="font-size: small;"> จากนั้นที่ C10 พิมพ์สูตร <span style="color: blue;">=YEARFRAC(A2,B2+1,1)</span> จะได้ผลลัพธ์เท่ากับ
23.98982 ซึ่งถ้าดูจากข้อมูลก็จะสรุปได้ว่า 23 ปีกว่าๆ ดังนั้น
ผมจึงตัดเอาจำนวนเต็มออกมาเป็นจำนวนปี โดยการปรับสูตรใหม่ เป็นดังนี้
<span style="color: #cc0000;">=INT(<span style="color: blue;">YEARFRAC(A2,B2+1,1)</span>)</span></span><br />
<br />
<span style="font-size: small;"> ส่วนเศษที่เหลือจากจำนวนปี
ก็จะเป็นจำนวนเดือน ดังนั้น ที่ C11 พิมพ์สูตร <span style="color: blue;">=(YEARFRAC(A2,B2+1,1)-C10)</span>
ก็จะได้ผลลัพธ์เท่ากับ 0.98982 หรือเศษจำนวนเดือนในหนึ่งปีนั่นเอง
เราก็เอาผลลัพธ์นี้ คูณด้วย 12 อีกครั้ง จะได้เท่ากับ 11.91064 หรือ 11
เดือนกว่าๆ ดังนั้น ผมจึงใช้หลักการเดียวกับการหาจำนวนปี
คือตัดเอาจำนวนเต็มเดือนออกมาด้วยฟังก์ชัน INT โดยการปรับสูตรที่ C11
เป็นดังนี้ <span style="color: #cc0000;">=INT(<span style="color: blue;">(YEARFRAC(A2,B2+1,1)-C10)</span>*12)</span></span><br />
<br />
<span style="font-size: small;"> ถ้าจำนวนวันในหนึ่งเดือนมีเท่ากันทุกเดือน ก็จะง่ายเหมือนกับการหาปี หาเดือน
ดังสองสูตรข้างต้น แต่ในความเป็นจริงไม่ใช่แบบนั้น
เราจึงต้องประยุกต์สูตรหาจำนวนวัน ซึ่งจะซับซ้อนสักหน่อย
โดยสมมติว่าวันที่เริ่มต้นนั้น เป็นเดือนเดียว ปีเดียวกันกับวันที่สิ้นสุด
แล้วจึงนำวันที่ทั้งสองมาลบกัน เพื่อหาจำนวนวัน</span><br />
<br />
<span style="font-size: small;"> แต่ในกรณีที่
วันที่ B2 น้อยกว่าวันที่ A2 ผลลัพธ์จะติดลบ
สูตรจึงต้องตั้งเงื่อนไขตรวจสอบในกรณีนี้ด้วย ดังนั้นที่ C12 หาจำนวนวัน
จึงเขียนสูตรดังนี้
<span style="color: blue;">=B2</span>-<span style="color: #990000;">DATE(YEAR(B2+1),MONTH(B2+1)</span>-IF(DAY(B2+1)<span style="background-color: white; color: white;">"</span><<span style="background-color: white; color: white;">"</span>DAY(A2),1,0)<span style="color: #990000;">,DAY(A2))</span></span>
<br />
<span style="font-size: small;">
<br />
<span style="font-size: small;"> จากรูปที่ 1 จะเห็นว่าผลลัพธ์ที่ได้จากวิธีการที่กล่าวมานี้ จะเหมือนกับการใช้
DATEDIF และการใช้ Add-Ins Function เพียงแต่สูตรจะยาวและซับซ้อนกว่า
เนื่องจากเป็นสูตรการประยุกต์ใช้ ไม่ใช่ฟังก์ชันที่ทำมาโดยเฉพาะ</span><br />
<br />
<br />
<span style="font-size: small;"><span class=""><img alt="" class="photo_img img" src="http://a1.sphotos.ak.fbcdn.net/hphotos-ak-prn1/s720x720/551878_456887217660000_145659405449451_93922408_795568717_n.jpg" /><span style="color: #990000; font-size: x-small;"><span class="caption">รูปที่ 2 แสดงสูตรการหาอายุงานด้วย YEARFRAC ใน OpenOffice</span></span></span></span><br />
<br />
<br />
<span style="font-size: small;"> เนื่องจากในโปรแกรม OpenOffice ไม่มีฟังก์ชัน DATEDIF
ผมจึงได้ลองนำสูตรตามวิธีนี้ไปใช้ (ผมทดลองกับ OpenOffice เวอร์ชั่น 3.1.1)
ก็ปรากฏว่าได้ผลลัพธ์ออกมาตรงกันกับที่ใช้ใน Excel ดังนั้น
จึงขอแนะนำสำหรับผู้ที่ใช้โปรแกรม OpenOffice หรือแม้แต่ผู้ใช้ Excel
ก็ตามว่า การหาอายุหรืออายุงาน ด้วยการประยุกต์ใช้ YEARFRAC
ดังที่แนะนำมานี้ ก็สามารถช่วยแก้ปัญหาให้กับท่านได้เช่นกัน</span><br />
<br />
<br />
<span style="font-size: small;">อ.สำเริง ยิ่งถาวรสุข</span><br />
<span style="font-size: small;">28 เมษายน 2555</span></span></div>
</div>
ครูเอกhttp://www.blogger.com/profile/01255634988258604526noreply@blogger.com0tag:blogger.com,1999:blog-6989162005462801250.post-8410642675188705702012-03-07T11:04:00.009+07:002012-03-16T11:04:06.685+07:00การนับเฉพาะตัวอักษรที่ต้องการในช่วงเซลล์ที่ระบุผมไปเจอคำถามหนึ่งในเว็บกูรู (http://guru.google.co.th) เกี่ยวกับ Excel คำถามประมาณว่า..<br /><span style="color: rgb(204, 0, 0);">"ถ้าต้องการนับเฉพาะเซลล์ที่มีอักษรตัว m ในช่วงเซลล์ A1:A10 จะต้องใช้สูตรอย่างไร?"</span><br /><br />เนื่องจากคำถามไม่มีไฟล์แนบหรือภาพประกอบ หลังอ่านคำถามแล้ว ผมจึงตีความได้สองลักษณะคือ<br /><ol><li>ในช่วง A1:A10 นั้น แต่ละเซลล์มีอักษรแค่ตัวเดียว อาจจะเป็นตัว m, ตัว n, ตัว s หรืออื่นๆ แต่ต้องการนับเฉพาะตัว m เท่านั้นว่ามีอยู่กี่ตัว หรือ<br /><br /></li><li>ในช่วงเซลล์ A1:A10 มีข้อความต่างๆ เช่น ann, max, joy, tem เป็นต้น ซึ่งในแต่ละข้อความนั้น มีอักษรตัว m อยู่ และต้องการนับว่ามีกี่เซลล์ที่มีอักษรตัว m<br /><br /></li></ol><p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE0zAtfOWCAkX1WqOdwfEl9mOgezeBKWRO_2BhZLYtJiPBOYzzDglXPBT1C4ScAGpwA3sMuzLwiElLLUf9dHTzbokwaejLQ_ppdp1kiwoJ0uNHI6S1pw4Ajhb1jED6rY9tn3qge6hAjQk/s1600/count_char1.jpg"><img style="cursor:pointer; cursor:hand;width: 380px; height: 285px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE0zAtfOWCAkX1WqOdwfEl9mOgezeBKWRO_2BhZLYtJiPBOYzzDglXPBT1C4ScAGpwA3sMuzLwiElLLUf9dHTzbokwaejLQ_ppdp1kiwoJ0uNHI6S1pw4Ajhb1jED6rY9tn3qge6hAjQk/s400/count_char1.jpg" alt="" id="BLOGGER_PHOTO_ID_5717021387828250498" border="0" /></a></p><p style="font-weight: bold; color: rgb(0, 0, 153);"><span style="font-size:130%;"><br /></span></p><p style="font-weight: bold; color: rgb(51, 51, 255);"><span style="font-size:130%;">กรณีความต้องการโจทย์เป็นแบบที่หนึ่ง</span></p><p>จากรูป ถ้าโจทย์เป็นลักษณะแบบตารางที่ 1 ทางซ้ายมือ แบบนี้ไม่ยุ่งยากครับ ใช้หลักการ "นับจำนวนแบบมีเงื่อนไข" ซึ่งผมเคยเขียนแนะนำไปในบทความก่อนหน้านี้แล้ว นั่นคือการใช้ฟังก์ชัน COUNTIF เช่น<br /></p><p style="color: rgb(204, 0, 0);">=COUNTIF(A1:A10,"m")</p><p>แต่การเขียนสูตรที่ดี ไม่ควรเอาเงื่อนไขใส่ลงไปในสูตรโดยตรง เพราะจะไม่สะดวกเวลาที่เราต้องการเปลี่ยนเงื่อนไขเป็นอย่างอื่น ดังนั้น ให้ใส่เงื่อนไขหรือ ตัว m ไว้ในเซลล์หนึ่ง แล้วเขียนสูตรเพื่อแสดงผลลัพธ์ โดยอ้างอิงเงื่อนไขไปยังเซลล์นั้น ดังรูป</p><p><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqgLhv0_3vkJ76-TKb5I7QNIlxFapECBTCI-pguEXR3D-6QIG-fK8OOERLstfTeD4ib6ph4TlbGKaUDy0vHhjiddY_jfb3qUVq1oQyYQGHZxtX0FU5eYCCa8mSq14AiDF3Xn7x8XbuuBc/s1600/count_char2.jpg"><img style="cursor:pointer; cursor:hand;width: 286px; height: 295px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqgLhv0_3vkJ76-TKb5I7QNIlxFapECBTCI-pguEXR3D-6QIG-fK8OOERLstfTeD4ib6ph4TlbGKaUDy0vHhjiddY_jfb3qUVq1oQyYQGHZxtX0FU5eYCCa8mSq14AiDF3Xn7x8XbuuBc/s400/count_char2.jpg" alt="" id="BLOGGER_PHOTO_ID_5717024067162729330" border="0" /></a></p><p><br /></p><p style="font-weight: bold; color: rgb(51, 51, 255);"><span style="font-size:130%;">กรณีความต้องการโจทย์เป็นแบบที่สอง</span></p><p>จากรูปแรก ถ้าโจทย์เป็นลักษณะแบบตารางที่ 2 ทางขวามือ ก็จะยุ่งยากขึ้นมาเล็กน้อย เพราะเราต้องนับเฉพาะเซลล์ที่มีอักษรตัว m ประกอบอยู่เท่านั้น ดังนั้น เราจึงต้องหาก่อนว่า ข้อความในเซลล์ไหนบ้าง ที่มีอักษรตัว m</p><p><span style="font-weight: bold;">วิธีที่ 1 การใช้สูตรแบบธรรมดา</span><br /></p><p>วิธีนี้จะต้องทำอย่างน้อย 2 ขั้นตอน คือ <span style="font-weight: bold; color: rgb(204, 0, 0);">ขั้นตอนแรก</span> ต้องหาว่าเซลล์ใดบ้างที่มีตัวอักษรที่เราต้องการ จากรูปด้านล่าง ผมใช้ฟังก์ชัน FIND เพื่อหาอักษร m ว่ามีอยู่ในข้อความหรือไม่ ซึ่งถ้ามี ฟังก์ชัน FIND ก็จะส่งผลลัพธ์เป็นตัวเลขออกมา แต่ถ้าไม่มี ก็จะส่งผลลัพธ์เป็น #VALUE</p><p>B1 <span style="color: rgb(204, 0, 0);">=FIND("m",A1)</span> Enter แล้วคัดลอกสูตรลงมาจนถึง B1<br /></p><p><span style="font-weight: bold; color: rgb(204, 0, 0);">ขั้นตอนที่สอง</span> ก็ทำการนับว่า จากขั้นตอนแรก มีผลลัพธ์ที่เป็นตัวเลขจำนวนกี่เซลล์ (ไม่สนใจว่าเป็นตัวเลขอะไร) โดยใช้ฟังก์ชัน COUNT ซึ่งฟังก์ชันนี้ จะนับเฉพาะเซลล์ที่เป็นตัวเลขเท่านั้น</p><p><span style="color: rgb(204, 0, 0);">=COUNT(B1:B10)</span><br /></p><p><br /></p><p><span style="font-weight: bold;">วิธีที่ 2 การใช้สูตรแบบอะเรย์</span><br /></p><p>ผมใช้วิธีการเขียนสูตร COUNT แบบอะเรย์ (Array) เพื่อให้สั้น และกระชับในขั้นตอนเดียว (ไม่จำเป็นต้องเขียนสูตรในคอลัมน์ B ก่อน เหมือนกับวิธีการแรก) โดยซ้อนฟังก์ชัน FIND ไว้ในสูตร เพื่อให้ FIND หาดูว่า มีอักษร m อยู่ในข้อความแต่ละเซลล์หรือไม่ ซึ่งถ้ามี ฟังก์ชัน FIND ก็จะส่งผลลัพธ์ออกมาเป็นตัวเลข ที่เป็นตำแหน่งของตัว m ในข้อความ แต่ถ้าไม่พบตัว m ในข้อความ ก็จะส่งผลลัพธ์เป็นค่าผิดพลาด #VALUE!</p><p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbdp5jyEHxvkmfdImS_FHTNUn2VIo5EcGGjuTOsdlhLsvemzoskdHsS6X5-RVRobYA0AiCecAxhkpIpbMP9XX6T6tuHTal6PuKTnVxS5MQq1BpAOk9Dv4lt38kLOWfOENNlMklIpuZw-E/s1600/count_char4.jpg"><img style="cursor:pointer; cursor:hand;width: 286px; height: 295px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbdp5jyEHxvkmfdImS_FHTNUn2VIo5EcGGjuTOsdlhLsvemzoskdHsS6X5-RVRobYA0AiCecAxhkpIpbMP9XX6T6tuHTal6PuKTnVxS5MQq1BpAOk9Dv4lt38kLOWfOENNlMklIpuZw-E/s400/count_char4.jpg" alt="" id="BLOGGER_PHOTO_ID_5717028966175697874" border="0" /></a></p><p>เนื่องจากเราไม่สนใจว่าผลลัพธ์ของ FIND จะเป็นเลขอะไร เราสนใจแค่ว่า ผลลัพธ์นั้น "เป็นตัวเลข" (หาเจอ) หรือ "ไม่เป็นตัวเลข" (หาไม่เจอ) ซึ่งฟังก์ชัน COUNT ก็จะนับเฉพาะเซลล์ที่เป็นตัวเลขเท่านั้น</p><p style="color: rgb(204, 0, 0);">=COUNT(<span style="color: rgb(255, 0, 0);">FIND("m",A1:A10)</span>)</p>เมื่อพิมพ์สูตรแล้ว ให้กดแป้น <span style="color: rgb(204, 0, 0);">Ctrl+Shit+Enter 3 แป้นพร้อมกัน</span> สูตรจะเติมเครื่องหมายปีกกาให้โดยอัตโนมัติ<br /><p><span style="color: rgb(51, 51, 255);">{</span><span style="color: rgb(204, 0, 0);">=COUNT(<span style="color: rgb(255, 0, 0);">FIND("m",A1:A10)</span>)</span><span style="color: rgb(51, 51, 255);">}</span></p>ทำนองเดียวกัน การเขียนสูตรที่ดี ไม่ควรเอาเงื่อนไขใส่ลงไปในสูตรโดยตรง ดังนั้น ให้ใส่เงื่อนไขหรือ ตัว m ไว้ในเซลล์หนึ่ง แล้วเขียนสูตรเพื่อแสดงผลลัพธ์ โดยอ้างอิงเงื่อนไขไปยังเซลล์นั้น ดังรูปข้างต้นครูเอกhttp://www.blogger.com/profile/01255634988258604526noreply@blogger.com3tag:blogger.com,1999:blog-6989162005462801250.post-200734723953960652011-05-16T09:52:00.006+07:002011-05-16T14:19:56.721+07:00การรันตัวเลขลำดับแบบอัตโนมัติ<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTC03Wrd-d_H0KuE4t9lHo9y8MiyAuvPsBMGvAhM1TbmSw-QWpvZskNLLISpqLibGuIGp95BpclIzcfX24pMiDGm92LPUiM-ryqHTMm6ZjqCUGDJCISdYj6mraGGthCUDafUDEXgwE4DQ/s1600/Running_No.jpg"><img style="cursor:pointer; cursor:hand;width: 400px; height: 234px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTC03Wrd-d_H0KuE4t9lHo9y8MiyAuvPsBMGvAhM1TbmSw-QWpvZskNLLISpqLibGuIGp95BpclIzcfX24pMiDGm92LPUiM-ryqHTMm6ZjqCUGDJCISdYj6mraGGthCUDafUDEXgwE4DQ/s400/Running_No.jpg" alt="" id="BLOGGER_PHOTO_ID_5607142313937589378" border="0" /></a><br /><br />วันนี้มีคำถามทางอีเมล์ ถามว่า<br />(จากรูป) ขอคำแนะนำในการจะใส่<span style="font-weight: bold; color: rgb(204, 0, 0);">ลำดับที่</span>ของสัญญา <strong><span style="color:#ff0000;">ตั้งแต่คอลัมภ์ A4 </span></strong>จะทำอย่างไรให้รัน โดยไม่ต้องคีย์ เพราะมีจำนวนสัญญา มากกว่าพันรายค่ะ ตอนแรกได้ทดลองทำเองโดยพิมพ์สูตรที่ A4 <span style="color: rgb(204, 0, 0);">=IF(B4="","",MAX(A$1:A3)+1)</span> แต่ได้ตัวเลขไม่ถูกต้อง<br /><br /><br /><br /><span style="font-weight: bold; color: rgb(0, 0, 153);font-size:130%;" >แนวคิด</span><br /><br />ที่จริง ผู้ถามก็มาถูกทางแล้วนะครับ เพราะจากสูตร <span style="color: rgb(204, 0, 0);">=IF(B4="","",MAX(A$1:A3)+1)</span> นั้น ก็สามารถรันเลขลำดับแบบอัตโนมัติได้เช่นกัน แต่การเช็คเงื่อนไขจากสูตรข้างต้นนั้น หมายถึง<span style="color: rgb(51, 51, 255);">ให้ตรวจสอบว่า ถ้าคอลัมน์ B เป็นเซลล์ว่าง ก็ไม่ต้องแสดงตัวเลขลำดับ แต่ถ้าไม่เป็นเซลล์ว่างก็ให้แสดงเลขลำดับ</span> (โดยเอาค่ามากสุดที่อยู่ก่อนหน้า มาบวกเพิ่มอีกหนึ่ง)<br /><br />ซึ่งหากดูจากไฟล์ตัวอย่าง (ดังรูป) จะเห็นว่า ในคอลัมน์ B นอกจากจะมีตัวเลข ที่เป็นเลขที่สัญญาแล้ว ยังมีบางแถวเป็นข้อความด้วย (คำว่า เลขที่สัญญา) ดังนั้น ถ้าคัดลอกสูตรลงมาทุกแถว สูตรนี้จึงแสดงตัวเลขลำดับในคอลัมน์ A ในทุกแถวที่คอลัมน์ B <span style="font-weight: bold;">ไม่เป็นเซลล์ว่าง</span> เช่น A4, A8, A9, A13 และ A14 เป็นต้น<br /><br />ความต้องการคือ <span style="color: rgb(204, 0, 0);">ให้แสดงเลขที่ลำดับ เฉพาะแถวที่คอลัมน์ B เป็นตัวเลข เลขที่สัญญา เท่านั้น</span> ดังนั้น การตรวจสอบเงื่อนไข จึงต้องตรวจสอบเฉพาะแถวที่คอลัมน์ B เป็นตัวเลข เช่น<br /><br />A4 <span style="color: rgb(204, 0, 0);">=IF(ISNUMBER(B4),MAX(A$1:A3)+1,"")</span><br /><br />เมื่อคัดลอกสูตรลงมาจะเห็นว่า แสดงผลลัพธ์ได้ถูกต้อง<br /><br /><br /><br /><span style="font-weight: bold; color: rgb(0, 0, 153);font-size:130%;" >มีสูตรอื่นๆ อีกมั๊ย?</span><br /><br />นอกจากสูตรที่กล่าวถึงข้างต้นแล้ว ยังสามารถใช้สูตรอื่นๆ ซึ่งจะให้ผลลัพธ์เหมือนกันได้อีก เช่น<br /><br />A4 <span style="color: rgb(204, 0, 0);">=IF(ISNUMBER(B4),<span style="color: rgb(0, 0, 153);">COUNT(A$1:A3)+1</span>,"")</span><br /><br />โดยฟังก์ชัน COUNT จะนับเฉพาะเซลล์ที่เป็นตัวเลข ซึ่งในกรณีนี้จะนับตั้งแต่ A1 ลงมาจนถึงเซลล์ก่อนเซลล์ปัจจุบัน โดยนับเฉพาะเซลล์ที่เป็นตัวเลขว่ามีกี่เซลล์ แล้วบวกค่าเพิ่มอีกหนึ่ง เนื่องจากกรณีนี้เรารันตัวเลขลำดับเรียงต่อเนื่องกัน ดังนั้น การนับจำนวนเซลล์ที่เป็นตัวเลข หรือดูเซลล์ที่มีค่ามากสุด แล้วบวกเพิ่มอีกหนึ่ง จึงได้ผลลัพธ์เท่ากัน<br /><br /><br />แต่ถ้าเลขที่สัญญา<span style="font-weight: bold;">ไม่ใช่ตัวเลข</span>ทั้งหมด อาจจะมีตัวอักษร หรือมีสัญลักษณ์อื่นแทรกอยู่ ทำให้ฟังก์ชัน ISNUMBER คืนค่าออกมาเป็นเท็จ สองสูตรข้างต้นจึงใช้ไม่ได้ เราอาจจะเลี่ยงไปใช้วิธีอื่น เช่น นับจำนวนตัวอักษรของเลขที่สัญญา เช่น ถ้ารูปแบบเลขที่สัญญาเป็นลักษณะ <span style="font-weight: bold; color: rgb(204, 0, 0);">3000-2962</span> (มีจำนวน 9 ตัวอักษร) ก็แก้สูตรเป็น<br /><br />A4 <span style="color: rgb(204, 0, 0);">=IF(<span style="color: rgb(51, 51, 255);">LEN(B4)=9</span>,MAX(A$1:A3)+1,"")</span> หรือ<br />A4 <span style="color: rgb(204, 0, 0);">=IF(<span style="color: rgb(51, 51, 255);">LEN(B4)=9</span>,COUNT(A$1:A3)+1,"")</span> ก็ได้เช่นกัน<br /><br /><br />ลองประยุกต์ใช้ดูนะครับ<br /><br /><br /><hr />ครูเอกhttp://www.blogger.com/profile/01255634988258604526noreply@blogger.com2tag:blogger.com,1999:blog-6989162005462801250.post-78739832472207947742011-05-15T08:43:00.003+07:002011-05-15T09:58:33.100+07:00การกำหนดรูปแบบเซลล์ประเภทเวลา (Time format)มีผู้อ่านท่านหนึ่งอีเมล์มาบอกว่า ได้เข้าไปอ่านเรื่อง <span style="font-weight: bold;">"<a href="http://it-for-hr.blogspot.com/2010/09/date-time-format.html">ข้อมูลประเภทวันที่และเวลา</a>"</span> และ <span style="font-weight: bold;">"<a href="http://it-for-hr.blogspot.com/2010/05/date-format.html">การกำหนดรูปแบบเซลล์ประเภทวันที่</a>"</span> แล้ว แต่ทำไมไม่เห็นมีเรื่อง <span style="font-weight: bold;">"การกำหนดรูปแบบเซลล์ประเภทเวลา"</span> บ้าง? ผมก็มาย้อนดู เออ..จริงด้วย ลืมเขียนถึงเรื่องนี้ไปได้อย่างไร<br /><br />จากที่ได้เคยเขียนอธิบายไปแล้วในเรื่อง <span style="font-weight: bold;">"<a href="http://it-for-hr.blogspot.com/2010/09/date-time-format.html">ข้อมูลประเภทวันที่และเวลา (Date-Time format)</a>"</span> ผู้อ่านคงจะเข้าใจถึงรูปแบบการเก็บข้อมูลเวลาใน Excel แล้วว่า Excel มองเศษ (ทศนิยม) ของวัน (จำนวนเต็ม) เป็นเวลา แล้วใช้การจัดรูปแบบเซลล์ เพื่อแสดงผลเป็นเวลาลักษณะต่างๆ โดยมีตัวแปรที่เกี่ยวข้อง ดังนี้<br /><br /><ol><li><span style="color: rgb(204, 0, 0);">h</span> หรือ <span style="color: rgb(204, 0, 0);">hh</span> = <span style="font-weight: bold; color: rgb(51, 51, 255);">Hour</span> แทนรูปแบบชั่วโมง แสดงผลเป็นเลขอารบิค</li><li><span style="color: rgb(204, 0, 0);">m</span> หรือ <span style="color: rgb(204, 0, 0);">mm</span> = <span style="font-weight: bold; color: rgb(51, 51, 255);">Minute</span> แทนรูปแบบนาที แสดงผลเป็นเลขอารบิค</li><li><span style="color: rgb(204, 0, 0);">s</span> หรือ <span style="color: rgb(204, 0, 0);">ss</span> = <span style="font-weight: bold; color: rgb(51, 51, 255);">Second</span> แทนรูปแบบวินาที แสดงผลเป็นเลขอารบิค</li><li><span style="color: rgb(204, 0, 0);">ช</span> หรือ <span style="color: rgb(204, 0, 0);">ชช</span> = <span style="font-weight: bold; color: rgb(51, 51, 255);">ชั่วโมง</span> แทนรูปแบบชั่วโมง แสดงผลเป็นเลขไทย</li><li><span style="color: rgb(204, 0, 0);">น</span> หรือ <span style="color: rgb(204, 0, 0);">นน</span> = <span style="font-weight: bold; color: rgb(51, 51, 255);">นาที</span> แทนรูปแบบนาที แสดงผลเป็นเลขไทย</li><li><span style="color: rgb(204, 0, 0);">ท</span> หรือ <span style="color: rgb(204, 0, 0);">ทท</span> = <span style="font-weight: bold; color: rgb(51, 51, 255);">วินาที</span> แทนรูปแบบวินาที แสดงผลเป็นเลขไทย</li></ol>นอกจากนี้ยังสามารถใส่ <span style="color: rgb(204, 0, 0);">AM แทนเวลาช่วงเช้า</span> (ตั้งแต่เที่ยงคืน จนถึงก่อนเที่ยงวัน) และ <span style="color: rgb(204, 0, 0);">PM แทนเวลาช่วงบ่าย</span> (ตั้งแต่เที่ยงวัน จนถึงก่อนเที่ยงคืน) สำหรับการแสดงเวลาแบบ 12 ชั่วโมง<br /><br /><br /><img style="cursor:pointer; cursor:hand;width: 465px; height: 385px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpbDdieqG8_iRtStwTLlKaUbv-xBPEdytp4nFsIVAUi6PcRC1BM_ixQILvqDtI-m63XUOTGl1x8aTQaY7kQFNsTX4J11kW4GFvk-22Ysad73b944Mv1wMnMVwrcQ075wjlgJ2w39yLurQ/s1600/format_cell4.jpg" alt="" border="0" /><br /><br /><span style="color: rgb(0, 0, 153);font-size:130%;" ><span style="font-weight: bold;">ตัวอย่างการจัดรูปแบบเวลา</span></span><br /><br />สมมติว่าขณะนี้คือเวลา 17 นาฬิกา 59 นาที 30 วินาที ก่อนเคารพธงชาติเล็กน้อย เราสามารถจัดรูปแบบเวลาให้กับเซลล์ดังกล่าวได้หลายแบบ ดังตัวอย่างเช่น<br /><ul><li><span style="color: rgb(204, 0, 0);">h:mm:ss</span> ได้ผลลัพธ์เป็น <span style="color: rgb(204, 0, 0);">17:59:30</span></li><li><span style="color: rgb(204, 0, 0);">h:mm AM/PM</span> ได้ผลลัพธ์เป็น <span style="color: rgb(204, 0, 0);">5:59 PM</span><br /></li><li><span style="color: rgb(204, 0, 0);">ช:นน:ทท</span> ได้ผลลัพธ์เป็น <span style="color: rgb(204, 0, 0);">๑๗:๕๙:๓๐</span></li><li><span style="color: rgb(204, 0, 0);"><span style="color: rgb(51, 51, 255);">"เวลา" </span></span><span style="color: rgb(204, 0, 0);">ช:นน <span style="color: rgb(51, 51, 255);">"น."</span></span> ได้ผลลัพธ์เป็น <span style="color: rgb(204, 0, 0);">เวลา ๑๗:๕๙ น.</span></li><li><span style="color: rgb(204, 0, 0);">h <span style="color: rgb(51, 51, 255);">"Hrs."</span> mm <span style="color: rgb(51, 51, 255);">"Min."</span> ss <span style="color: rgb(51, 51, 255);">"Sec."</span></span> ได้ผลลัพธ์เป็น <span style="color: rgb(204, 0, 0);">17 Hrs. 59 Min. 30 Sec.</span></li><li><span style="color: rgb(204, 0, 0);">h <span style="color: rgb(51, 51, 255);">"ชั่วโมง"</span> mm <span style="color: rgb(51, 51, 255);">"นาที"</span> ss <span style="color: rgb(51, 51, 255);">"วินาที"</span></span> ได้ผลลัพธ์เป็น <span style="color: rgb(204, 0, 0);">17 ชั่วโมง 59 นาที 30 วินาที</span></li><li>ฯลฯ เป็นต้น<br /></li></ul><br /><br /><span style="font-weight: bold; color: rgb(0, 0, 153);font-size:130%;" >การหาผลรวมของเวลา</span><br /><br />กรณีที่ต้องการรวมจำนวนเวลาจากหลายๆ เซลล์ หากข้อมูลที่จะนำมารวมนั้น อยู่ในรูปแบบของเวลาอยู่แล้ว (ใช้จุดคู่หรือโคลอน คั่นระหว่างชั่วโมง นาที หรือวินาที) ก็สามารถใช้ฟังก์ชัน SUM ได้เช่นเดียวกับการหาผลรวมแบบปกติ<br /><br />แต่ถ้าผลรวมของเวลานั้น มากกว่า 24 ชั่วโมงขึ้นไป ทุกๆ 24 ชั่วโมงแรก จะถูกปัดไปเป็น 1 วัน โดยจะแสดงเฉพาะเศษของเวลาที่ไม่ถึง 24 ชั่วโมงเท่านั้น เช่น ถ้ารวมได้ 99 ชั่วโมง 39 นาที รูปแบบเวลาของผลลัพธ์ก็จะแสดงแค่ 3:39 เท่านั้น (เพราะ 96 ชั่วโมง หมายถึง 4 วันเต็ม)<br /><br />หากต้องการให้ผลรวมแสดงเป็น 99:39 ก็สามารถทำได้โดยการจัดรูปแบบเป็น <span style="font-weight: bold; color: rgb(204, 0, 0);">[h]:mm</span><br /><br /><br /><br /><hr />ครูเอกhttp://www.blogger.com/profile/01255634988258604526noreply@blogger.com0tag:blogger.com,1999:blog-6989162005462801250.post-45823175420856754952010-11-05T08:54:00.009+07:002010-11-05T09:28:24.006+07:00ระบบบันทึกประวัติการฝึกอบรม (1) Training Record Systemหลังจากที่ได้ทราบถึงแนวคิดการใช้ Excel ออกแบบระบบฐานข้อมูลไปแล้ว ต่อไปเราก็จะมาออกแบบระบบจริงๆ ขึ้นมาสักระบบหนึ่ง ขอยกตัวอย่างเป็น <span style="font-weight: bold;">"ระบบบันทึกประวัติการฝึกอบรม"</span> ก็แล้วกัน ถ้าพร้อมแล้ว ก็ตามมาเลยครับ<br /><br /><br /><br /><span style="color: rgb(0, 0, 153);font-size:130%;" ><span style="font-weight: bold;">วิเคราะห์ความต้องการของระบบ (System Analysis)</span></span><br /><br />ตั้งคำถามแรกกับตัวเองก่อนว่า <span style="font-weight: bold; color: rgb(204, 0, 0);">“ต้องการสร้างระบบงานนี้ไปเพื่ออะไร?”</span> หลังจากนั้น ก็พยายามวิเคราะห์และรวบรวมความต้องการของระบบออกมา ดังนี้<br /><br /><span style="font-size:130%;"><span style="font-weight: bold;">1.</span> </span> เพื่อเก็บบันทึกประวัติการฝึกอบรมของพนักงานแต่ละคน ให้สามารถค้นหาและแสดงประวัติเป็นรายบุคคลได้ เช่น อยากรู้ว่าใคร? เคยอบรมเรื่องใด? ที่ไหน? เมื่อไร? ใช้งบประมาณเท่าไหร่? ฯลฯ เพียงแค่คีย์รหัสพนักงานคนนั้นๆ ก็จะสามารถสรุปรายงานออกมาได้ทันที<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEii1T5EPnAFzNye6oU2MgN6fSBkEKDIF0XfZbO0d6mKClohFrQtyZDdQp8OBO07iI60grlGU6wfvibCDunMwJWWH15zznuIp3fBVzB_f8UnkuNPhbqpvCPpE-NY98uKU6sF-XzhO9Yc9QE/s1600/EXDB-09-01a.jpg"><img style="cursor: pointer; width: 400px; height: 234px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEii1T5EPnAFzNye6oU2MgN6fSBkEKDIF0XfZbO0d6mKClohFrQtyZDdQp8OBO07iI60grlGU6wfvibCDunMwJWWH15zznuIp3fBVzB_f8UnkuNPhbqpvCPpE-NY98uKU6sF-XzhO9Yc9QE/s400/EXDB-09-01a.jpg" alt="" id="BLOGGER_PHOTO_ID_5535878676030906594" border="0" /></a><br /><span style="color: rgb(204, 0, 0);font-size:85%;" >รูปที่ 1 แสดงหน้าจอรายงานประวัติการฝึกอบรมของพนักงาน</span><br /><br /><br /><span style="font-weight: bold;font-size:130%;" >2.</span> เพื่อสรุปผลการฝึกอบรมเป็นรายหลักสูตรว่า หลักสูตรนี้ รุ่นนี้ เคยจัดอบรมเมื่อใด? ที่ไหน? มีพนักงานเข้ารับการอบรมกี่คน? ใครบ้าง? ใช้งบประมาณไปเท่าไหร่? ฯลฯ เพียงแค่คีย์รหัสหลักสูตรนั้น ก็จะสามารถสรุปรายงานออกมาได้ทันที<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5gRV-gCcrJKrvcVmM91xM2zySVA1FstWXCtF4sTJMf4usq89cfk0KtV6SWiNFvVpIdcIh-SBiSdFyO4bPaT14O8KlGxGCg9FYTnP8gGkJDsHv1C8GAJUs-xjbf01rdTHOMa62pnNXfEQ/s1600/EXDB-09-02a.jpg"><img style="cursor: pointer; width: 400px; height: 246px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5gRV-gCcrJKrvcVmM91xM2zySVA1FstWXCtF4sTJMf4usq89cfk0KtV6SWiNFvVpIdcIh-SBiSdFyO4bPaT14O8KlGxGCg9FYTnP8gGkJDsHv1C8GAJUs-xjbf01rdTHOMa62pnNXfEQ/s400/EXDB-09-02a.jpg" alt="" id="BLOGGER_PHOTO_ID_5535878901255699858" border="0" /></a><br /><span style="color: rgb(204, 0, 0);font-size:85%;" >รูปที่ 2 แสดงหน้าจอรายงานการจัดอบรมแยกเป็นแต่ละหลักสูตร</span><br /><br /><br /><span style="font-size:130%;"><span style="font-weight: bold;">3.</span></span> เพื่อจะได้ทราบข้อมูลเบื้องต้นของพนักงานในบริษัท ว่าใคร? ตำแหน่งอะไร? ทำงานอยู่แผนกไหน? เข้างานเมื่อไหร่? ฯลฯ เป็นต้น โดยสามารถค้นหาและแสดงข้อมูลหรือรูปถ่ายพนักงานเป็นรายบุคคลได้<br /><br /><span style="font-size:130%;"><span style="font-weight: bold;">4.</span></span> เพื่อประโยชน์ในการบริหารแรงงานสัมพันธ์ เช่น ทราบว่าพนักงานพักอยู่ที่ไหน? คู่สมรสเป็นใคร? มีบุตรกี่คน? ฯลฯ เป็นต้น และสามารถดึงข้อมูลมาทำ Mail Merge ได้โดยอัตโนมัติ<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhW1HHks5WQwkTGKXeHqueHXVHp31QsY2X-2UcHz3gvE3k7xCJbq8Yg6de7lunAu_gTTDPwk2Fm0A__8CZBJlNo0db4owQ2QGqQM78gbvyAjaWQchk2TEGefmvT9mPPVVNwj9yMdmFerMg/s1600/EXDB-09-03.jpg"><img style="cursor: pointer; width: 400px; height: 161px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhW1HHks5WQwkTGKXeHqueHXVHp31QsY2X-2UcHz3gvE3k7xCJbq8Yg6de7lunAu_gTTDPwk2Fm0A__8CZBJlNo0db4owQ2QGqQM78gbvyAjaWQchk2TEGefmvT9mPPVVNwj9yMdmFerMg/s400/EXDB-09-03.jpg" alt="" id="BLOGGER_PHOTO_ID_5535879075874554098" border="0" /></a><br /><span style="color: rgb(204, 0, 0);font-size:85%;" >รูปที่ 3 แสดงตัวอย่างตารางบันทึกข้อมูลพนักงาน</span><br /><br /><br /><span style="font-size:130%;"><span style="font-weight: bold;">5.</span></span> เพื่อเป็นต้นแบบสำหรับการพัฒนาระบบงานอื่นๆ ในอนาคต เช่น ระบบจ่ายค่าตอบแทน ระบบประเมินผล ระบบบัญชี ระบบจัดซื้อ ระบบบันทึกข้อมูลการขาย ฯลฯ เป็นต้น ซึ่งจะสามารถใช้งานข้อมูลร่วมกันได้ ลดความผิดพลาดและความซ้ำซ้อนของการบันทึกข้อมูล<br /><br /><span style="font-size:130%;"><span style="font-weight: bold;">6.</span></span> ออกแบบไว้เพื่อรองรับการขยายตัวของบริษัทในอนาคต ซึ่งอาจจะมีจำนวนพนักงานหรือหน่วยงานเพิ่มขึ้น ซึ่งถ้าจะปรับเปลี่ยนไปใช้ระบบที่ใหญ่ขึ้น ก็จะสามารถกระทำได้ง่าย<br /><br /><br /><br /><span style="color: rgb(0, 0, 153);font-size:130%;" ><span style="font-weight: bold;">ออกแบบหน้าตาของผลลัพธ์ที่ต้องการ (Output Design)</span></span><br /><br />เมื่อหาความต้องการเบื้องต้นได้แล้ว ก็มาเริ่มทำการออกแบบ Output ว่าต้องการจะให้แสดงข้อมูลอะไรบ้าง ทั้งในส่วนหน้าจอ (Screen) และส่วนที่จะต้องพิมพ์ออกมา (Paper) และสำหรับ “ระบบบันทึกประวัติการฝึกอบรม” นี้ ผมได้ออกแบบหน้าจอตัวอย่างไว้ 2 แบบ ดังรูปที่ 4 และรูปที่ 5<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1I0qrXl_7zGVE4OI1R5E_rJRM_ZvxbOO_awwJ7bGCs6LB0ik3KMp3_C54JboOsBaYjehXtUA4vF3q0_QFCnuGu80fOBobE__XY7RazztH0up6zzzImPlrIhABfa3yWgf8E6BlEe2nipg/s1600/EXDB-09-01.jpg"><img style="cursor: pointer; width: 400px; height: 234px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1I0qrXl_7zGVE4OI1R5E_rJRM_ZvxbOO_awwJ7bGCs6LB0ik3KMp3_C54JboOsBaYjehXtUA4vF3q0_QFCnuGu80fOBobE__XY7RazztH0up6zzzImPlrIhABfa3yWgf8E6BlEe2nipg/s400/EXDB-09-01.jpg" alt="" id="BLOGGER_PHOTO_ID_5535879326597623538" border="0" /></a><br /><span style="color: rgb(204, 0, 0);font-size:85%;" >รูปที่ 4 แสดงรูปแบบรายงานประวัติการฝึกอบรมแยกเป็นรายพนักงาน</span><br /><br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj32_7Akai6IP86tKvEOIcYDoOXCW2UVKoAFAS_n2tvIfnC3zMbFZx0F0v0aOxq_ExaOaloDBef2qag6hrOb3AwUeJEqPK292Klr2JrFFUFXVUeXzw0HpGwzrZnWIp4XdhtVEyhcZRM7mg/s1600/EXDB-09-02.jpg"><img style="cursor: pointer; width: 400px; height: 246px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj32_7Akai6IP86tKvEOIcYDoOXCW2UVKoAFAS_n2tvIfnC3zMbFZx0F0v0aOxq_ExaOaloDBef2qag6hrOb3AwUeJEqPK292Klr2JrFFUFXVUeXzw0HpGwzrZnWIp4XdhtVEyhcZRM7mg/s400/EXDB-09-02.jpg" alt="" id="BLOGGER_PHOTO_ID_5535879440153826162" border="0" /></a><br /><span style="color: rgb(204, 0, 0);font-size:85%;" >รูปที่ 5 รูปแบบรายงานประวัติการฝึกอบรมแยกเป็นรายหลักสูตร</span><br /><br /><br />การออกแบบหน้าจอผลลัพธ์นั้น ในขั้นแรกให้ออกแบบเฉพาะโครงสร้างรูปร่างก่อน ยังไม่ต้องคิดเรื่องการเขียนสูตร หรือการสร้างฐานข้อมูลใดๆ โดยพิจารณาจากความต้องการของตนหรือของผู้บังคับบัญชา ที่เคยขอดูรายงานต่างๆ ในอดีตที่ผ่านมา เพื่อให้ระบบใหม่นี้ รองรับกับความต้องการเหล่านั้นด้วย<br /><br /><br /><br /><span style="font-weight: bold; color: rgb(0, 0, 153);font-size:130%;" >รวบรวมแหล่งข้อมูลนำเข้า (Input Source)</span><br /><br />เมื่อรวบรวมความต้องการเบื้องต้นได้แล้ว สิ่งที่ต้องคิดต่อไปก็คือ <span style="color: rgb(204, 0, 0); font-weight: bold;">“ขณะนี้เรามีข้อมูลอะไรอยู่</span><span style="color: rgb(204, 0, 0); font-weight: bold;">แล้ว</span><span style="color: rgb(204, 0, 0); font-weight: bold;">บ้าง?”</span> วิธีง่ายๆ คือ ลองเปิดดูแฟ้มต่างๆ ในตู้เอกสาร ซึ่งอาจจะพบข้อมูลมากมาย เช่น ข้อมูลพนักงานจากใบสมัครงาน, แฟ้มประวัติการจัดอบรมแต่ละหลักสูตร, ใบประเมินผลการฝึกอบรม, ประวัติการประเมินผลงาน, ฯลฯ และแฟ้มข้อมูลอื่นๆ อีกมากมาย<br /><br /><span style="font-style: italic; color: rgb(204, 0, 0);">“ที่จริงแล้ว เราก็มีข้อมูลที่เป็นวัตถุดิบครบทุกอย่าง แต่ที่ผ่านมาไม่มีการจัดเก็บที่เป็นระบบ เวลาที่ต้องการสรุปข้อมูลย้อนหลัง จึงใช้เวลานานมาก และมีโอกาสผิดพลาดได้บ่อยๆ”</span> ซึ่งเป็นสิ่งที่พบได้ทั่วไปในเกือบทุกองค์กร ที่ชอบเก็บข้อมูลไว้จนล้น แต่ไม่มีระบบการจัดการที่ดี<br /><br />การเก็บข้อมูลเข้าแฟ้มแบบ Hard Copy จะสะดวกในตอนเก็บ แต่ไม่สะดวกในตอนที่จะเรียกใช้หรือค้นหา การทำรายงานสรุปข้อมูลใดๆ จึงใช้เวลานานในการรวบรวมและประมวลผลข้อมูล ดังนั้น คนส่วนใหญ่จึง <span style="font-weight: bold; color: rgb(204, 0, 0);">“อยาก”</span> จะเปลี่ยนระบบการเก็บข้อมูลมาเป็นแบบ Soft Copy เพราะรู้ดีว่ามีประโยชน์มากเพียงใด แต่มักติดปัญหาอยู่ 2 เรื่องที่ทำให้ “ความอยาก” นั้น ไม่ประสบความสำเร็จซักที นั่นคือ <span style="color: rgb(204, 0, 0);">1.) "ขาดทักษะ"</span> ในการใช้คอมพิวเตอร์ และ <span style="color: rgb(204, 0, 0);">2.) "ขี้เกียจ"</span><br /><br /><br /><br />ในครั้งต่อไป เราจะมาลงรายละเอียด เจาะกันไปทีละเรื่อง โดยเฉพาะในเรื่องการเขียนสูตร เพื่อค้นหาหรือแสดงข้อมูลตามเงื่อนไขที่ต้องการ<br /><br /><br /><hr />ครูเอกhttp://www.blogger.com/profile/01255634988258604526noreply@blogger.com111tag:blogger.com,1999:blog-6989162005462801250.post-66036536964100384752010-11-03T13:38:00.005+07:002010-11-03T14:19:54.747+07:00การออกแบบระบบงานฐานข้อมูลด้วย Excelประเด็นที่จะแนะนำต่อไปนี้ ไม่ได้เป็นกฎระเบียบที่ตายตัว ผมเขียนตามมุมมองและประสบการณ์ของตนเอง ซึ่งผู้ใช้ Excel แต่ละคน อาจมีมุมมองที่แตกต่างไป ขึ้นอยู่กับว่า มีความช่ำชองในการใช้ Excel แค่ไหน เรียนรู้ Excel มามากน้อยเพียงไร หรือเคยใช้ Excel ในงานฐานข้อมูลมาก่อนหรือไม่<br /><br /><br /><span style="color: rgb(0, 0, 153);font-size:130%;" ><span style="font-weight: bold;">สิ่งที่ควรคำนึงถึงในการออกแบบฐานข้อมูลด้วย Excel </span></span><br /><ul><li>จะจัดแบ่งฐานข้อมูลออกเป็นตารางย่อยๆ ที่มีความสัมพันธ์กันอย่างไร และจะแบ่งออกเป็นกี่ตาราง</li><li>ตารางฐานข้อมูลควรอยู่ในชีทเดียวกัน หรือคนละชีท หรือควรจะแยกเป็นคนละไฟล์ </li><li>ทำอย่างไรให้ไฟล์มีขนาดเล็ก และใช้เวลาในการคำนวณเร็วที่สุด</li><li>ต้องมีการกำหนดรูปแบบ (Format) ให้กับข้อมูลที่จัดเก็บหรือไม่ อย่างไร </li><li>ต้องบันทึกข้อมูลลงไปเองทีละเซลล์ หรือจะใช้เครื่องมือใดช่วยในการนำเข้าข้อมูล </li><li>หากโครงสร้างตำแหน่งของข้อมูลเปลี่ยนไปจากเดิม จะค้นหาข้อมูลนั้นได้อย่างไร </li><li>ถ้าหากขนาดของตารางข้อมูลเปลี่ยนไปทั้งจำนวน Row/Column จะส่งผลกระทบอะไรบ้าง </li><li>จะป้องกันความพลั้งเผลอของผู้ใช้ได้อย่างไรบ้าง เช่น การสะกดผิดหรือบันทึกข้อมูลผิดประเภท ฯลฯ เป็นต้น</li><li>ขีดความสามารถและข้อจำกัดของสูตร คำสั่งบนเมนู หรือการใช้งานร่วมกันมีอะไรบ้าง </li><li>ฯลฯ</li></ul><br /><span style="color: rgb(0, 0, 153);font-size:130%;" ><span style="font-weight: bold;">เงื่อนไขการออกแบบฐานข้อมูลด้วย Excel</span></span><br /><ol><li>ให้มองว่าข้อมูล 1 แถว (Row) หมายถึง 1 รายการ (Record)</li><li>แถวที่เป็นชื่อคอลัมน์ (Field name หรือ Column Header) จะต้องมีเพียงแถวเดียว ซึ่งเป็นแถวแรกของตาราง โดยชื่อคอลัมน์ดังกล่าวนั้นต้องไม่ซ้ำกัน และไม่มีเซลล์ใดของแถวนี้เป็นเซลล์ว่าง</li><li>แถวแรกของข้อมูล (แถวแรกที่ถัดลงมาจากแถวที่เป็นชื่อคอลัมน์) ต้องไม่เป็นแถวว่าง</li><li>ควรเก็บข้อมูลแยกกันคนละชีท และสร้างความสัมพันธ์ระหว่างชีทด้วยรหัส (Keys)</li><li>ข้อมูลแบบ One-2-One ควรกำหนดให้คอลัมน์แรกเป็น รหัส (Primary Keys) ส่วนข้อมูลแบบ One-2-Many ควรกำหนดให้คอลัมน์แรกเป็นลักษณะ Running No.</li><li>งานส่วนที่เป็น Output หรือ Report ควรแยกเป็นคนละชีทกับข้อมูลหลัก</li></ol><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIgp1KzN_APcpXY_IyvAcydyNu6LvPFqAEAMEwx03cNQOhXRCeTjk4oZmR1q2MdSgxqd7toLIh7HrzBpP-Bwl423R6xvGB5rj8OA9EQUlbjC69l2p5twSm0ngFbuKMHrWT1rvGxgQV7d4/s1600/21-01-Excel+Database.jpg"><img style="cursor: pointer; width: 400px; height: 248px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIgp1KzN_APcpXY_IyvAcydyNu6LvPFqAEAMEwx03cNQOhXRCeTjk4oZmR1q2MdSgxqd7toLIh7HrzBpP-Bwl423R6xvGB5rj8OA9EQUlbjC69l2p5twSm0ngFbuKMHrWT1rvGxgQV7d4/s400/21-01-Excel+Database.jpg" alt="" id="BLOGGER_PHOTO_ID_5535213246213895682" border="0" /></a><br /><span style="color: rgb(204, 0, 0);font-size:85%;" >รูปที่ 1 แสดงตัวอย่างตารางข้อมูลที่แยกกันและมีความสัมพันธ์กันระหว่างตาราง</span><br /><br /><br /><span style="color: rgb(0, 0, 153);font-size:130%;" ><span style="font-weight: bold;">เหตุผลที่ควรทำงานแบบฐานข้อมูล</span></span><br /><ol><li>ลดความซ้ำซ้อนในการจัดเก็บข้อมูล</li><li>สะดวกในการเพิ่ม-ขยาย หรือปรับเปลี่ยนไปสู่ระบบใหญ่ในอนาคต</li><li>ประหยัดเวลาในการปรับปรุงแก้ไขข้อมูล เพราะสามารถแก้ไขจากจุดเดียว แล้วข้อมูลจะปรับปรุงไปยังทุกจุดโดยอัตโนมัติ</li><li>ลดความผิดพลาดที่อาจเกิดขึ้นจากการบันทึกข้อมูล</li><li>สามารถสร้างรายงานที่มีผลลัพธ์ได้หลากหลาย และมีประสิทธิภาพกว่าการทำงานแบบ Manual</li><li>ข้อมูลผลลัพธ์จะมีความถูกต้องและน่าเชื่อถือมากขึ้น (เมื่อข้อมูลที่นำเข้ามีความถูกต้อง)</li></ol><br /><span style="font-size:130%;"><span style="font-weight: bold; color: rgb(0, 0, 153);">การวิเคราะห์ระบบเพื่อการออกแบบฐานข้อมูล</span></span><br /><br />กระบวนการในการวิเคราะห์ เพื่อจะนำไปสู่การออกแบบระบบใดๆ ส่วนใหญ่แล้วจะมีอยู่ 3 ขั้นตอน คือ การวิเคราะห์<span style="color: rgb(153, 0, 0); font-weight: bold;">ข้อมูลนำเข้า</span> (Input), การวิเคราะห์<span style="color: rgb(153, 0, 0); font-weight: bold;">กระบวนการประมวลผล</span> (Process) และการวิเคราะห์<span style="color: rgb(153, 0, 0); font-weight: bold;">ผลลัพธ์</span> (Output)<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmJVnK0Zu7GSOgxrcyNSBLlqXWtOTkwPc5rz7aPaAYTP815K89VOqt_wjlJTR-3EL7y9MR51hXMKcXOzd8LUoiAOBf5nWiUaLwoFl8QiCaeQOBSOqdnDQhFCWQMMrV41U7Xh11hoUQ6QE/s1600/21-02-DataAnalysisProcess.jpg"><img style="cursor: pointer; width: 400px; height: 54px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmJVnK0Zu7GSOgxrcyNSBLlqXWtOTkwPc5rz7aPaAYTP815K89VOqt_wjlJTR-3EL7y9MR51hXMKcXOzd8LUoiAOBf5nWiUaLwoFl8QiCaeQOBSOqdnDQhFCWQMMrV41U7Xh11hoUQ6QE/s400/21-02-DataAnalysisProcess.jpg" alt="" id="BLOGGER_PHOTO_ID_5535213733103559858" border="0" /></a><br /><span style="color: rgb(204, 0, 0);font-size:85%;" >รูปที่ 2 ขั้นตอนการวิเคราะห์เพื่อการออกแบบระบบงาน</span><br /><br /><br />เนื่องจากการออกแบบฐานข้อมูลด้วย Excel มีความยุ่งยากซับซ้อนน้อยกว่า Access หรือโปรแกรมอื่นๆ ผมจึงขอแนะนำให้วิเคราะห์จากผลลัพธ์ก่อน คือต้องหาให้ได้ก่อนว่าเราต้องการอะไร (Output), ความต้องการนั้นจะได้มาจากอะไร (Input) และข้อมูลที่ได้มานั้นจะต้องทำอย่างไรบ้าง (Process) เช่น<br /><br /><span style="font-weight: bold;">การวิเคราะห์ผลลัพธ์ (Output)</span><br />• พิจารณาดูว่ามีผลลัพธ์อะไรบ้างที่เราต้องการจริงๆ จากฐานข้อมูล<br />• ผลลัพธ์ที่คาดว่าอาจจะเป็นที่ต้องการในอนาคต<br />• รูปแบบของผลลัพธ์ เช่น รายงานในรูปสิ่งพิมพ์, หน้าจอ, ไฟล์ข้อมูล, กราฟ ฯลฯ เป็นต้น<br /><br /><span style="font-weight: bold;">การวิเคราะห์ข้อมูลนำเข้า (Input)</span><br />• พิจารณาว่า เพื่อจะให้ได้ผลลัพธ์อย่างที่ต้องการ จำเป็นต้องใช้ข้อมูลอะไรบ้าง<br />• ข้อมูลที่จะต้องใช้ทั้งหมดนั้น จะได้มาอย่างไร จากแหล่งไหน<br />• มีการตรวจสอบความถูกต้องของข้อมูลที่จะนำเข้านั้นหรือไม่ อย่างไร<br /><br /><span style="font-weight: bold;">การวิเคราะห์กระบวนการประมวลผล (Process)</span><br />• ผลลัพธ์แต่ละตัว จะประมวลผลมาจากข้อมูลตัวใดบ้าง<br />• หลักเกณฑ์ เงื่อนไข ในการประมวลผลหรือการคำนวณ<br />• สูตรและฟังก์ชันที่เกี่ยวข้องกับการประมวลผล<br /><br /><br /><span style="color: rgb(0, 0, 153);font-size:130%;" ><span style="font-weight: bold;">ลักษณะของฐานข้อมูลที่ดี</span></span><br /><br />ในการทำงานจริงนั้น เนื่องจากความถี่ในการใช้ข้อมูลแต่ละประเภทไม่เท่ากัน เราจึงควรแยกข้อมูลแต่ละประเภทออกเป็นคนละตาราง เช่น ข้อมูลส่วนตัวพนักงาน ข้อมูลสถานะการว่าจ้าง ข้อมูลการเข้ารับการฝึกอบรม หรือข้อมูลประวัติการลา ฯลฯ เป็นต้น<br /><br />นอกจากนี้ ข้อมูลในบางคอลัมน์ที่มีโอกาสผิดพลาดได้ง่ายจากการป้อนข้อมูล ก็ควรมีการตรวจสอบความผิดพลาด (Data Validation) และลดความซ้ำซ้อนของการบันทึกข้อมูล เช่น<br /><ul><li>ข้อความที่มีการใช้ได้หลายแบบ เช่น “กรุงเทพมหานคร” “กรุงเทพฯ” หรือ “กทม.” ก็ควรกำหนดไปเลยว่าจะใช้แบบไหน มิฉะนั้นเวลากรองข้อมูลจะพบว่าเป็นคนละจังหวัดกัน<br /><br /></li><li>ชื่อตำแหน่งงาน ชื่อหน่วยงาน วุฒิการศึกษา ฯลฯ อาจใช้การแยกเป็นตารางย่อย และกำหนดเป็นรหัสขึ้นมาแทน และใช้รหัสนั้นมากรอกในฐานข้อมูลหลัก เพื่อเชื่อมโยงไปยังตารางย่อยนั้นอีกทีหนึ่ง<br /><br /></li><li>ข้อมูลที่อยู่ ก็ควรแยกให้ละเอียด เช่น ถนน ตำบล อำเภอ จังหวัด ซึ่งจะช่วยเพิ่มความฉลาดให้กับฐานข้อมูล ในการคัดกรองและค้นหาข้อมูล เพราะสามารถกำหนดเงื่อนไขการค้นหาได้ละเอียดขึ้น เช่น ค้นหาเฉพาะคนที่อยู่อำเภอนี้ ของจังหวัดนั้น ฯลฯ เป็นต้น<br /><br /></li><li>ข้อมูลที่เกิดจากการคำนวณ (Calculate Field) ไม่ควรใส่ไว้ในฐานข้อมูล เช่น อายุ หรือ อายุงาน เนื่องจากแต่ละวันที่ผ่านไป อายุก็ย่อมเพิ่มขึ้นทุกวัน หากไประบุตัวเลขอายุเอาไว้ตายตัว จะทำให้ข้อมูลไม่เป็นปัจจุบัน จึงควรเก็บเฉพาะวันที่เข้างาน หรือวันเกิด แล้วใช้สูตรคำนวณในรายงาน (Output) ที่ต้องการ ซึ่งจะทำให้ได้ข้อมูลที่เป็นปัจจุบันที่สุด ณ วันนั้นๆ<br /></li></ul><br />ที่กล่าวมาทั้งหมดนี้ ก็เป็นแนวคิดในการออกแบบระบบฐานข้อมูลด้วย Excel ในโอกาสต่อไป ผมจะแนะนำขั้นตอนการออกแบบระบบฐานข้อมูล โดยอาจจะยกตัวอย่างระบบงานขึ้นมาสักอย่างหนึ่ง เพื่อลองฝึกปฏิบัติร่วมกัน<br /><br /><br /><br /><hr />ครูเอกhttp://www.blogger.com/profile/01255634988258604526noreply@blogger.com1tag:blogger.com,1999:blog-6989162005462801250.post-29692849865332356392010-11-01T09:40:00.006+07:002010-11-02T09:41:21.032+07:00สร้างตารางการปฏิบัติงาน (Gantt Chart) ด้วย Conditional formatting<span style="font-weight: bold; color: rgb(204, 0, 0);">ตารางการปฏิบัติงาน</span> หรือ Gantt Chart เป็นอีกลักษณะงานหนึ่งที่หลายๆ คนต้องทำ ส่วนใหญ่จะมีลักษณะเป็นตารางรายวัน รายเดือน หรือรายปี ใช้สำหรับการวางแผนและควบคุมโครงงานต่างๆ ให้ดำเนินไปตามระยะเวลาที่วางเอาไว้ เช่น แผนการฝึกอบรมประจำปี, แผนการดำเนินโครงการ หรือ แผนการวางระบบใดๆ ฯลฯ เป็นต้น ดังรูปที่ 1<br /><br /><a href="http://www.bloggang.com/data/samroeng/picture/1233467663.jpg" target="_blank"><img src="http://www.bloggang.com/data/samroeng/picture/1233467663.jpg" width="450" border="0" height="276" /></a><br /><span style="color: rgb(204, 0, 0);font-size:85%;" >รูปที่ 1 ตัวอย่างตารางแผนการฝึกอบรมประจำปี</span><br /><br /><br />ผมเคยเห็นการสร้างตารางแผนการปฏิบัติงาน (Gantt Chart) ของบางคน จะเรียกว่าเป็นวิธีการขั้นเทพ หรือภูมิปัญญาชาวบ้านก็ไม่ทราบได้ โดยใช้วิธีการวาดเส้นหรือกล่องสี่เหลี่ยม ด้วยเครื่องมือวาดภาพ (Drawing Tools) ลงในช่วงเดือนที่ต้องการ แล้วลงสีให้เป็นสีทึบ ก็จะได้ผลงานออกมาลักษณะคล้ายๆ กับในรูปที่ 1 เช่นกัน<br /><br />แต่ในความเป็นจริงแล้ว แผนงานใดๆ ก็ตาม ไม่ได้เรียบร้อยสมบูรณ์ในครั้งเดียว ต้องมีการปรับปรุง แก้ไข นำเสนอใหม่ หรือขยับช่วงเวลา อาจต้องแก้ไขอีก สองรอบ สามรอบ หรือมากกว่านั้น พอแก้ไขรายการหรือช่วงเวลา แต่ลืมขยับเส้นที่ขีดไว้เดิม พอพิมพ์ไปแล้ว..ก็ผิดอีก ก็ต้องกลับมาแก้ไขกันใหม่ ปัญหานี้จะหมดไป ถ้าเราใช้ความสามารถในการ<span style="font-weight: bold; color: rgb(204, 0, 0);">จัดรูปแบบตามเงื่อนไข</span> หรือ <b style="color: rgb(204, 0, 0);">Conditional formatting</b> ผสมกับการเขียนสูตรและเลือกใช้ฟังก์ชันที่เหมาะสม ก็สามารถสร้างตารางการปฏิบัติงานที่มีประสิทธิภาพ และอัตโนมัติได้<br /><br /><br /><span style="color: rgb(0, 0, 153);font-size:130%;" ><span style="font-weight: bold;">ลงมือปฏิบัติ</span></span><br /><br />ก่อนอื่น ให้ทำการสร้างตารางการปฏิบัติงาน สมมติว่าเป็น <span style="font-weight: bold;">"ตารางแผนการฝึกอบรมประจำปี"</span> โดยแบ่งเป็นสองส่วน ข้อมูลส่วนแรกได้แก่ ลำดับที่ ชื่อหลักสูตร วันเริ่มต้น วันสิ้นสุด และจำนวนวัน เป็นต้น<br /><br />เพื่อที่จะให้แถบสีในช่วงระยะเวลาดำเนินการ ออกมาดูสวยงาม จึงควรแทรกแถวว่างข้างบนและข้างล่างของแถวที่เป็นชื่อหลักสูตร และปรับขนาดของแถวนั้นให้มีความสูงประมาณ 6~8 พิกเซล และทำการผสานเซลล์ (Merge cells) เพื่อให้ 3 แถวรวมกันเป็น 1 แถว (เฉพาะในช่วง A:E) ดังรูปที่ 2<br /><br /><a href="http://www.bloggang.com/data/samroeng/picture/1233467799.jpg" target="_blank"><img src="http://www.bloggang.com/data/samroeng/picture/1233467799.jpg" width="450" border="0" height="251" /></a><br /><span style="color: rgb(204, 0, 0);font-size:85%;" >รูปที่ 2 ตัวอย่างตารางแผนการฝึกอบรมประจำปี</span><br /><br /><br />ทดลองใส่<span style="font-weight: bold;">วันที่เริ่มต้น</span> และ<span style="font-weight: bold;">วันที่สิ้นสุด</span> ลงในคอลัมน์ C และ D ของแต่ละกิจกรรม เพื่อจะใช้ทดสอบการแสดงผล และในคอลัมน์ E เป็นการหาจำนวนวันของกิจกรรมนั้นๆ (ถ้าต้องการ) ให้พิมพ์สูตร <span style="color: rgb(204, 0, 0);"><b>=IF(ISBLANK($C7),"",D7-C7+1)</b></span><br /><br /><br /><span style="color: rgb(0, 0, 153);font-size:130%;" ><span style="font-weight: bold;"></span></span>สำหรับข้อมูลส่วนที่สองของตารางนี้คือ ในช่วงคอลัมน์ F:Q ซึ่งจะแสดงแถบสี ที่สัมพันธ์กับวันที่ในคอลัมน์ C และ D ดังนั้น ก่อนอื่นให้ใส่ชื่อเดือนในช่วง F5:Q5 จะใส่เป็นภาษาไทย หรือภาษาอังกฤษ จะเป็นชื่อเต็มหรือชื่อย่อก็ได้ครับ ตามสะดวก ดังรูปที่ 3<br /><br /><a href="http://www.bloggang.com/data/samroeng/picture/1233467991.jpg" target="_blank"><img src="http://www.bloggang.com/data/samroeng/picture/1233467991.jpg" width="450" border="0" height="190" /></a><br /><span style="color: rgb(204, 0, 0);font-size:85%;" >รูปที่ 3 แสดงรายชื่อเดือนในหัวตาราง</span><br /><br /><br /><span style="color: rgb(0, 0, 153);font-size:130%;" ><span style="font-weight: bold;">ขั้นตอนการแสดงแถบสีในช่วงระยะเวลาที่กำหนด</span></span><br /><br />เงื่อนไขการแสดงแถบสีที่สัมพันธ์กับวันที่ของแต่ละกิจกรรมนั้นๆ คือ <span style="color: rgb(0, 0, 255);"><b>“วันเริ่มต้น (C7) ต้องไม่เป็นค่าว่าง (ต้องใส่วันเริ่มต้น) <span style="color: rgb(204, 0, 0);">และ</span> เดือนของวันเริ่มต้น (C7) น้อยกว่าหรือเท่ากับเดือนในหัวตาราง (แถวที่ 5) <span style="color: rgb(204, 0, 0);">และ</span> ค่าเดือนของวันสิ้นสุด (D7) มากกว่าหรือเท่ากับ</b></span><span style="color: rgb(0, 0, 255);"><b>เดือนในหัวตาราง (แถวที่ 5)</b></span><span style="color: rgb(0, 0, 255);"><b>”</b></span> ถ้าเงื่อนไขตรงตามที่กล่าวมานี้ ก็ให้แสดงรูปแบบเซลล์ตามที่เราจะกำหนด โดยใช้ Conditional Formatting<br /><ol><li>ให้เลือกช่วงเซลล์ F7:Q7<br /></li><li><span style="font-weight: bold; color: rgb(0, 0, 153);">สำหรับ Excel 2003</span> ให้คลิกที่เมนู Format > Conditional formatting… (รูปแบบ > การจัดรูปแบบตามเงื่อนไข...)<br /></li><li>เมื่อกรอบการตั้งเงื่อนไขปรากฏขึ้น ให้เลือก Formula Is… (สูตรคือ...) แล้วพิมพ์สูตรดังนี้<span style="font-weight: bold;"><br /><span style="color: rgb(204, 0, 0);">=</span></span><span style="color: rgb(204, 0, 0);">AND(NOT(ISBLANK($C7)),<br />MONTH($C7)<span style="font-weight: bold;"><=</span>COLUMNS($F:F),</span><br /><span style="color: rgb(204, 0, 0);">MONTH($D7)<span style="font-weight: bold;">>=</span>COLUMNS($F:F))</span></li><li>คลิกที่ปุ่ม Format (รูปแบบ)<br /></li><li>ทำการเลือกรูปแบบสีพื้น (Patterns) ตามต้องการ ดังรูปที่ 4 แล้วคลิก OK</li><li>คลิก OK อีกครั้ง เพื่อออกจากหน้าการกำหนดรูปแบบ แล้วสังเกตผลลัพธ์ที่ได้<br /></li></ol><br /><a href="http://www.bloggang.com/data/samroeng/picture/1233468081.jpg" target="_blank"><img src="http://www.bloggang.com/data/samroeng/picture/1233468081.jpg" width="450" border="0" height="311" /></a><br /><span style="color: rgb(204, 0, 0);font-size:85%;" >รูปที่ 4 แสดงการใช้ </span><span style="color: rgb(204, 0, 0);font-size:85%;" >Conditional Formatting</span><span style="color: rgb(204, 0, 0);font-size:85%;" > สำหรับ Excel 2003</span><br /><br /><br /><br /><span style="color: rgb(0, 0, 153);"><span style="font-weight: bold;">สำหรับ Excel 2007 หรือ 2010</span> ให้คลิกที่ริบบอน Home > Conditional formatting > New Rule... ดังรูปที่ 5 แล้วพิมพ์สูตรเช่นเดียวกับในข้อ 3 ข้างต้น</span><br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAV6cjvCoDl1UELbdP5apMkShts_5Cl-enEKe9RPHm5UoIxyoP3jJ6p_K2ZwpQuVNoUjsvd_kuhnwcCTHVXDA-NA_jBsW4pBqNPCPnAiK-rwIk1BVNdAuGuF4a_1NdzF8pAit4PoBXU98/s1600/2010-Conditional+Formatting.jpg"><img style="cursor: pointer; width: 400px; height: 229px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAV6cjvCoDl1UELbdP5apMkShts_5Cl-enEKe9RPHm5UoIxyoP3jJ6p_K2ZwpQuVNoUjsvd_kuhnwcCTHVXDA-NA_jBsW4pBqNPCPnAiK-rwIk1BVNdAuGuF4a_1NdzF8pAit4PoBXU98/s400/2010-Conditional+Formatting.jpg" alt="" id="BLOGGER_PHOTO_ID_5534776095064089138" border="0" /></a><br /><span style="color: rgb(204, 0, 0);font-size:85%;" >รูปที่ 5 แสดงการใช้ Conditional Formatting สำหรับ Excel 2007 และ Excel 2010</span><br /><br /><br /><br />คัดลอกสูตรจาก F7:Q7 (สำหรับการแสดงแถบสีของกิจกรรมที่ 1) เพื่อไปวางในแถวที่ 10, 13, ..., หรือในแต่ละกิจกรรม ตามลำดับ ซึ่งถ้าเราใส่วันที่ในคอลัมน์ C และ D ไว้แล้ว ก็จะเห็นมีแถบสีปรากฏขึ้น ในเดือนที่ตรงกับวันที่ของแต่ละกิจกรรมนั้นๆ ดังรูปที่ 6<br /><br /><a href="http://www.bloggang.com/data/samroeng/picture/1233468182.jpg" target="_blank"><img src="http://www.bloggang.com/data/samroeng/picture/1233468182.jpg" width="450" border="0" height="278" /></a><br /><span style="color: rgb(204, 0, 0);font-size:85%;" >รูปที่ 6 แสดงผลลัพธ์ตารางแผนการฝึกอบรม ที่ได้จากการจัดรูปแบบตามเงื่อนไข</span><br /><br /><br />หากกิจกรรมใดมีระยะเวลาดำเนินการข้ามเดือน แถบสีก็ระบายให้จนถึงเดือนที่สิ้นสุดกิจกรรมนั้นๆ เช่นกัน ถ้าเราทดลองเปลี่ยนวันที่เริ่มต้นและวันที่สิ้นสุด ก็จะเห็นว่าแถบสีในแถวนั้นๆ ก็จะมีการขยับเลื่อนตามไปด้วย และในทำนองเดียวกัน ถ้าลบวันที่เริ่มต้นออก แถบสีก็จะหายไปโดยอัตโนมัติ<br /><br /><br /><span style="color: rgb(204, 0, 0);">ขออธิบายเพิ่มเติมเกี่ยวกับการใช้ฟังก์ชัน COLUMNS ในการสร้างเงื่อนไข</span> เนื่องจากว่า รายชื่อเดือนในช่วง F5:Q5 นั้น เป็นข้อความ (Text) แต่เรานำไปเปรียบเทียบกับค่าเดือนของวันเริ่มต้น และวันสิ้นสุด ซึ่งเป็นตัวเลข (Number) ดังนั้น ผมจึงใช้ COLUMNS มาส่งค่าตัวเลขไปเปรียบเทียบกับเดือน โดยฟังก์ชัน COLUMNS นี้ จะทำหน้าที่นับจำนวนคอลัมน์ของช่วงที่เราระบุ ซึ่งในที่นี้ผมให้นับจากคอลัมน์ F เป็นหลัก ไปจนถึงคอลัมน์ Q ก็จะได้ผลลัพธ์เป็นตัวเลข 1-12 ซึ่งก็แทนเดือน 1-12 นั่นเอง<br /><br /><br /><br /><hr />ครูเอกhttp://www.blogger.com/profile/01255634988258604526noreply@blogger.com27tag:blogger.com,1999:blog-6989162005462801250.post-53037994322397650282010-10-28T18:56:00.002+07:002010-10-28T19:16:01.320+07:00การคำนวณหาอายุงานแบบอัตโนมัติมีงานหลายอย่าง ที่เกี่ยวข้องกับการหาช่วงระยะเวลา หรืออายุ (ทั้งอายุงาน, อายุคน, อายุสินค้า ฯลฯ) อย่างเช่นในไฟล์ <span style="color: rgb(204, 0, 0);">แบบทดสอบทักษะการใช้สูตรและฟังก์ชัน Excel ข้อที่ 2</span> ซึ่งมีอยู่ในซีดีรวมไฟล์ตัวอย่าง Excel ชุดที่ 1 (หรือเข้าไปดาวน์โหลดจากเว็บ http://www.e-hrit.com ก็ได้ครับ) ในโจทย์ข้อที่ 2 ดังรูป<br /><br /><span style="color:blue;"><img src="http://www.bloggang.com/data/samroeng/picture/1233470917.jpg" /><br /><br /><b><u>คำสั่ง</u></b><br /></span><ol><span style="color:blue;"><li>จากตารางที่โจทย์กำหนด จงคำนวณหาอายุงานของแต่ละคน ณ วันปัจจุบัน โดยแสดงผลลัพธ์เป็นข้อความ <b>"<span style="color: rgb(204, 0, 0);">xx</span> ปี <span style="color: rgb(204, 0, 0);">xx</span> เดือน <span style="color: rgb(204, 0, 0);">xx</span> วัน"</b><br /></li><li>เปิดไฟล์นี้ขึ้นมาเมื่อใด ผลลัพธ์ที่ได้จะต้องอัพเดตอัตโนมัติถึง ณ วันนั้นๆ</li></span></ol><span style="color:blue;"><br /></span><br /><hr /><br /><span style="color:blue;"><b>อธิบายแนวความคิด</b></span><br /><br />จากคำสั่งในโจทย์ ที่กำหนดให้หาอายุงาน และให้ผลลัพธ์ดังกล่าว อัพเดตอัตโนมัติ ณ วันใดๆ ที่เปิดไฟล์ขึ้นมา ทั้งนี้ด้วยเหตุผลที่ว่า ถ้าเราหาอายุงานออกมา โดยการคิดแบบ Manual แล้วพิมพ์ผลลัพธ์ใส่ลงไปตรงๆ เช่น 2 ปี 5 เดือน 15 วัน จะเปิดไฟล์ข้อมูลนี้ขึ้นมาวันไหนๆ ก็ยังเป็น 2 ปี 5 เดือน 15 วัน เหมือนเดิมไม่เปลี่ยนแปลง ซึ่งทำให้เราได้ข้อมูลที่ไม่ถูกต้อง<br /><br />ดังนั้น จึงกำหนดให้การคำนวณอายุงานเป็นแบบอัตโนมัติถึง ณ วันปัจจุบันใดๆ ที่เปิดไฟล์ดังกล่าวขึ้นมา ผมจะอาศัยวันที่ในเครื่องคอมพิวเตอร์ เป็นฐานในการคำนวณอายุงาน ทั้งนี้มีเงื่อนไขว่า จะต้องตั้งวันที่ในเครื่องนั้นๆ ให้ตรงกับความเป็นจริงด้วย<br /><br />สำหรับฟังก์ชันที่ใช้แสดงวันที่ปัจจุบัน โดยดึงค่าวันที่มาจากเครื่อง คือฟังก์ชัน <b>TODAY</b> เราสามารถแสดงวันที่ปัจจุบัน ณ เซลใดๆ โดยการพิมพ์ <span style="color: rgb(204, 0, 0);"><b>=TODAY()</b></span><br /><br />สำหรับการหาผลต่างระหว่างวันที่สองค่า มีอยู่ด้วยกันหลายวิธี แต่ในที่นี้ผมขอแนะนำฟังก์ชันชื่อว่า <b>DATEDIF</b> ซึ่งมีรูปแบบการใช้งาน ดังนี้<br /><br /><span style="color: rgb(204, 0, 0);"><b>=DATEDIF( วันที่เริ่มต้น , วันที่สิ้นสุด , <span style="font-style: italic;">รูปแบบผลลัพธ์</span> )</b></span><br /><br />โดยที่ <span style="font-style: italic; color: rgb(204, 0, 0);">รูปแบบผลลัพธ์</span> มีอยู่ด้วยกัน 6 แบบคือ<br /><span style="color: rgb(204, 0, 0);"><b>"Y"</b></span> หมายถึง หาผลต่างเป็นจำนวนเต็มปี<br /><span style="color: rgb(204, 0, 0);"><b>"YM"</b></span> หมายถึง หาผลต่างเป็นจำนวนเดือน แบบปีชนปี (ไม่สนใจว่าเป็นปีอะไร)<br /><span style="color: rgb(204, 0, 0);"><b>"YD"</b></span> หมายถึง หาผลต่างเป็นจำนวนวัน แบบปีชนปี (ไม่สนใจว่าเป็นปีอะไร)<br /><span style="color: rgb(204, 0, 0);"><b>"M"</b></span> หมายถึง หาผลต่างเป็นจำนวนเต็มเดือน (เศษตัดทิ้ง)<br /><span style="color: rgb(204, 0, 0);"><b>"MD"</b></span> หมายถึง หาผลต่างเป็นจำนวนวัน แบบเดือนชนเดือน (ไม่สนใจว่าเป็นปีอะไร หรือเดือนอะไร)<br /><span style="color: rgb(204, 0, 0);"><b>"D"</b></span> หมายถึง หาผลต่างเป็นจำนวนเต็มวัน<br /><br />เงื่อนไขอีกอย่างหนึ่งก็คือ <b>วันที่เริ่มต้น</b> และ<b>วันที่สิ้นสุด</b> จะต้องเป็นวันที่รูปแบบเดียวกัน เช่น d/m/y หรือจะ m/d/y หรือจะ y/m/d ซึ่งจะเป็นอย่างไรก็ได้ แต่ขอให้นำเข้าเป็นรูปแบบเดียวกัน และที่สำคัญที่สุดคือ Excel จะรับค่าเป็นปี ค.ศ. เท่านั้น ดังนั้น วันที่เริ่มต้น (ไม่ว่าจะเป็นวันเกิด หรือวันเข้างาน) ต้องเก็บเป็นปี ค.ศ. เท่านั้น<br /><br />โครงสร้างของฟังก์ชัน DATEDIF สำหรับการหาอายุงานในข้อนี้ คือ<br /><br /><span style="color: rgb(204, 0, 0);"><b>=DATEDIF( วันที่เข้างาน , TODAY() , รูปแบบผลลัพธ์ )</b></span><br /><br /><br /><br /><br /><span style="color:blue;"><b>การหาอายุงานออกมาเป็น กี่ปี กี่เดือน กี่วัน</b></span><br /><br />สูตรหา<u>จำนวนปี</u> =DATEDIF( วันที่เข้างาน , TODAY() , <span style="color: rgb(204, 0, 0);">"Y"</span> )<br />สูตรหา<u>เดือน</u> =DATEDIF( วันที่เข้างาน , TODAY() , <span style="color: rgb(204, 0, 0);">"YM"</span> )<br />สูตรหา<u>วัน</u> =DATEDIF( วันที่เข้างาน , TODAY() , <span style="color: rgb(204, 0, 0);">"MD"</span> )<br /><br />จากทั้งสามสูตรด้านบน จะได้ผลลัพธ์ออกมาเป็นตัวเลข จำนวนปี เดือน และวัน ตามลำดับ<br /><br /><br />แต่เนื่องจากการบวก ลบ วันที่ใน Excel ใช้หลักการเดียวกันกับการบวก ลบ ตัวเลขจำนวนเต็มทางคณิตศาสตร์ ดังนั้น ผลลัพธ์ที่ได้จึงอาจจะดูแปลกๆ เช่น ถ้าเราทำงานตั้งแต่วันที่ 2 ถึงวันที่ 6 ถามว่าเราทำงานกี่วัน คำตอบคือ 5 วัน แต่ในทางคณิตศาสตร์ เราเอา 6 ตั้ง แล้วลบด้วย 2 จะได้ผลลัพธ์เป็น 4 ซึ่งการบวก ลบ วันที่ใน Excel ก็ใช้หลักการนี้ ดังนั้น ผลลัพธ์ที่ได้เราจึงบวกกลับเข้าไปอีก 1 เพื่อให้นับวันตั้งต้นด้วยเสมอ<br /><br />สูตรที่นำไปใช้งานจริง จึงเป็นดังนี้<br /><br />หา<u>จำนวนปี</u> <b>=DATEDIF( วันที่เข้างาน , TODAY()<span style="color:red;">+1</span> , "Y" )</b><br />หา<u>เดือน</u> <b>=DATEDIF( วันที่เข้างาน , TODAY()<span style="color:red;">+1</span> , "YM" )</b><br />หา<u>วัน</u> <b>=DATEDIF( วันที่เข้างาน , TODAY()<span style="color:red;">+1</span> , "MD" )</b><br /><br /><br />หลังจากนี้ เราจะต้องใช้การเชื่อมข้อความ เพื่อให้ได้ผลลัพธ์ ดังที่โจทย์กำหนด<br /><br /><b>=<u style="color: rgb(204, 0, 0);">จำนวนปี</u><span style="color:blue;">&" ปี "&</span><u style="color: rgb(204, 0, 0);">เดือน</u><span style="color:blue;">&" เดือน "&</span><u style="color: rgb(204, 0, 0);">วัน</u><span style="color:blue;">&" วัน"</span></b><br /><br /><br />โดยสรุปก็คือ ที่เซลล์ F19 (อ้างอิงจากรูปข้างบน) พิมพ์สูตรดังนี้<br /><br /><b>=<span style="color: rgb(204, 0, 0);">DATEDIF(E19,TODAY()+1,"Y")</span><span style="color:blue;">&" ปี "&</span><span style="color: rgb(204, 0, 0);">DATEDIF(E19,TODAY()+1,"YM")</span><span style="color:blue;">&" เดือน "&</span><span style="color: rgb(204, 0, 0);">DATEDIF(E19,TODAY()+1,"MD")</span><span style="color:blue;">&" วัน"</span></b><br /><br />แล้วคัดลอกสูตรลงมายัง F20 และ F21 ตามลำดับ<br /><br /><br /><br /><hr />ครูเอกhttp://www.blogger.com/profile/01255634988258604526noreply@blogger.com8tag:blogger.com,1999:blog-6989162005462801250.post-40831004447420977902010-10-22T09:43:00.007+07:002010-10-24T11:04:58.295+07:00การสร้างแบบฟอร์มที่แสดงวันที่ในแต่ละเดือนโดยอัตโนมัติจากไฟล์แบบฟอร์มที่เป็นลักษณะ e-Form ที่เคยแจกไป โดยเฉพาะไฟล์ที่มีการแสดงวันที่ เช่น แบบฟอร์มใบลงเวลาการมาทำงาน ซึ่งในฟอร์มดังกล่าว เมื่อเลือกเดือนที่ต้องการแล้ว ก็จะแสดงวันที่เฉพาะของเดือนนั้นๆ โดยอัตโนมัติ เช่น ถ้าเดือนไหนมี 31 วัน ก็จะแสดงวันที่ 1 ถึง 31 แต่ถ้าเดือนไหนมี 30 วัน ก็จะแสดงวันที่ 1 ถึง 30 เป็นต้น ซึ่งก็มีผู้สอบถามเข้ามาเช่นเดิมว่า<span style="font-weight: bold; color: rgb(204, 0, 0);"> "ทำอย่างไร?"</span><br /><br />ที่จริงก็มีอยู่หลายวิธีการครับ วันนี้ผมจะอธิบายเรื่องนี้สัก 2 วิธี ดังนี้<br /><br /><br /><br /><span style="color: rgb(0, 0, 153);font-size:130%;" ><span style="font-weight: bold;">1. การสร้างแบบฟอร์มที่แสดงวันที่ในแนวตั้ง</span></span><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4K0G2-T-ewpkeJWc9iIN2LbpPy_p8W9_b690-tG_8QOm7RIgq0K2qapLVR9R31MuvpEVW4bOUEiEGmNUNA3Edcizcty1BtzHbFugjJwiuqvii1rRz9BqK9dtsGVGfJw72musDCvjBuSU/s1600/Auto_Day1.jpg"><img style="cursor: pointer; width: 400px; height: 336px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4K0G2-T-ewpkeJWc9iIN2LbpPy_p8W9_b690-tG_8QOm7RIgq0K2qapLVR9R31MuvpEVW4bOUEiEGmNUNA3Edcizcty1BtzHbFugjJwiuqvii1rRz9BqK9dtsGVGfJw72musDCvjBuSU/s400/Auto_Day1.jpg" alt="" id="BLOGGER_PHOTO_ID_5530695936782947746" border="0" /></a><br /><span style="color: rgb(204, 0, 0);font-size:85%;" >รูปที่ 1 ตัวอย่างแบบฟอร์มที่แสดงวันที่ในแนวตั้ง</span><br /><br /><br />จากตัวอย่างในรูปที่ 1 เป็นแบบฟอร์มที่แสดงวันที่ในแนวตั้ง ซึ่งเป็นแบบฟอร์มที่มักพบเห็นอยู่โดยทั่วไป จากตัวอย่าง ผมกำหนดให้เลือกชื่อเดือนที่ B1 และใส่ปี พ.ศ.ที่ D1 ซึ่งเมื่อเลือกเสร็จแล้ว วันที่ในช่วง A4:A34 ก็จะแสดงออกมาโดยอัตโนมัติ โดยแสดงเฉพาะจำนวนวันที่ของเดือนนั้นๆ ไม่ว่าจะเป็น 31วัน, 30วัน หรือ 28วัน เป็นต้น<br /><br />สมมติว่าเรามีแบบฟอร์มที่มีลักษณะคล้ายดังในรูปที่ 1 โดยกำหนดให้ใส่ชื่อเดือนที่ B1 และใส่ปี พ.ศ.ที่ D1 เพื่อสะดวกในการใส่ชื่อเดือน เราสามารถทำชื่อเดือนเป็น<span style="font-weight: bold;">รายการเลือก</span> (Drop Down List) ได้ <span style="font-style: italic; color: rgb(204, 0, 0);">(อ่านเพิ่มเติมเรื่อง "</span><a style="font-style: italic; color: rgb(204, 0, 0);" href="http://it-for-hr.blogspot.com/2009/08/list.html">การสร้างรายการเลือก (List) เพื่อเติมข้อมูล</a><span style="font-style: italic; color: rgb(204, 0, 0);">")</span><br /><br />จากแบบฟอร์มตัวอย่าง เราเลือกชื่อเดือนที่เป็นข้อความ (Text) และใส่ปีเป็นปี พ.ศ. ซึ่งไม่ใช่รูปแบบที่ Excel รู้จัก จึงต้องมีการเปลี่ยนค่าให้เป็นแบบที่ Excel รู้จัก และนำไปคำนวณได้<br /><br />มาเริ่มต้นที่ค่าปีก่อน เนื่องจาก Excel รับค่าปีเป็นปี ค.ศ.เท่านั้น ถ้าเราใส่ปี พ.ศ.เข้ามา ก็ต้องแปลงเป็นปี ค.ศ.เสียก่อน ดังนั้น <span style="font-weight: bold; color: rgb(204, 0, 0);">ค่าปี</span>ในที่นี้ก็คือ <span style="color: rgb(204, 0, 0);">$D$1-543</span> จะได้ 2010<br /><br />สำหรับค่าเดือนก็เช่นกัน Excel รับค่าเดือนเป็นตัวเลข 1-12 ซึ่งถ้าเราใส่ชื่อเดือนเป็นข้อความ ก็ต้องแปลงกลับไปเป็นตัวเลขเสียก่อน ในที่นี้ผมใช้ฟังก์ชัน MATCH เพื่อตรวจสอบว่า ชื่อเดือนใน B1 นั้น เป็นลำดับที่เท่าไรของช่วงรายชื่อเดือน G1:G12 และเอาผลลัพธ์ที่ได้จากการ MATCH นี้ ไปแทนค่าต่อไป ดังนั้น จากรูปที่ 1 <span style="font-weight: bold; color: rgb(204, 0, 0);">ค่าเดือน</span>ก็คือ <span style="color: rgb(204, 0, 0);">MATCH($B$1,$G$1:$G$12,0)</span> จะได้ 10<br /><br />การที่เราจะตั้งเงื่อนไขให้ Excel แสดงวันที่เฉพาะของเดือนนั้นๆ ก็คือ ต้องหาว่าวันสุดท้ายของเดือนนั้นๆ คือวันที่เท่าไร? ถ้าทราบวันที่สุดท้ายของเดือน ก็จะกำหนดได้ว่า ในแบบฟอร์มนี้จะให้แสดงวันที่ถึงวันที่เท่าไร<br /><br />หลักการใน<span style="color: rgb(204, 0, 0);">การหาวันสุดท้ายของเดือน</span>ก็คือ <span style="color: rgb(204, 0, 0);">วันที่หนึ่งของเดือนถัดไปลบหนึ่ง</span> เนื่องจากวันสุดท้ายของแต่ละเดือนนั้นไม่แน่นอน แต่ที่แน่นอนก็คือว่า ทุกเดือนจะเริ่มต้นจากวันที่หนึ่งเสมอ ซึ่งถ้านับถอยหลังจากวันที่หนึ่งของเดือนใดๆ ลงมาหนึ่งวัน ก็จะหมายถึง วันที่สุดท้ายของเดือนก่อนหน้านั่นเอง<br /><br />ดังนั้น ถ้าเราเลือกเดือนใดๆ ในแบบฟอร์ม เราก็จะหาค่าวันสุดท้ายของเดือนนั้นๆ ได้จากสูตร =<span style="color: rgb(51, 51, 255); font-weight: bold;">DATE(</span>$D$1-543,<span style="color: rgb(204, 0, 0);">MATCH($B$1,$G$1:$G$12,0)+1</span>,1<span style="font-weight: bold; color: rgb(51, 51, 255);">)</span>-1<br /><br />ซึ่งผลลัพธ์ที่ได้จะเป็นรูปแบบวัน (Date format) เช่น d/m/yyyy แต่ถ้าต้องการแสดงเฉพาะวันที่ (Day) เท่านั้น ก็เปลี่ยนสูตรเป็น =<span style="font-weight: bold; color: rgb(204, 0, 0);">DAY(</span><span style="color: rgb(51, 51, 255);">DATE($D$1-543,MATCH($B$1,$G$1:$G$12,0)+1,1)-1</span><span style="color: rgb(204, 0, 0); font-weight: bold;">)</span> ก็จะได้ผลลัพธ์เป็นเลขจำนวนเต็ม เช่น 31, 30 หรือ 28 เป็นต้น<br /><br />เมื่อรู้แล้วว่าวันที่สุดท้ายของเดือนนั้นๆ คือวันที่เท่าใด เราก็จะใช้การนับจำนวนแถว (Row) ที่จะแสดงวันที่ ให้เท่ากับจำนวนวันในเดือนนั้นๆ สำหรับแถวที่เกินกว่าวันที่สุดท้ายของเดือน ก็จะไม่แสดงตัวเลขใดๆ ดังนั้น จากรูปที่1 ให้เราเลือกช่วงเซลล์ A4:A34 แล้วพิมพ์สูตรดังนี้<br /><span style="color: rgb(204, 0, 0);">=IF(ROWS($4:4)>DAY(DATE($D$1-543,</span><br /><span style="color: rgb(204, 0, 0);">MATCH($B$1,$G$1:$G$12,0)+1,1)-1),"",ROWS($4:4)) </span><br /><span style="font-style: italic;">(สูตรสองแถวข้างบนนี้ให้พิมพ์ต่อกันไปเลย)</span> เสร็จแล้วกดแป้น <span style="font-weight: bold; color: rgb(204, 0, 0);">Ctrl+Enter</span> พร้อมกัน<br /><br />ถ้าคุณพิมพ์สูตรถูกต้อง ก็จะเห็นวันที่แสดงขึ้นมาในคอลัมน์ A ซึ่งเป็นวันที่ของเดือนที่คุณเลือก ให้ลองเปลี่ยนเดือนใน B1 แล้วสังเกตตัวเลขวันที่สิ้นเดือนในคอลัมน์ A<br /><br /><br /><br /><span style="color: rgb(0, 0, 153);font-size:130%;" ><span style="font-weight: bold;">2. การสร้างแบบฟอร์มที่แสดงวันที่ในแนวนอน</span></span><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoJuDuVDKJ6zSsOKLXCJ7mKFgKeQKwLDRMZ9-XxPdbG1VcyernlJJztEdegRvSl0ifmzhNyH3dmRwWar1dI5rwbeDgEykVFEjHB505FGR1pRxAV2gyyvPZG_6Q-T1xJr-uFWqKYLOAVio/s1600/Auto_Day2.jpg"><img style="cursor: pointer; width: 400px; height: 303px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoJuDuVDKJ6zSsOKLXCJ7mKFgKeQKwLDRMZ9-XxPdbG1VcyernlJJztEdegRvSl0ifmzhNyH3dmRwWar1dI5rwbeDgEykVFEjHB505FGR1pRxAV2gyyvPZG_6Q-T1xJr-uFWqKYLOAVio/s400/Auto_Day2.jpg" alt="" id="BLOGGER_PHOTO_ID_5530696025745996274" border="0" /></a><br /><span style="color: rgb(204, 0, 0);font-size:85%;" >รูปที่ 2 ตัวอย่างแบบฟอร์มที่แสดงวันที่ในแนวนอน</span><br /><br /><br />จากตัวอย่างในรูปที่2 มีแบบฟอร์มบางลักษณะ ที่ต้องการแสดงวันที่ในแนวนอน ซึ่งเราก็จะใช้หลักการเดียวกันกับการแสดงวันที่ในแนวตั้ง สูตรก็เขียนคล้ายๆ กัน เพียงแต่เปลี่ยนจากการนับจำนวนแถว (Row) มาเป็นการนับจำนวนคอลัมน์ (Column) แทน<br /><br />ดังนั้น จากตัวอย่างในรูปที่2 ให้เลือกช่วง E3:AI3 แล้วพิมพ์สูตรดังนี้<br /><span style="color: rgb(204, 0, 0);">=IF(COLUMNS($E:E)>DAY(DATE($D$1-543,</span><br /><span style="color: rgb(204, 0, 0);">MATCH($B$1,$B$15:$B$26,0)+1,1)-1),"",COLUMNS($E:E)) </span><br /><span style="font-style: italic;">(สูตรสองแถวข้างบนนี้ให้พิมพ์ต่อกันไปเลย)</span> เสร็จแล้วกดแป้น <span style="font-weight: bold; color: rgb(204, 0, 0);">Ctrl+Enter</span> พร้อมกัน<br /><br />และถ้าคุณพิมพ์สูตรถูกต้อง ก็จะเห็นวันที่แสดงขึ้นมาในแถวที่ 3 ช่วง E3:AI3 ดังรูปที่2 ซึ่งแสดงวันที่เฉพาะของเดือนที่คุณเลือก ให้ลองเปลี่ยนเดือนใน B1 แล้วสังเกตการเปลี่ยนแปลงของตัวเลขวันที่สิ้นเดือน<br /><br /><br />จากที่แนะนำมาข้างต้น ก็หวังเป็นอย่างยิ่งว่า ผู้อ่านจะสามารถนำไปประยุกต์สร้างแบบฟอร์มอัตโนมัติได้ และในโอกาสหน้า ผมจะได้นำวิธีการอื่นๆ มาแนะนำเพิ่มเติมต่อไป<br /><br /><br /><br /><hr />ครูเอกhttp://www.blogger.com/profile/01255634988258604526noreply@blogger.com1tag:blogger.com,1999:blog-6989162005462801250.post-81587218638165326992010-10-14T11:42:00.003+07:002010-10-17T22:51:28.802+07:00การแสดงข้อมูลที่ตรงตามเงื่อนไขที่ระบุ ตอนที่2หลังจากที่ได้เขียนเรื่อง <b>"การแสดงข้อมูลที่ตรงตามเงื่อนไขที่ระบุ"</b> ซึ่งเป็นโจทย์จากน้องปูไปแล้วนั้น ปรากฏว่ามีผู้อ่านท่านหนึ่ง สอบถามเพิ่มเติมเข้ามาว่า <span style="color:blue;"><b>"ถ้าเราใช้วิธีจัดเรียงข้อมูล เช่น จากน้อยไปหามาก แล้ว Copy เฉพาะบรรทัดที่ตรงกับเงื่อนไข ได้หรือไม่?"</b></span> คงจะถามประมาณว่า ไม่เห็นต้องเขียนสูตรให้ยุ่งยากเลย<br /><br />คำตอบก็คือ <b>"ได้"</b> แต่...<br /><ol><li>ในกรณีที่มีข้อมูลเพิ่มขึ้นทุกวัน เวลาจะสรุปข้อมูล ก็จะต้องทำการจัดเรียงใหม่ทุกครั้ง</li><li>ในการจะเลือกว่า ข้อมูลแถวใดตรงตามเงื่อนไข ผู้ใช้จะต้องพิจารณาเอง ซึ่งมีโอกาสดูตัวเลขผิดพลาดได้</li><li>หากมีการปรับเปลี่ยนเงื่อนไขในอนาคต จะมีผลกระทบต่อรูปแบบรายงานหรือไม่</li></ol><br /><br /><span style="color:red;"><b>ตัวอย่างเช่น</b> ถ้าวันนี้หัวหน้าต้องการดูข้อมูลของคนที่ถือครองบัตร เป็นระยะเวลาตั้งแต่ 2 ชั่วโมงขึ้นไป แต่ไม่ถึง 14 ชั่วโมง แต่วันพรุ่งนี้อาจจะอยากทราบว่า ใครถือครองบัตรตั้งแต่ 60 ชั่วโมงขึ้นไป แต่ไม่ถึง 120 ชั่วโมงบ้าง เราจะทำอย่างไร?</span><br /><br /><img src="http://www.bloggang.com/data/samroeng/picture/1233391426.jpg" /><br /><span style="color: rgb(204, 0, 0);font-size:85%;" >รูปที่ 8 เพิ่มช่องสำหรับให้ปรับเปลี่ยนเงื่อนไขได้</span><br /><br /><br />เพื่อให้ง่ายต่อการปรับเปลี่ยนเงื่อนไข ที่อาจจะมีการเปลี่ยนไปตามความต้องการของหัวหน้า ดังที่ยกตัวอย่างมาข้างต้น ผมจึงได้ปรับเปลี่ยนหน้าตาของรายงานสักเล็กน้อย โดยการแทรกแถว 2 แถว เหนือแถวที่ 3 เดิม ของชีทที่ 1 เพื่อให้มีช่องสำหรับกรอกจำนวนชั่วโมงได้ โดยให้ใส่จำนวนขั้นต่ำที่ D2 และใส่จำนวนขั้นสูงที่ D3 ดังรูปที่ 8<br /><br />เราจำเป็นต้องปรับแก้สูตรเดิมในเซลล์ E6 เพื่อให้สอดคล้องกับลักษณะของข้อมูลใหม่ ดังนี้<br /><br /><span style="color:blue;"><b>=IF(AND(D6>=(<span style="color:red;">$D$2</span>/24),D6<(<span style="color:red;">$D$3</span>/24)), MAX(E$1:E5)+1,"")</b></span><br /><br /><span style="color:red;"><b><u>อธิบายสูตร</u></b><br />โดยแทนที่เราจะกำหนด จำนวนชั่วโมงลงไปในสูตรตรงๆ เหมือนในครั้งแรก เราจะใช้วิธีใส่จำนวนชั่วโมงลงในเซลล์ต่างหาก แล้วให้สูตรมาอ่านค่าจากเซลล์นั้นอีกทีหนึ่ง ซึ่งแม้เราจะเปลี่ยนตัวเลขชั่วโมงลงไป แต่สูตรก็ยังอ้างถึงเซลล์เดิม ดังนั้น สูตรก็ยังทำงานได้ตามปกติ</span><br /><br /><br />เสร็จแล้วก็คัดลอกสูตรลงมาจนครบทุกแถวเช่นเดิม จากนั้นก็ทดลองเปลี่ยนเงื่อนไข เช่น ใส่ <b>60</b> ที่ D2 และใส่ <b>120</b> ที่ D3 แล้วดูผลการเปลี่ยนแปลงที่เกิดขึ้น<br /><br />นอกจากนั้น ถ้ายังจำได้ ก็คือว่า ผมได้มีการจัดรูปแบบเซลล์ผลลัพธ์ไว้ ว่าถ้าผลลัพธ์ช่องใด ตรงตามที่เงื่อนไขกำหนด ก็ให้แสดงผลลัพธ์เป็น <b>อักษรสีขาว บนพื้นสีแดง</b> ดังนั้น เราจึงต้องเปลี่ยนเงื่อนไขดังกล่าวด้วย เพื่อให้สอดคล้องกับลักษณะข้อมูลปัจจุบัน<br /><br />โดยทำการเลือกช่วงข้อมูล D4 ถึง D10 แล้วเข้าเมนู Format > Conditional Formatting… จากนั้นก็ให้ทำการแก้ไขสูตรเดิม ให้เป็นดังนี้<br /><br /><span style="color:blue;"><b>=AND(D6>=(<span style="color:red;">$D$2</span>/24),D6<(<span style="color:red;">$D$3</span>/24))</b></span><br /><br />แล้วคลิก OK<br /><br /><br />สำหรับหน้ารายงานในชีทที่ 2 นั้น ก็ไม่ต้องแก้ไขสูตรใดๆ เพราะสูตรที่เขียนไว้เดิมนั้น ก็ยังสามารถแสดงผลลัพธ์ได้ถูกต้อง<br /><br /><br />แต่อย่างไรก็ตาม เนื่องจากเราทำให้ในชีทที่ 1 สามารถปรับเปลี่ยนเงื่อนไขจำนวนชั่วโมงได้ ดังนั้น เวลาจะออกรายงาน หัวกระดาษก็ควรแสดงผล ให้สอดคล้องกับเงื่อนไขด้วย มิฉะนั้นก็จะแสดงข้อความเดิมๆ ตลอด (ระยะเวลาตั้งแต่ 2 ชั่วโมง แต่ไม่ถึง 14 ชั่วโมง)<br /><br /><br />ที่เซลล์ A2 ของชีทที่ 2 ให้พิมพ์สูตร ดังนี้<br /><span style="color:blue;"><b>="ระยะเวลาตั้งแต่ "<span style="color:red;">&Sheet1!D2&</span>" ชั่วโมง แต่ไม่ถึง "<span style="color:red;">&Sheet1!D3&</span>" ชั่วโมง"</b></span><br /><br /><br />โดยหลักการก็คือ เอาข้อความที่จะแสดง ไปเชื่อมกับจำนวนชั่วโมง ที่ระบุไว้ในชีทที่ 1 นั่นเอง ซึ่งจะได้ผลลัพธ์ดังรูปที่ 9<br /><br /><br /><img src="http://www.bloggang.com/data/samroeng/picture/1233391599.jpg" /><br /><span style="color: rgb(204, 0, 0);font-size:85%;" >รูปที่ 9 หัวรายงานที่แสดงข้อความตามเงื่อนไขที่เปลี่ยนไป</span><br /><br /><br />หวังว่า จากที่อธิบายมาทั้งสองตอน เกี่ยวกับเรื่องการแสดงข้อมูลที่ตรงกับเงื่อนไขที่ระบุนั้น คงพอจะทำให้ได้เห็นถึงแนวทางในการนำไปประยุกต์ใช้งานได้ ไม่มากก็น้อยนะครับ<br /><br /><br /><hr />ครูเอกhttp://www.blogger.com/profile/01255634988258604526noreply@blogger.com0tag:blogger.com,1999:blog-6989162005462801250.post-13177006253094431822010-10-14T10:41:00.005+07:002010-10-14T11:31:32.279+07:00การแสดงข้อมูลที่ตรงตามเงื่อนไขที่ระบุ ตอนที่1วันนี้ได้รับโทรศัพท์สายด่วนจากน้องปู สอบถามปัญหาเกี่ยวกับ Excel น้องปูบอกว่า <span style="color:blue;">"หัวหน้าต้องการทราบรายชื่อ ผู้ถือครองบัตรผ่านเข้า-ออก ที่มีระยะเวลาถือครอง<b>ตั้งแต่ 2 ชั่วโมงขึ้นไป แต่ไม่ถึง 14 ชั่วโมง</b> โดยที่ในปัจจุบันมีบันทึกข้อมูลการรับบัตรผ่านเข้า-ออก เป็นไฟล์ Excel อยู่แล้ว ซึ่งมีข้อมูลเป็นจำนวนมาก อยากจะเขียนสูตร เพื่อดึงเฉพาะข้อมูลที่อยู่ในช่วงเงื่อนไขมาแสดง"</span><br /><br /><br />จากการสอบถามในเบื้องต้น เกี่ยวกับลักษณะของไฟล์ข้อมูลในปัจจุบัน ผมก็ลองสร้างข้อมูลตัวอย่างคร่าวๆ (จากคำบอกเล่า) ออกมาเป็นดังรูปที่ 1<br /><br /><img src="http://www.bloggang.com/data/samroeng/picture/1233391675.jpg" /><br /><span style="color: rgb(204, 0, 0);font-size:85%;" >รูปที่ 1 แสดงตัวอย่างการเก็บข้อมูลในปัจจุบัน</span><br /><br /><br />จากรูปที่ 1 ต้องหาระยะเวลาการถือครองบัตรของแต่ละคนว่า ตั้งแต่รับบัตรไป จนถึงเวลาส่งคืน รวมเป็นระยะเวลากี่ชั่วโมง ดังนั้นที่ D4 พิมพ์สูตร <span style="color:blue;"><b>=C4-B4</b></span> หรือ <b>วันเวลาที่คืนบัตร – วันเวลาที่รับบัตร</b> นั่นเอง<br /><br /><img src="http://www.bloggang.com/data/samroeng/picture/1233391720.jpg" /><br /><span style="color: rgb(204, 0, 0);font-size:85%;" >รูปที่ 2 การจัดรูปแบบเพื่อแสดงผลลัพธ์เป็นจำนวนชั่วโมง</span><br /><br /><br />ผลลัพธ์ที่ได้จะมีรูปแบบเหมือนกับในคอลัมน์ B และ C ให้เราเข้าไปเปลี่ยนรูปแบบเซลล์ เพื่อให้แสดงเฉพาะ จำนวน <b>ชั่วโมง : นาที</b> เท่านั้น โดยการคลิกขวาที่ D4 เลือก Format cells… แล้วจัดรูปแบบเป็น <b><span style="color:red;">[</span>h<span style="color:red;">]</span>:mm</b> ดังรูปที่ 2<br /><br />เสร็จแล้วก็คัดลอกสูตรลงมาจนครบทุกบรรทัด จะได้ผลลัพธ์ดังรูปที่ 3<br /><br /><br /><img src="http://www.bloggang.com/data/samroeng/picture/1233391760.jpg" /><br /><span style="color: rgb(204, 0, 0);font-size:85%;" >รูปที่ 3 แสดงระยะเวลาถือครองบัตรของแต่ละคน</span><br /><br /><br />เพื่อให้เป็นที่สังเกตชัดขึ้น ว่าใครมีระยะเวลาถือครองบัตร <b>ตั้งแต่ 2 ชั่วโมงขึ้นไป แต่ไม่ถึง 14 ชั่วโมง</b> ตามเงื่อนไขที่หัวหน้ากำหนด ก็ให้กำหนดรูปแบบผลลัพธ์ที่ตรงตามเงื่อนไข โดยเปลี่ยนเป็น <b>พื้นสีแดง อักษรสีขาว</b> ดังนี้<br /><br /><img src="http://www.bloggang.com/data/samroeng/picture/1233391799.jpg" /><br /><span style="color: rgb(204, 0, 0);font-size:85%;" >รูปที่ 4 การจัดรูปแบบตามเงื่อนไข</span><br /><br /><br /><b>1.</b> เลือกช่วงข้อมูล D4 ถึง D10<br /><b>2.</b> คลิกที่เมนู Format > Conditional Formatting…<br /><b>3.</b> ในช่อง Condition 1 เลือก Formula Is<br /><b>4.</b> ในช่องว่างๆ ทางขวา พิมพ์สูตร <span style="color: rgb(255, 0, 0);">**</span><br /><span style="color:blue;"><b>=AND(D4>=(2/24),D4<(14/24))</b></span><br /><br /><b>5.</b> คลิกที่ปุ่ม Format<br /><b>6.</b> ในแถบ Font ให้เลือกสีตัวอักษรเป็นสีขาว<br /><b>7.</b> ในแถบ Patterns ให้เลือกสีพื้นเป็นสีแดง แล้วคลิก OK เพื่อกลับมาหน้าเดิม<br /><b>8.</b> คลิก OK อีกครั้งหนึ่ง จะได้ผลลัพธ์ดังรูปที่ 5<br /><br /><img src="http://www.bloggang.com/data/samroeng/picture/1233391841.jpg" /><br /><span style="color: rgb(204, 0, 0);font-size:85%;" >รูปที่ 5 ผลลัพธ์หลังจากกำหนดรูปแบบเซลตามเงื่อนไข</span><br /><br /><br /><span style="color:red;"><b>** <u>หมายเหตุ</u></b><br />เนื่องจาก 1 วันมี 24 ชั่วโมง ดังนั้น 2 ชั่วโมงจึงเท่ากับ 2/24 และ 14 ชั่วโมงจึงเท่ากับ 14/24 นั่นเอง</span><br /><br /><br />ถึงแม้เราจะเพิ่มความเด่นให้กับเซลล์ที่ตรงกับเงื่อนไขแล้วก็ตาม แต่น้องปูบอกว่า หัวหน้ายังต้องการดูรายชื่อ และรายละเอียดอื่นๆ ของคนที่อยู่ในเงื่อนไขด้วย ซึ่งถ้าดูจากรูปที่ 5 ก็หมายถึงข้อมูลของ นายสมชาย นายสมหวัง และนายชำนิ นั่นเอง<br /><br /><br />เพื่อที่จะสามารถ แยกเฉพาะรายการที่ตรงตามเงื่อนไขออกมาได้ เราจะต้องหาวิธีที่จะระบุ ว่าข้อมูลใดบ้างที่ต้องการ หรือข้อมูลใดบ้างที่ไม่ต้องการ โดยใช้วิธีการต่อไปนี้<br /><br /><b>1.</b> ที่เซล E1 ใส่เลข 0 (ศูนย์)<br /><b>2.</b> ที่เซล E4 พิมพ์สูตร<br /><span style="color:blue;"><b>=IF(AND(D4>=(2/24),D4<(14/24)), MAX(E$1:E3)+1, "")</b></span><br /><br /><b>3.</b> เสร็จแล้วทำการคัดลอกสูตรลงมา จนครบข้อมูลทุกบรรทัด จะได้ผลลัพธ์ดังรูปที่ 6<br /><br /><img src="http://www.bloggang.com/data/samroeng/picture/1233391890.jpg" /><br /><span style="color: rgb(204, 0, 0);font-size:85%;" >รูปที่ 6 การเขียนสูตรเพื่อระบุข้อมูลเฉพาะแถวที่ต้องการ</span><br /><br /><br /><span style="color:red;"><u><b>อธิบายสูตร </b></u><br />ในสูตรข้างต้น หมายความว่า ถ้าผลลัพธ์ในคอลัมน์ D แถวใดๆ ตรงตามเงื่อนไขที่ระบุ (มากกว่าหรือเท่ากับ 2 ชม. และน้อยกว่า 14 ชม.) ก็ให้ค้นหาตัวเลขที่มากที่สุด ในคอลัมน์ E ตั้งแต่ E1 จนถึงแถวก่อนหน้า แล้วบวกเพิ่มค่าอีก 1 แต่ถ้าไม่ตรงตามเงื่อนไข ก็ไม่ต้องใส่ค่าใดๆ</span><br /><br /><br />ต่อไป เราก็จะดึงข้อมูลเฉพาะแถวที่มีตัวเลขในคอลัมน์ E ไปแสดงเป็น Report ในชีทใหม่ ผมจึงไปสร้างรูปแบบรายงานไว้ในชีทที่ 2 เพื่อจะใช้สรุปข้อมูลที่ต้องการ ดังรูปที่ 7<br /><br /><img src="http://www.bloggang.com/data/samroeng/picture/1233391936.jpg" /><br /><span style="color: rgb(204, 0, 0);font-size:85%;" >รูปที่ 7 แสดงตัวอย่างรายงานที่ต้องการ</span><br /><br /><br />หลังจากสร้างหัวรายงาน ดังในรูปที่ 7 แล้ว เราจะเขียนสูตรเพื่อดึงข้อมูล เฉพาะแถวที่ต้องการจากชีทที่ 1 มาแสดง โดยการ<br /><br /><b>1.</b> ที่เซลล์ A5 ของชีทที่ 2 พิมพ์สูตร<br /><span style="color:blue;"><b>=IF(ROWS($5:5)<=MAX(Sheet1!$E:$E), LOOKUP(ROWS($5:5), Sheet1!$E:$E, Sheet1!A:A),"")</b></span><br /><br /><b>2.</b> แล้วคัดลอกสูตรไปยัง B5, C5 และ D5 ตามลำดับ<br /><br /><b>3.</b> แต่รูปแบบผลลัพธ์ที่ออกมาอาจจะดูแปลกๆ ไม่ต้องตกใจครับ เราสามารถเข้าไปกำหนดรูปแบบใหม่ ให้เหมือนกับในชีท 1 โดยคอลัมน์ B และ C กำหนดรูปแบบเป็น <b>d/m/yyyy h:mm</b> และคอลัมน์ D กำหนดรูปแบบเป็น <b>[h]:mm</b><br /><br /><b>4.</b> เมื่อได้รูปแบบเซลล์ผลลัพธ์ตามต้องการแล้ว ก็ทำการคัดลอกสูตรจากบรรทัดที่ 5 (A5:D5) ลงมาข้างล่าง จำนวนบรรทัดไม่น้อยกว่า จำนวนข้อมูลที่คาดว่าจะมี <span style="font-style: italic; color: rgb(153, 0, 0);"> (เกินไว้ไม่เป็นไรครับ เพราะสูตรดังกล่าวจะแสดงข้อมูลเท่าที่มีข้อมูลจริงเท่านั้น)</span> ก็จะได้ผลลัพธ์ดังในรูปที่ 7 ซึ่งสามารถสั่ง Print ไปส่งหัวหน้าได้เลย<br /><br /><br /><span style="color:red;"><u><b>อธิบายสูตร </b></u><br />ในสูตรข้างต้น หมายความว่า ถ้าจำนวนบรรทัดที่แสดงรายงานนั้น ยังน้อยกว่าหรือเท่ากับค่าสูงสุด (จำนวนรายการที่พบ) ในคอลัมน์ E ของชีท1, ก็ให้แสดงข้อมูลเฉพาะแถวที่ตรงกับตัวเลขในคอลัมน์ E ของชีท1 โดยเลือกว่าจะเอาคอลัมน์ไหน (จากชีท 1) มาแสดง </span><br /><br /><br />เอาล่ะ..! น้องปูก็ได้งานไปเรียบร้อยแล้ว แต่สำหรับท่านผู้อ่าน ลองเอาไปประยุกต์ดูว่า แนวคิดแบบนี้ จะสามารถนำไปปรับใช้กับลักษณะงานของคุณได้อย่างไรบ้าง?<br /><br /><br /><hr />ครูเอกhttp://www.blogger.com/profile/01255634988258604526noreply@blogger.com0