Quantcast
Channel: Date Functions – inwexcel
Viewing all 12 articles
Browse latest View live

การทำงานเกี่ยวกับวันและเวลา (Date & Time) ใน Excel

$
0
0

เรื่องของวันและเวลา

date & time

วันและเวลาเป็นสิ่งที่เราอาจต้องใช้มันในการทำงานอยู่บ่อยๆ ใน Excel เช่น หากว่าเราเอาวันที่สองวันมาลบกัน เราก็จะรู้ว่าทั้งสองวันห่างกันกี่วัน แต่จริงๆแล้ว Excel มันทำงานยังไงกันแน่?? ทำไมเอาวันเวลามาลบกันได้นะ??

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

Excel มองวันและเวลาเป็นตัวเลขธรรมดาๆ

จริงๆ แล้ว Excel ทำงานเกี่ยวกับวันเวลาด้วยแนวคิดที่ง่ายมากๆ ครับ นั่นคือ มัน แทนวันที่ 1/1/1900 (1 มกราคม คศ. 1900) ด้วยเลข 1 แล้วมันก็แทนวันที่ 2/1/1900 ( 2 มกราคม คศ. 1900) ด้วยเลข 2.. ทำอย่างนี้ไปเรื่อยๆ

โดย Excel จะเทียบปฏิทินกับตัวเลขที่เรียงไล่ลำดับซึ่งเรียกว่า Serial Number ตัวอย่างเช่น

วันที่   คือเลข  หมายเหตุ
1/1/1900 => 1
2/1/1900 => 2
3/1/1900 => 3
4/1/1900 => 4
30/1/1900 => 30
31/1/1900 => 31
ขึ้นเดือนใหม่… 1/2/1900 => 32 แม้ข้ามเดือน ก็จะไล่เลขต่อไปเรื่อยๆ…
2/2/1900 => 33
มายุคปัจจุบัน… 20/11/2013 => 41598
21/11/2013 => 41599

ในทำนองเดียวกัน ถ้าเลขนั้นลงละเอียดถึงระดับของเวลา (เช่น 14 นาฬิกา 29 นาที 30 วินาที) การแทนเลขจะแทนด้วยทศนิยมแทน
โดยเลข 0.5 คือเวลาเที่ยงตรง (เที่ยงวัน 12:00) ดังนั้น หากเราเห็น เลข 1.5 มันคือวันที่  1/1/1900 เวลา 12:00:00 

พอเริ่มเห็นภาพแล้วใช่มั๊ยครับ เรามาลุยต่อกันเลยครับ 

สมการง่ายๆ

Date part + Time part = จำนวนเต็ม + ทศนิยม
วันที่ เวลา คือเลข  หมายเหตุ
1/1/1900 0:00 น. => 1.00  0 คือ เวลา 0.00 น.
1/1/1900 12:00 น. => 1.50 0.5 คือเที่ยงวัน (12:00) เพราะ 0.5 วัน x 24 ชม./วัน = 12 ชม.
1/1/1900 18:00 น. => 1.75 0.75 คือ 6 โมงเย็น (18:00)  เพราะ 0.75 วัน x 24 ชม./วัน = 18 ชม.
2/1/1900 0:00 น. => 2.00
1/1/1900 2:24 น. => 1.10 0.1 คือ 2 ชม. 24 นาที เพราะ 0.1 วัน x 24 ชม./วัน = 2.4 ชม. => แบ่งเป็น 2 ชม. + 0.4 ชม.
และ 0.4 ชม. คือ 24 นาที เพราะ 0.4 ชม. X 60 นาที/ชม. = 24 นาที
รวมเป็น 2 ชม. 24 นาที

อยากรู้ว่าวันที่ไหนคือเลขอะไร

ให้ลองเปลี่ยน Format จาก Date => General หรือ Number ดูก็จะรู้ครับ

การคำนวณเกี่ยวกับวันที่

เมื่อเรารู้อย่างนี้แล้ว เวลาเราเอาวันที่ลบกัน เราจึงรู้ระยะห่างของวันสองวันได้ เช่น

  • A1 = 3/11/2013 => คือเลข 41581
  • A2 =30/10/2013 => คือเลข 41577
  • A1-A2 = 4
    • เพราะเปรียบเสมือน =41581-41577 นั่นเอง

ในทางกลับกัน หากเราเอาเลข 10 ไปบวกด้วยค่าในช่อง A1 เช่น

  • ใน A3 ใส่ว่า =A1+10 =>จะได้ 13/11/2013
    • เพราะเป็นเหมือนการบวกค่า 41581 ด้วย 10 ได้ 41591
    • จากนั้น Excel ก็จะไปเทียบกับปฏิทินของมันว่าคือวันที่เท่าไหร่ ซึ่งก็คือ 13/11/2013 นั่นเอง

ฟังก์ชั่นเกี่ยวกับวันที่ที่น่าสนใจ

สมมติว่าช่อง A1 มีค่าเป็น 24/11/2013, สมมติว่าช่อง A2 มีค่าเป็น 15/8/2010

  • DATE ใช้ประกอบร่าง ตัวเลขปี เลขเดือน เลขวัน ให้กลายเป็นรูปแบบของวันที่
    DATE(year, month, day)

เช่น =DATE(2013,11,24) => 24/11/2013 (หรือ 41602 นั่นเอง)

Tips : ตัวนี้เราสามารถใส่ day เป็นเลขติดลบ หรือ เลขที่มากกว่า 31 วัน ได้ด้วยนะครับ วันที่มันจะเลื่อนกลายเป็นของเดือนอื่นไป และที่เจ๋งคือ ถ้าเราใส่เป็นเลข 0 มันจะกลายเป็นวันสุดท้ายของเดือนก่อนครับ !! => ตัวอย่าง http://www.inwexcel.com/last-day-of-month/

  • YEAR ใช่หาว่าเลขวันที่ที่กำหนด อยู่ในปีที่เท่าไหร่
    YEAR(serial_number)

    เช่น = YEAR(A1) จะได้ค่า 2013

  • MONTH ใช่หาว่าเลขวันที่ที่กำหนด อยู่ในเดือนที่เท่าไหร่
    MONTH(serial_number)

    เช่น = MONTH(A1) จะได้ค่า 11

  • DAY ใช่หาว่าเลขวันที่ที่กำหนด อยู่ในวันที่เท่าไหร่
    DAY(serial_number)

    เช่น = DAY(A1) จะได้ค่า 24

  • EDATE ใช้บวกจำนวนเดือนเพิ่มเข้าไปในวันที่ที่กำหนดแบบเดือนชนเดือน เช่น
    EDATE(start_date,months)

    ให้ C1 = 31/01/2013

    • EDATE(C1,1) => 28/2/2013 (ไม่มีวันที่ 31/2/2013 จึงปรับเป็นวันสิ้นเดือนให้)
    • EDATE(C1,2) => 31/3/2013
    • EDATE(C1,3) => 30/4/2013 (ไม่มีวันที่ 31/4/2013 จึงปรับเป็นวันสิ้นเดือนให้)
    • EDATE(C1,4) => 31/5/2013
    • EDATE(C1,-1) => 31/12/2012 (ติดลบแล้วจะถือว่าย้อนเวลากลับไปในอดีต)
  • NETWORKDAYS  ใช้หาว่าวันสองวันทีกำหนดห่างกันเท่าไหร่โดยไม่นับวันหยุด (สามารถเพิ่มวันหยุดพิเศษที่ไม่ใช่เสาร์อาทิตย์ได้)
    NETWORKDAYS(start_date, end_date, [holidays]) 
    *ตัว Holidays เราสามารถเลือกเป็นช่วงวันที่ที่เป็นวันหยุดพิเศษได้ ถ้าไม่ใส่ ก็จะถือว่าหยุดแต่เสาร์อาทิตย์

    เช่น D1= 28/2/2013, D2 = 4/3/2013
    =NETWORKDAYS( D1,D2) = 3 เพราะ นับ 28 กพ (พฤหัส) , นับ 1 มีนา (ศุกร์) , ไม่นับ 2 มีนา (เสาร์), ไม่นับ 3 มีนา (อาทิตย์), นับ 4 มีนา (จันทร์)

  • DATEDIF ดูได้ที่หน้า เจาะลึกฟังก์ชั่น DATEDIF

เป็นอย่างไรบ้างครับกับการทำงานเกี่ยวกับวันที่และเวลาใน Excel หากอ่านแล้วยังสงสัยตรงไหนก็ตามได้ตลอดเลยนะครับ (มาคุยกันใน Facebook ก็ได้ครับ)


เจาะลึกฟังก์ชั่น DATEDIF

$
0
0

DATEDIF ไว้ใช้ทำอะไร?

DATEDIF เป็นฟังก์ชั่นเกี่ยวกับวันที่ ใช้หาว่าวันสองวันที่กำหนด ห่างกันกี่วัน กี่เดือน หรือ กี่ปี (เราเลือกได้)

ซึ่งฟังก์ชั่นนี้ใน Excel ไม่มี Help ให้นะครับ แต่ไม่ต้องกลัว ผมกำลังจะแนะนำวิธีการใช้งานให้เอง (หากใครยังไม่รู้ว่า Excel ทำงานกับวันที่ยังไง เชิญอ่าน การทำงานเกี่ยวกับวันและเวลา (Date & Time) ใน Excel ก่อนเพื่อปรับพื้นฐานจะดีมากๆ ครับ)

วิธีการใช้ฟังก์ชั่น

DATEDIF( start_date, end_date, interval )
  • DATEDIF( วันเริ่ม, วันจบ, รูปแบบการวัดช่วงเวลา )
  • โดย interval (รูปแบบการวัดช่วงเวลา) คือ
Interval Explanation
Y ปี (แบบครบปี)
M เดือน (แบบครบเดือน)
D วัน
MD วัน (ไม่สนใจ เดือน ปี)
YM เดือน (ไม่สนใจวัน ปี)
YD วัน (ไม่สนใจปี)

เช่น =DATEDIF(A1,A2,”M”) เป็นการหาว่า วันที่ใน A1 และ A2 ห่างกันกี่เดือนแบบครบเดือน

ค่าที่ได้จาก DATEDIF กรณีใช้โหมด Interval ต่างกัน

start date 1/1/2012 1/1/2012 1/1/2012 1/1/2012 1/1/2012
Interval end date 31/12/2012 1/1/2013 1/8/2013 1/8/2014 31/12/2013
ปี (นับแบบต้องครบปี) Y 0 1 1 2 1
เดือน (ต้องครบเดือน) M 11 12 19 31 23
วัน (เหมือนเอาวันที่ลบกัน) D 365 366 578 943 730
วัน (ไม่สนใจ เดือน ปี) MD 30 0 0 0 30
เดือน (ไม่สนใจวัน ปี) YM 11 0 7 7 11
วัน (ไม่สนใจปี) YD 365 0 213 213 365

ข้อสังเกตุ วิธีดูค่าจาก DATEDIF

  • คอลัมน์ 1/1/2012 – 31/12/2012
    • ถือว่ายังไม่ครบเต็มปี เวลา Interval เป็น “Y” จึงได้ค่า 0
    • และยังไม่เต็ม 12 เดือน (ได้ 11 เดือน ตาม “M”) เพราะยังขาดไปอีกวันหนึ่งจึงครบปีจริงๆ
    • หากดูจากคอลัมน์ 1/1/2012 – 1/1/2013 จะเห็นว่าครบปีจริงๆ จะเป็นอย่างไร
  • คอลัมน์ 1/1/2012 – 1/8/2013
    • ห่างกัน 578 วัน ตามปฏิทินปกติ (“D”)
    • แต่ห่างกัน 0 วันแบบ “MD” เพราะเป็นวันที่เดียวกัน (ไม่สนเดือนปี)
    • แต่แบบ “YD” ห่างกัน 213 วัน เช่นเดียวกับ 1/8/2014 เพราะนับแบบสนใจเดือนแต่ไม่สนใจปี

หาวันสุดท้ายของเดือนว่าเป็นวันที่เท่าไหร่

$
0
0

calendar_icon1

เราสามารถหาวันสุดท้ายของเดือน ว่าเป็นวันที่เท่าไหร่ได้ง่ายๆ

มี 2 วิธี คือ

1. การหาวันแรกของเดือนถัดไป แล้วลบออก 1 
เช่น จะหาวันสุดท้ายของเดือนกุมภาพันธ์ของปี 2014

= (วันที่ 1 ของเดือนมีนาคม 2014 )- 1

=DATE(ปี,เดือน,วัน)-1

=DATE(2014,3,1)-1

= 28/02/2014

2. ใส่วันของเดือนถัดไปเป็น 0 ในฟังก์ชั่น Date เลย  

=DATE(2014,3,0)

= 28/02/2014

Tips : Day ในฟังก์ชั่น DATE เราใส่วันติดลบ หรือเกิน 31 ก็ได้นะครับ !! (มันจะเลื่อนวันไปเดือนถัดไปเอง) และอย่าลืมว่าใส่ 0 ก็ได้ผลอย่างที่บอก คือจะได้วันสุดท้ายของเดือนก่อนมานั่นเอง

ใครงงว่าทำแบบนี้ได้ยังไง ไปอ่านความรู้พื้นฐานได้ที่ การทำงานเกี่ยวกับวันและเวลา (Date & Time) ใน Excel

เล่นแร่แปรสูตร : การแปลงวันที่ Text ให้เป็นวันที่ Date

$
0
0

ปกติแล้ว Excel จะมีฟังก์ชั่นที่ชื่อว่า DATEVALUE ในการเปลี่ยนวันที่ในรูปแบบ Text ให้กลายเป็นรูปแบบ Date จริงๆ ที่เป็นตัวเลขอยู่แล้ว… แต่ฟังก์ชั่นนี้มีข้อจำกัดอยู่มาก คือ มันจะ Convert Text ได้แค่ในรูปแบบที่มันรู้จักเท่านั้น (ซึ่งมีไม่กี่แบบ คล้ายๆตอนที่เราพิมพ์ลงไปใน cell ปกติ แหละครับ ว่า 31/1/2014 หรือ 31-Jan-2014 หรือ 31-01-2014 แล้ว excel มันจะฉลาดแปลงเป็นวันที่ได้เอง)

ดังนั้น ถ้าหากเรามี Date ในรูปแบบแปลกไปจากที่มันรู้จัก เช่น 31012014 หรือ 20140131 อะไรแบบนี้ ฟังก์ชั่นนี้ก็จะเอ๋อไปเลย

convert_text_to_date

วันนี้ผมมีวิธีแก้มาแนะนำหลากหลายวิธีด้วยกันครับ ลองติดตามดูได้

วิธี 1 ตัด Text ออกเป็นส่วนๆ แล้วเชื่อม (ยาก)

Concept : ใช้พวกฟังก์ชั่น LEFT RIGHT MID หรือ Text to Column ช่วยตัดวันเดือนปีแยกออกจากกัน แล้วค่อยมาเชื่อมกันอีกทีด้วยฟังก์ชั่น DATE

สมมติว่า ต้นฉบับ อยู่ในช่อง A1  คือ “20140131” (ปีเดือนวัน)

  • ตัดปี = LEFT(A1,4)
  • ตัดเดือน = MID(A1,5,2)
  • ตัดวัน =RIGHT(A1,2)
  • จับรวมด้วย DATE (year,month,day)
    • =DATE(LEFT(A1,4),MID(A1,5,2),RIGHT(A1,2))

สมมติว่า ต้นฉบับ อยู่ในช่อง A1  คือ “31012014” (วันเดือนปี)

  • ตัดวัน =LEFT(A1,2)
  • ตัดเดือน = MID(A1,3,2)
  • ตัดปี = RIGHT(A1,4)
  • จับรวมด้วย DATE (year,month,day)
    • =DATE(RIGHT(A1,4),MID(A1,3,2),LEFT(A1,2))

วิธี 2 แปลง Format ของ Text ให้ DATEVALUE รู้จัก (ง่าย)

ในเมื่อฟังก์ชั่น DATEVALUE มันรู้จักรูปแบบแค่บางอย่าง เราก็ช่วยมันหน่อย โดยใช้ฟังก์ชั่น TEXT ช่วยแปลง FORMAT ให้

สมมติว่า ต้นฉบับ อยู่ในช่อง A1  คือ “20140131” (ปีเดือนวัน)

  • ใช้ TEXT แปลง =TEXT(A1,”0000-00-00″)  <= ปี 4 หลัก เดือน 2 หลัก วันที่ 2 หลัก…
  • ใช้ DATEVALUE แปลงค่าให้เป็น Date จริงๆ =DATEVALUE(TEXT(A1,”0000-00-00″))
  • อาจได้ค่าออกมาเป็นตัวเลขธรรมดา ให้เปลี่ยน Format เป็น Date ก็จะเห็นเป็นวันที่ครับ

สมมติว่า ต้นฉบับ อยู่ในช่อง A1  คือ “31012014” (วันเดือนปี)

  • ใช้ TEXT แปลง =TEXT(A1,”00-00-0000″) <= วันที่ 2 หลัก เดือน 2 หลัก ปี 4 หลัก
  • ใช้ DATEVALUE แปลงค่าให้เป็น Date จริงๆ =DATEVALUE(TEXT(A1,”00-00-0000″))
  • อาจได้ค่าออกมาเป็นตัวเลขธรรมดา ให้เปลี่ยน Format เป็น Date ก็จะเห็นเป็นวันที่ครับ

เทคนิคการแปลงวันที่จาก พ.ศ. เป็น ค.ศ. แบบง่ายๆ ใน Excel

$
0
0

บางครั้งเวลาเรากรอกข้อมูลใน Excel โดยตั้งใจกรอกเป็นวันที่ 31 มกราคม ปี พ.ศ. 2557 เราก็เลยกรอกลงไปว่า 31/01/2557
แต่สิงที่ Excel เข้าใจ คือ มันจะมองว่าเป็น ค.ศ. 2557 (หรือ พศ. 3100 )ต่างหาก!! ไม่ใช่ พ.ศ. 2557 อย่างที่เราอยากได้ (อันนี้ผิดในแง่ข้อมูลเลยนะครับ ไม่ใช่เรื่องของ Format)

convertdate

ซึ่งบางคนคิดว่าไม่เห็นเป็นไร เราเข้าใจว่าเป็น พศ. 2557 เองก็ได้ อันนี้เป็นความคิดที่ไม่ถูกต้องครับ เพราะทุกอย่างจะผิดเพี้ยนไปหมด ทั้งวันที่นี้คือวันจันทร์ อังคาร พุธ หรืออะไรก็จะผิดหมด แถมบางปีมี 29 กพ. โผล่มาอีกทั้งๆที่ปีนั้นถ้าอยู่ถูกปฏิทินจะมีแค่ 28 กพ.  ดังนั้นการแก้วันที่ให้ถูกปฏิทินจึงเป็นเรื่องสำคัญมาก

บางทีเราอาจมี Input ทำนองนี้อยู่มากมาย (เช่น Import มาจาก Database อื่นแล้วผิด Format มาเลย) จะไล่แก้ทีละอันก็ใช่เรื่อง… วันนี้ผมเลยมีวิธีแปลงข้อมูลพวกนี้ให้ถูกต้อง โดยแก้ปัญหา  พศ. กับ คศ. แบบง่ายๆ มาให้ครับ

จริงๆทำได้หลายวิธีมาก ผมขอแนะนำซัก 2 แบบละกัน

วิธีแรก ใช้ฟังก์ชั่น EDATE มาช่วยครับ (ผมแนะนำวิธีนี้ เพราะง่ายมาก)

สมมติ ในช่อง A1 เป็น 31/01/2557 (excel เข้าใจว่าเป็น คศ. 2557 ) แล้วเราจะแปลงให้เป็น 31/01/2014 โดยใช้สูตรมาช่วย มาดูกันครับว่าทำยังไง

วิธีคือ =EDATE(ช่องวันที่,-543*12)

เดี๋ยวผมจะอธิบายว่าทำไมเขียนแบบนี้ครับ

ก่อนอื่นต้องรู้จักฟังก์ชั่น EDATE ซะก่อนครับ… คร่าวๆคือมันสามารถเพิ่ม/ลด วันเข้าไปในวันที่ที่เรากำหนด โดยมีหน่วยเป็นเดือน โดยไม่สนว่าแต่ละเดือนจะมีกี่วัน เช่นจะมี 28, 29, 30 หรือ 31 วันก็ไม่สน

วิธีการเขียนสูตร EDATE

= EDATE(start_date,months)

เช่น

ตัวอย่างการทำงานของฟังก์ชั่น EDATE

ให้ A1 = 31/01/2013

  • ถ้าใส่เลข months เป็นบวก มันจะเพิ่มเวลาไปในอนาคต เท่ากับจำนวน months
    • EDATE(A1,1) => 28/2/2013 (ไม่มีวันที่ 31/2/2013 จึงปรับเป็นวันสิ้นเดือนให้)
    • EDATE(A1,2) => 31/3/2013
    • EDATE(A1,3) => 30/4/2013 (ไม่มีวันที่ 31/4/2013 จึงปรับเป็นวันสิ้นเดือนให้)
    • EDATE(A1,4) => 31/5/2013
  • ถ้าใส่เลข months ติดลบ มันจะย้อนอดีตเท่ากับจำนวน months
    • EDATE(A1,-1) => 31/12/2012
    • EDATE(A1,-2) => 30/11/2012 (ไม่มี 31/11/2012)

ใช้ EDATE แปลงจาก พ.ศ. เป็น ค.ศ.

ที่นี้ถ้าเลขต้นฉบับ สมมติช่อง C1 เป็น  31/01/2557 แล้วเราจะทำให้เป็น 31/01/2014
แปลว่ามันต้องย้อนอดีตไป 543 ปี => นั่นคือ 543*12 เดือน

ดังนั้นเราจะเขียนสูตรว่า

= EDATE(C1,-543*12) นั่นเองครับ (ติดลบ เพราะเลขต้องน้อยลง)

เท่านี้ก็จะได้เป็นวันที่ 31/01/2014 แล้ว (ถ้าเห็นเป็นเลขหลักหมื่นให้ลองเปลี่ยน Format เป็น Date ดูครับ)

ข้อสังเกต!! วิธีนี้กรณีของวันที่ 29 กพ. เช่น เดิมใส่เป็น 29/02/2556 ถ้าใช้สูตรนี้แปลงจะได้เป็น 28/02/2013 ซึ่งต่างจากวิธีล่างที่่จะได้วันที่ 01/03/2013 แทน  ซึ่งผมมองว่าวิธีบนถูกต้องมากกว่าครับ เพราะเป็นเดือนเดียวกันด้วย แต่ก็แล้วแต่สถานการณ์นะครับ

วิธีที่ 2 ใช้ฟังก์ชั่น DATE, YEAR, MONTH, DAY มาช่วย

วิธีนี้เป็นวิธีที่เห็นได้ทั่วไป ซึ่งผมมองว่าค่อนข้างยุ่ง  เพราะต้องเขียนเยอะ คือ แตกปี เดือน วันออกมา แล้วลบที่ปีไปด้วยเลข 543

นั่นคือ

  • ปี = YEAR(ช่องวันที่)-543
  • เดือน = MONTH(ช่องวันที่)
  • วัน = DAY(ช่องวันที่)
  • แล้วจับรวมกันด้วยฟังก์ชั่น DATE(year,month,day) จะได้ว่า
    • =DATE(YEAR(ช่องวันที่)-543,MONTH(ช่องวันที่),DAY(ช่องวันที่))
    • ถ้าเห็นเป็นเลขหลักหมื่นให้ลองเปลี่ยน Format เป็น Date ดูครับ

ข้อสังเกต!! วิธีนี้กรณีของวันที่ 29 กพ. เช่น เดิมใส่เป็น 29/02/2556 ถ้าใช้สูตรนี้แปลงจะได้เป็น 01/03/2013 แทน ซึ่งต่างจากวิธีบน ที่่จะยังได้วันที่ 28/02/2013 ซึ่งผมมองว่าวิธีบนถูกต้องมากกว่าครับ เพราะเป็นเดือนเดียวกันด้วย แต่ก็แล้วแต่สถานการณ์นะครับ

แฉ 10 ความลับของ Excel ที่คุณอาจยังไม่เคยรู้มาก่อน!

$
0
0

Excel นั้นยิ่งใช้ ยิ่งศึกษา ยิ่งพบความน่าพิศวง… เพราะมันมีอะไรหลายอย่างมากๆ ที่ถูกเก็บซ่อนเอาไว้ หรือ ไม่ได้แสดงให้เห็นอย่างเด่นชัดนัก วันนี้ผมจะขอมาแฉ 10 ความลับของ Excel ที่คุณอาจยังไม่เคยรู้มาก่อน! เอาให้เพื่อนๆ ของคุณงงไปเลยว่าคุณรู้เรื่องพวกนี้ได้ยังไง

1. ใช้ Space เป็นเครื่องหมายเชื่อม Cell Reference ก็ได้

เพื่อนๆ คงรู้จักตัวเชื่อม Cell Reference  อย่าง colon (:) ที่ใช้เชื่อมข้อมูลเป็นช่วง หรือตัว comma (,) ที่ใช้เชื่อม Cell ที่ไม่ต่อเนื่องกัน เป็นอย่างดีอยู่แล้ว แต่ผมพนันเลยว่า หลายๆ คนคงไม่รู้จักตัวเชื่อมที่เป็นช่องว่าง (space) แน่นอน

ถ้าเปรียบ comma (,) เป็นตัวเชื่อมในวิชาตรรกศาสตร์หรือเซ็ตแล้ว มันจะคล้ายเครื่องหมาย union เพราะเป็นการเชื่อม Range หลายๆ อันเข้าด้วยกัน แต่เจ้าตัวเชื่อมที่เป็นช่องว่าง (space) นั้น ทำหน้าที่เป็นเครื่องหมาย intersect นั่นคือจะให้ผลลัพธ์ที่เป็นช่องที่ซ้อนทับกัน ของ Range ที่เราเลือกไว้นั่นเอง (Intersection)

excel-secret-8

ตัวอย่างเช่น =B1:C15 A7:E8 (มี space คั่น) จะให้ผลเป็น Range B7:C8 ที่ระบายสีตามรูปนั่นเอง (อาจจะเอาไปใช้ต่อได้ เช่น SUM เป็นต้น)

2. อ้างอิงข้อมูลจากหลายชีทด้วย 3D Reference

รู้หรือไม่ว่าเราสามารถอ้างอิง Cell Reference แบบ 3 มิติได้ นั่นคือ เป็นการอ้างอิง Cell Reference แบบทะลุข้าม Worksheet นั่นเอง ทำยังไงมาดูกันครับ

excel 3d cell reference

แทนที่จะใส่การอ้างอิงไปที่ชีทเดี่ยวๆ ตามการอ้างอิงปกติ (เช่น =Sheet1!B2 ) เราสามารถใส่ชื่อชีทแบบเป็นช่วงได้
โดยใส่ชีทที่เป็นจุดเริ่มต้น ตามด้วยเครื่องหมาย colon (:) และ ตามด้วยชีทที่เป็นจุดสิ้นสุดลงไปได้เลย เช่น

=SUM(Sheet1:Sheet3!B2:D4)

เพียงเท่านี้ มันก็จะทำการบวกข้อมูลช่อง B2:D4 เริ่มจาก Sheet1 ไปจนถึง Sheet3 นั่นคือจะรวม Sheet1, Sheet3 และ Sheet ทุกอันที่คั่นอยู่ระกว่างทั้งสอง Sheet ด้วย! คำว่า “Sheet ทุกอันที่คั่นอยู่ระกว่างทั้งสอง Sheet” หมายความว่า หากในอนาคตเรามีการเพิ่ม Sheet แล้วย้าย Sheet นั้นมาอยู่ระหว่าง Sheet 1 กับ 3 นี้ มันก็จะถูกบวกเข้าไปในผลรวมไปด้วย!!

ฟังก์ชั่นที่สามารถใช้ 3D-Reference ได้ ดูได้ที่นี่ =>
http://office.microsoft.com/en-001/excel-help/create-a-3-d-reference-to-the-same-cell-range-on-multiple-worksheets-HP010102346.aspx

3. Paste เป็น Value กับ Format พร้อมกันได้ง่ายๆ

หากเราต้องการ Copy ข้อมูลที่เป็นสูตรเพื่อที่จะมา Paste ลงอีกที่นึงเป็น Value กับ Format พร้อมกัน ปกติเราจะทำได้อย่างมากคือ Paste เป็น Value ทีนึง และ Paste Format อีกทีนึง ไม่สามารถทำพร้อมกันได้ และบางทีก็ชอบมีปัญหาด้วย โดยเฉพาะเวลามี Cell ที่ Merge กันอยู่จะทำให้ Paste ไม่ลง

paste-value-format

ผมมีเทคนิคเจ๋งๆ มาแนะนำให้ครับ นั่นก็คือ ให้เปิดโปรแกรม Excel อีกอันนึงขึ้นมา (ให้เหมือนเราเข้าโปรแกรม Excel ใหม่อีกรอบ) แล้วสร้างไฟล์ใหม่หรือเปิดไฟล์งานที่ต้องการ Paste ห้ามกด New Workbook หรือ Open Workbook จากโปรแกรม Excel เดิม) จากนั้นค่อยกด Copy จากไฟล์ต้นฉบับ แล้ว Paste ลงไปที่อีกไฟล์นึงไปตรงๆ ไม่ต้องมี Special อะไรทั้งสิ้น เพียงเท่านี้มันจะเป็นการ Paste เป็น Value กับ Format พร้อมกันโดยอัตโนมัติ

การทำแบบนี้มีข้อเสียคือ เราจะไม่สามารถ Link หรืออ้างอิงสูตรข้ามไฟล์ในลักษณะนี้ได้ ซึ่งต่างจากการเปิด Workbook ใหม่ หรือ Open File จาก Excel โปรแกรมเดิม

4. สูตร INDEX แท้จริงแล้วให้ค่ากลับมาเป็น Cell Reference

รู้หรือไม่ว่าสูตร INDEX นั้นให้ผลลัพธ์แตกต่างจากสูตรอื่นๆ ในหมวด Lookup & Reference อย่าง VLOOKUP (ที่ให้ค่ากลับมาเป็น Value ในช่องที่กำหนด) หรือ MATCH  (ที่ให้ค่ากลับมาเป็นเลขลำดับที่หาเจอ) เพราะว่าสิ่งที่ INDEX ให้ค่ากลับมานั้นเป็น Cell Reference ต่างหาก

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

นั่นคือ เราสามารถเอา INDEX ไปใช้ผสมกับฟังก์ชั่นอื่นอย่าง OFFSET ก็ได้ (ซึ่งคุณไม่สามารถใช้ OFFSET ร่วมกับ VLOOKUP ได้เลย) หรือ จะเอาไปแทนที่ตรงส่วนของสูตรที่ต้องการค่าเป็น Cell Reference ได้เลยทันที เช่นเอาไปใช้กับฟังก์ชั่น SUM หรือ AVERAGE

ตัวอย่างเช่น ผมสามารถ ทำ Dynamic Range ก็ได้ (คือให้ Excel เลือกช่วงที่มีการเปลี่ยนไปแล้วแต่ input ของ user)  โดยหลักการที่ว่า

  • ใช้ MATCH คู่กับ INDEX เพื่อหาตำแหน่งสุดท้ายที่ต้องการเลือก
  • จากนั้นเอาไปผสมกับฟังก์ชั่นอย่าง AVERAGE ที่กำหนดจุดเริ่มที่ชัดเจนไว้
  • ส่วนจุดจบให้แทนสิ่งที่ได้จาก INDEX
  • เช่น
    =AVERAGE(cellจุดเริ่ม:cellสุดท้ายที่ได้จาก INDEX)
    =AVERAGE(cellจุดเริ่ม:INDEX(ตารางอ้างอิง,แถวที่เป็นจุดจบซึ่งได้จาก MATCH))
  • ลองดูตัวอย่างได้ที่นี่ เขียนไว้ค่อนข้างดีครับ => http://datapigtechnologies.com/blog/index.php/using-indexmatch-as-a-cell-reference/
  • ดูสูตรและเทคนิคลับอื่นของ INDEX ได้ที่นี่ => http://www.inwexcel.com/index-function/

5. Excel พูดได้

speak-cells

เราสามารถสั่งให้ Excel พูดโดยใช้เครื่องมือ Speak Cells กับ Speak Cells on Enter (ใน menu commands not in a ribbon) ซึ่งสามารถ add ได้จาก Quick Access Toolbar ซึ่งประโยชน์ของมันคือการช่วยทวนสิ่งที่เราพิมพ์เข้าไปเพื่อลดความผิดพลาด โดยไม่ต้องเสียเวลามองสิ่งที่เราพิมพ์นั่นเอง

ใครสนใจวิธีทำไปอ่านได้ที่นี่ => http://www.inwexcel.com/quick-access-toolbar/

6. เปลี่ยนรูปแบบของตัวอักษรที่อยู่ประจำหัวคอลัมน์ หรือ หัวแถวได้

chnage-normal-style
รูปแบบของหัวตารางจริงๆ แล้วมันคือรูปแบบที่เรียกว่า Normal Style นั่นเอง แปลว่าหากเราไปแก้ไขเจ้า Normal Style นี้แล้ว รูปแบบการแสดงผลของหัวตารางก็จะเปลี่ยนไปด้วยนั่นเอง

วิธีแก้ Normal Style ให้ทำดังนี้

  1. ไปที่ Ribbon Home
  2. Cell Styles => คลิ๊กขวาที่ Normal => เลือก Modify
  3. กด Format… => เลือกรูปแบบที่ต้องการ
  4. กด ok และ ok อีกที

ซึ่งเจ้า Normal Style ที่เราเปลี่ยนเล่นนี้จะผูกติดไปตาม Workbook ที่เราเปลี่ยน Style ไป ดังนั้นเวลาเปิดไฟล์ใหม่เจ้า Normal Style ก็จะกลายเป็นปกติเองครับ

7. Excel มีฟังก์ชั่นลึกลับเจ๋งๆ อย่าง DATEDIF แต่ไม่บอกคุณ

datedif

จริงๆ แล้ว Excel มีฟังก์ชั่นเจ๋งๆ อย่าง DATEDIF  แต่เค้าไม่ยอมบอกเรา (ไม่รู้ทำไมเหมือนกัน!!)
ที่ว่าไม่บอกก็คือ ไม่มีอยู่ใน List ฟังก์ชั่นที่มีให้เลือก แถมตอนพิมพ์ก็ไม่มี Tool Tips หรือ Help อะไรบอกเลยด้วย ทั้งๆ ที่มีประโยชน์พอสมควรเลยล่ะ

วิธีการใช้ดูได้ที่นี่ครับ => http://www.inwexcel.com/datedif-function/

8. Excel สามารถแปลงข้อมูลหลายๆ อย่างได้ง่ายมากๆ

bahttext

  • แปลงหน่วยการวัด : อยากแปลงปอนด์เป็นกิโลกรัม หรือ แปลง ไมล์เป็นกิโลเมตร ไม่ใช่เรื่องยาก เพียงใช้ฟังก์ชั่น CONVERT เราก็ไม่ต้องมานั่งจำตัวเลขแล้ว (ไปดูหน่วยที่ Excel Convert ได้ที่นี่ => http://office.microsoft.com/en-001/excel-help/convert-HP005209022.aspx?CTT=5&origin=HP003056127)
  • แปลงเลขอารบิกเป็นเลขโรมัน : เราสามารถใช้ฟังก์ชั่น ROMAN ในการแปลงเลขอารบิกเป็นเลขโรมันได้ง่ายๆ อันนี้นอกจากจะเอาไว้ใช้เพื่อศึกษาก็ได้ว่าเลขจำนวนมากๆ ที่เราไม่คุ้น เวลาแปลงกลายเป็นเลขโรมันจะเขียนยังไง ยังสามารถแกล้งให้เพื่อนงงเล่น โดยแปลงเลขอารบิกเป็นเลขโรมันได้เลยครับ
  • แปลงตัวเลขเป็นข้อความภาษาไทย : ไม่น่าเชื่อว่า Excel จะมีฟังก์ชั่นเพื่อคนไทยโดยเฉพาะอย่าง BAHTTEXT
    ในขณะที่กลับไม่มีฟังก์ชั่นแบบนี้สำหรับการแสดงเป็นข้อความภาษาอังกฤษ เล่นเอาฝรั่งน้อยใจกันไปเป็นแถบๆ

9. เราสามารถใส่เวลาให้แสดงข้อมูลเวลาที่มากกว่า 24 ชั่วโมงได้

เราสามารถพิมพ์เลขเวลาที่เกิน 24 ชั่วโมงลงไปใน Cell ได้เลย เช่น  32:30:15 ซึ่ง Excel จะทำการเลือก Custom Format ในรูปแบบที่รองรับการกรอกดังกล่าว คือมีการใช้วงเล็บก้ามปูครอบตัว h ลงไปอีกที เช่น  [h]:mm:ss นั่นเอง

เพราะเครื่องหมาย [ ] เวลาใส่ลงไปแล้วจะหมายถึงให้ใช้ค่าแบบที่เกินเวลาปกติได้ เช่น

  • [h] จะเกิน 24 ชม. ได้
  • [m] จะเกิน 60 นาทีได้
  • [s] จะเกิน 60 วินาทีได้

อ่านเกี่ยวกับการใช้งาน Custom Format เพิ่มเติมได้ที่ http://www.inwexcel.com/custom-format/

10. มีวิธีการใส่สูตรแบบพิเศษ ที่ต้องกดใช้งานด้วยคำสั่ง Ctrl+Shift+Enter

บางครั้งหากคุณเจอเพื่อนเขียนสูตรมาแล้วมีเครื่องหมาย { } ครอบอยู่ด้วยก็อย่างงไป เพราะเค้าคนนั้นได้เขียนสูตรด้วยวิธีที่ที่เรียกว่า Array Formula ซึ่งเป็นวิธีการเขียนสูตรขั้นสูงซึ่งส่วนใหญ่แล้วจะต้องมีการกดคำสั่งพิเศษโดยใช้ปุ่ม 3 อันร่วมกันคือ Ctrl+Shift+Enter ถึงจะใช้ได้

Array Formula นี้จะทำงานต่างจากสูตรปกติตรงที่ ปกติแล้วการดำเนินการของสูตร จะทำกับ cell ทีละช่อง แต่เจ้า Array Formula นี้จะทำเป็นช่วงแทน

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

หากเราอยากจะเอาเลขในช่อง A1:A10 ไปคูณกับเลขในช่อง B1:B10 จากนั้นให้เอาผลที่ได้มา AVERAGE กัน
เราสามารถทำแบบนี้ได้ด้วยการสูตร Array Formula เพียงช่องเดียว นั่นก็คือ =AVERAGE(A1:A10*B1:B10) ซึ่งพอเขียนจบให้กด Ctrl+Shift+Enter ด้วย สูตรจึงจะทำงานได้ (มันจะมีเครื่องหมายปีกกางอกมาเอง)

วิธีที่มันทำคือ จะจับคู่ทำงานที่ละคู่ลำดับ เช่น A1*B1,A2*B2,A3*B3….A10*B10 จากนั้นก็เอา AVERAGE ไปครอบ
ได้ว่า =AVERAGE(A1*B1,A2*B2,A3*B3….A10*B10) นั่นเอง

ใครสนใจ ในอนาคตอันใกล้นี้ เดี๋ยวผมจะสอนเขียน Array Formula แน่นอน แล้วจะรู้ว่ามันทำอะไรได้มากมายจริงๆ

array-formula

 

ก่อนจากกัน…

เป็นอย่างไรบ้างครับกับการ แฉ 10 ความลับของ Excel ที่คุณอาจยังไม่เคยรู้มาก่อน!

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

ใครสงสัยอะไรตรงไหน อย่าลืมมาคุยกันได้ใน Facebook Page นะครับ http://www.facebook.com/inwexcel

เทคนิคการแยกวันที่และเวลาออกจากกัน

$
0
0

มีแฟนเพจท่านหนึ่งถามใน Facebook Page มาว่า

ถาม

ผมมีวันเวลา แบบนี้ 28/2/2014 23:52:00
อยากตัดแยกวันและเวลาออกเป็นคนละเซลล์ต้องทำอย่างไรครับ?

ตอบ

การจะแยกวันที่กับเวลาออกจากกัน ต้องเข้าใจก่อนว่า จริงๆแล้ววันที่คือเลขจำนวนเต็ม เวลาคือเลขทศนิยม (หากยังไม่เข้าใจ ลองอ่านได้ที่นี่ http://www.inwexcel.com/how-date-time-work/)

แปลว่าเจ้าเลข 28/2/2014 23:52:00 จริงๆ แล้วคือ 41698.9944444444

separate-date-time

ที่นี้เราจะต้องแยกมันออกเป็นสองส่วน คือ ส่วนจำนวนเต็ม (ซึ่งจะกลายเป็นวันที่) และอีกส่วนคือ ส่วนทศนิยม (ซึ่งจะกลายเป็นเวลา)

  • ส่วนจำนวนเต็ม ผมจะใช้สูตร ROUNDDOWN มาช่วย เพราะเป็นการปัดค่าลง โดยผมกำหนดให้เป็น ทศนิยม 0 ตำแหน่ง
  • ส่วนทศนิยม ผมจะใช้ฟังก์ชั่น MOD มาช่วย ซึ่งหน้าที่ของมันคือ หารแล้วเอาเศษที่เหลือ ดังนั้นผมเลยเอาเลขดังกล่าวหารด้วย 1 เศษที่เหลือก็จะหลายเป็นทศนิยมไป

ขั้นตอนต่อไปก็แค่ปรับ format ให้เหลือแค่วันที่ และ เวลา ตามลำดับ เป็นอันจบครับ

รวมวันหยุดและวันสำคัญของประเทศไทย ในรูปแบบไฟล์ Excel

$
0
0

Thailand holidays วันหยุดไทย

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

ดาวน์โหลดไฟล์ได้ที่นี่

ข้อมูลปัจจุบัน (จะแวะมาเพิ่มให้เรื่อยๆ ครับ อย่าลืม Bookmark ไว้นะ)

  • วันหยุดธนาคาร : มีข้อมูลปี 2544-2558
  • วันหยุดราชการ : มีข้อมูลปี 2557-2558

Thai-Holiday-Update-new-201501 (.xlsx)

แนะนำวิธีใช้งาน

  • ในไฟล์มีการแยกชีทเป็นวันหยุดราชการ และวันหยุดธนาคาร ออกจากกันเพื่อความสะดวก
  • ในแต่ละชีท มีการตั้งชื่อ Range เป็น Defined Name เอาไว้แล้ว ว่า “วันหยุดราชการ” และ “วันหยุดธนาคาร”
  • สามารถเอา Range ดังกล่าวไปใช้ใน argument ชื่อ holidays ของ ฟังก์ชั่น NETWORKDAYS หรือ WORKDAY ได้
    • =NETWORKDAYS(start_date,end_date,holidays)
    • =WORKDAY(start_date,days,holidays)

สุดยอดฟังก์ชั่นช่วยจัดการข้อมูลให้เป็นไปตามต้องการ

$
0
0

เดินทางข้ามเวลาด้วยฟังก์ชั่นกลุ่ม Date & Time

$
0
0

co-create
บทความนี้คือส่วนหนึ่งของโครงการ ร่วมสร้าง “หนังสือคู่มือ Excel ที่เจ๋งที่สุด” ใครที่มี comment เพื่อแนะนำ ปรับปรุงหนังสือได้ คุณจะได้เครดิตในฐานะผู้ร่วมเขียน ลงในหนังสือที่จะพิมพ์จริงๆ ด้วย! อ่านรายละเอียด และดูสารบัญหนังสือ คลิ๊กที่นี่


 

นอกจากที่เราจะต้องจัดการข้อมูลประเภท Text ในหัวข้อที่ผ่านมาแล้ว บางทีเราต้องจัดการข้อมูลเกี่ยวกับเรื่องของเวลาด้วย เช่น ข้อมูลตั้งต้นอาจเป็น Text หรือเป็นวันที่ แต่เราต้องการข้อมูลที่เป็นเดือน หรือ ปี เป็นต้น

การแยกข้อมูลวันที่และเวลาออกจากกัน

ก่อนอื่นเราต้องรู้ว่า วันที่คือจำนวนเต็ม เวลา คือเลขทศนิยม ซึ่งตรงนี้ได้เคยเกริ่นไว้ในบทแรกๆ แล้ว เราจะนำความรู้นี้มาใช้ต่อครับ

timeline

ดังนั้น ถ้าเรามีข้อมูลในช่อง A1 ว่า 21/10/2014 16:00:00 ซึ่งค่าที่แท้จริง คือ 41933+16/24 เพราะ 1 วันมี 24 ชั่วโมง หรือ จะได้ว่า 41933.66667 นั่นเอง (เลข 6 ซ้ำไปเรื่อยๆ)

เราก็สามารถแบ่งมันออกเป็นสองส่วนได้ นั่นคือ ส่วนของวันที่ และ ส่วนของเวลา

date-time

ส่วนของวันที่

วันที่คือ จำนวนเต็ม ดังนั้น เราจะใช้ฟังก์ชั่น =INT(number) มาช่วย (ให้ค่ากลับมาเป็นจำนวนเต็ม) จะได้ว่า =INT(A1) จะได้ออกมาเป็นเลข 41933 นั่นเอง ซึ่งถ้าเราเปลี่ยน Format ให้เป็นวันที่จะได้เป็น 21/10/2014 ตามต้องการ

ส่วนของเวลา

เวลาคือ ทศนิยม ดังนั้นเราจะแยกส่วนของทศนิยมออกมาได้ เราต้องใช้ความรู้เรื่องของการหารเศษส่วน นั่นคือ อะไรก็ตาม หารด้วย 1 ถ้าเหลือเศษ มันคือ ทศนิยมนั่นเอง ดังนั้นเราจะหาเศษเหลือของการหารได้ด้วยฟังก์ชั่น =MOD(number,divisor) มาช่วยครับ

ซึ่งกรอกได้ดังนี้ =MOD(A1,1) จะได้ค่าออกมาเป็น 0/1/1900 16:00 หรือ 0.66667 นั่นเอง ซึ่ง พอเราเปลี่ยน Format ให้เหลือแต่เวลาแล้ว ก็จะได้ว่า 16:00 ซึ่งเป็นเวลาที่เราต้องการครับ

การคำนวณค่าออกมาเป็นวันที่ จากการมีข้อมูลเป็นข้อความ

เราสามารถใช้ฟังก์ชั่น =DATEVALUE(date_text) เพื่อแปลงข้อมูลที่อยู่ในรูปแบบ Text ให้กลายเป็นข้อมูล Number ที่เป็นวันที่ได้ทันที ซึ่งปกติแล้ว date_text ที่สามารถใช้ได้ก็คือตัวเดียวกับที่เราระบุใน Cell แล้ว Excel แปลงเป็นวันที่ให้เอง ซึ่งมีรูปแบบตามนี้

  • “dd/mm/yyyy” เช่น “21/10/2014”
  • “yyyy/mm/dd” เช่น “2014/10/21”
  • “dd-mmm-yyyy” เช่น “21-Oct-2014”
  • “yyyy-mm-dd” เช่น “2014-10-23”

วิธีการใช้งาน เช่น =DATEVALUE(“21-Oct-2014”) จะแสดงออกมาเป็นเลข 41933 ซึ่งคือวันที่ 21/10/2014 นั่นเอง จุดสำคัญคือ date_text จะต้องมี format เป็น Text เท่านั้น

ประโยชน์ที่แท้จริงของ DATEVALUE ก็คือการแปลงวันที่จากรูปแบบเขียนตัวเลขเรียงกัน เช่น 20141021 ให้กลายเป็น 21/10/2014 นี่แหละครับ แต่เราต้องใช้ฟังก์ชั่น TEXT มาช่วยในการเปลี่ยน Format ก่อนดังนี้

  • สมมติในช่อง A1 มี Number หรือ Text คำว่า 20141021 อยู่
  • เราต้องแปลง 20141021 ให้กลายเป็นรูปแบบที่ date_text รู้จักก่อน ซึ่งรูปแบบที่ง่ายสุด คือ yyyy-mm-dd โดยใช้สูตรว่า =TEXT(A1,“0000-00-00”) ซึ่งเดี๋ยวจะได้เรียนต่อภายหลัง
  • จะได้ออกมาเป็นค่า 2014-10-21 ในรูปแบบ Text แล้ว
  • จากนั้นก็ใช้ DATEVALUE มาครอบต่อ จะได้ =DATEVALUE(TEXT(A1,“0000-00-00”))
  • จะได้ออกมาเป็น 21/10/2014 ตามต้องการ

Tips : เอาเข้าจริงๆ หากเราใช้แค่ TEXT(A1,“0000-00-00”) แล้วคูณ 1 ก็ได้ผลเหมือนกัน

ข้อควรระวังเกี่ยวกับ Format วันที่:

รูปแบบวันที่ ในประเทศทั่วๆ ไปจะเรียงแบบ dd/mm/yyyy แต่ถ้าไปเปิดในคอมพิวเตอร์ที่ตั้งค่าวันที่และเวลาเป็นของ English (United State) ในโปรแกรม Windows เอง (ใน Control Panel -> Region and Language -> Format) จะเป็น mm/dd/yyyy ซึ่งเราต้องระวังจุดนี้ให้ดี

เช่น ถ้าเขียนใน Cell ว่า 02/03/2014 ประเทศที่ไม่ใช่ US จะเป็นวันที่ 2 มีนาคม ค.ศ. 2014 จะทำให้ Excel มองว่าเป็นวันที่ 3 กุมภาพันธ์ ค.ศ. 2014 แทน ซึ่งอาจเกิดความโกลาหลได้เลยล่ะ แต่ถ้าคุณคิดว่าคงไม่ได้ทำงานข้ามโลกขนาดนั้นก็ไม่น่าจะเป็นอะไรครับ

การคำนวณค่าออกมาเป็นวันที่ จากการมีข้อมูลตัวเลข วัน เดือน และ ปี

date

เราจะใช้ฟังก์ชั่น =DATE(year,month,day) มาช่วย โดยต้องแทนเลข ปี เดือน วัน ลงไปในแต่ละ Argument แต่สิ่งที่ต้องระวังก็คือ เราจะต้องแทนปีด้วยเลข คศ. นะครับ วันที่จึงจะออกมาถูกต้อง เช่น ถ้าวันที่ต้องการ คือ 13 ธันวาคม พศ. 2557 เราจะต้องใส่ว่า =DATE(2557-543,12,13) หรือ =DATE(2014,12,13) นะครับ จะได้ออกมาเป็น 13/12/2014 ซึ่งเป็นสิ่งที่ถูกต้อง ซึ่งหากจะเปลี่ยน ค.ศ. ให้แสดงเป็น พ.ศ. เราควรใช้วิธีการเปลี่ยน Number Format เอาครับ ไม่ควรใส่เลข 2557 ตรงๆ

การคำนวณค่าหาวันสุดท้ายของเดือน

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

วิธีที่1 ใช้ฟังก์ชั่น =EOMONTH(start_date,[months]) โดยใส่วันที่ที่ต้องการลงไปในช่อง start_date แต่ถ้าขี้เกียจจำฟังก์ชั่นเยอะแยะ จริงๆ เราใช้อีกวิธีก็ได้ครับ นั่นคือ

วิธีที่ 2 ใส่ day ในฟังก์ชั่น =DATE(year,month,day) เป็นเลข 0 โดยใส่ month เป็นเดือนถัดไป เช่น ผมใส่เป็น =DATE(2014,3,0) มันจะได้ว่า 28/2/2014 ครับ ซึ่งจะเป็นวันสุดท้ายของเดือนก่อนหน้านั่นเอง เราสามารถเอาตรงนี้มาประยุกต์ใช้หาวันสุดท้ายของแต่ละเดือนได้ครับ

การหาวันที่ใน xx เดือน ก่อนหน้า/ถัดไป

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

1. ใช้ฟังก์ชั่น DATEเหมือนเดิม

ถ้าเราใช้ DATE เราสามารถหาวันที่ ใน 6 เดือนข้างหน้าได้โดยการบวกเลข 6 ลงไปในช่อง month ได้เลยครับ เช่น ผมปรับจากตัวอย่างที่แล้ว เป็น =DATE(2014,12+6,13) = 13/6/2015

2. ใช้ EDATE มาช่วย

ถ้าเราใช้ EDATE จะมีวิธีกรอกดังนี้ครับ =EDATE(start_date,months) คือให้เราใส่วันที่ลงไปใน start_date และใส่จำนวนเดือนที่ต้องการให้เลื่อนเวลาไปในช่อง months เช่น ถ้าผมเลื่อนจาก 13 ธันวาแบบข้างบน สมมติผมใส่วันที่ 13/12/2014 ไว้ในช่อง A1 ผมจะต้องเขียนเพื่อคำนวณหาวันในอีก 6 เดือนถัดไปว่า =EDATE(A1,6) = 13/6/2015 เช่นกัน

ที่นี้มาลองดูกันครับว่าถ้าเราเริ่มที่ 31 ธันวาคม 2557 บวกไปอีก 2เดือนเพื่อให้เป็นกุมภาพันธ์ที่มีแค่ 28 วันมันจะเป็นยังไง?

ถ้าเราใช้ DATE ใส่ว่า =DATE(2014,12+2,31) จะได้ออกมาเป็น 3/3/2015 นั่นคือ 3 มีนาคม 2558 เพราะว่าวันที่ 31 มันเลยวันที่ 28 ไปอีก 3 วัน นั่นเอง

แต่ถ้าเราเปลี่ยนมาใช้ EDATE แทน (ผมใส่ 31/12/2014 ไว้ในช่อง A1) จะได้ว่า =EDATE(A1,2)= 28/2/2015 ซึ่งได้ 28 ธันวาคม โดยไม่เลื่อนวันให้เหมือนการใช้ DATE

ตรงนี้ไม่ได้บอกว่าฟังก์ชั่นไหนทำงานถูกหรือผิด เพราะมันแล้วแต่สถานการณ์ครับว่าเราต้องการผลลัพธ์แบบไหน อันนี้ต้องนำไปเลือกใช้ให้ถูกเองครับ

การคำนวณเกี่ยวกับวันทำงาน (Working Day)

อันนี้เป็นการทำงานยอดฮิต ที่หลายคนต้องใช้บ่อยๆ ซึ่งปัญหาหลักๆ ที่พบเจอมี 2 กรณีดังนี้

กรณี 1 : รู้วันเริ่มและวันสิ้นสุด อยากรู้จำนวนวันทำงานระหว่างสองวันนั้น –> ใช้ NETWORKDAYS

กรณี 2 : รู้วันเริ่ม (หรือวันสิ้นสุด) แล้วรู้จำนวนวันที่ต้องใช้ แต่อยากรู้วันที่ปลายทาง –> WORKDAY

ซึ่งจะตอบโจทย์ทั้งสองกรณีข้างล่างนี้ได้ เราจะต้องเตรียมข้อมูลวันหยุดพิเศษเสียก่อน Excel จึงจะรู้ว่าวันไหนเป็นวันทำงานบ้าง โดยมันจะดูว่า ถ้าเป็นวันเสาร์, อาทิตย์, หรือวันหยุดพิเศษ จะถือว่าไม่ใช่วันทำงานนั่นเอง และเพื่อเป็นการอำนวยความสะดวกให้ทุกท่าน ผมได้เตรียมตารางข้อมูลวันหยุดพิเศษในแต่ละปีให้แล้ว ไปดาวน์โหลดได้ที่ http://www.inwexcel.com/thailand-holidays/ ได้เลย ฟรีๆ ครับ

วิธีทำ กรณีที่ 1

ใช้สูตร =NETWORKDAYS(start_date,end_date,holidays) มาช่วยครับ โดยที่สูตร NETWORKDAYS จะนับทั้งวันเริ่มและวันจบด้วย แต่จะไม่นับวันเสาร์-อาทิตย์ และวันที่ระบุใน Holidays  ซึ่งเราต้องใส่ข้อมูลวันหยุดพิเศษลงไปใน argument ที่ชื่อว่า holidays นี่แหละครับ

ตัวอย่าง

  • วันเริ่ม = 2 มีนาคม พ.ศ. 2558 ซึ่งผมพิมพ์ไว้ในช่อง A1 ว่า 2/3/2015
  • วันสิ้นสุด = 9 มีนาคม พ.ศ. 2558 ซึ่งผมพิมพ์ไว้ในช่อง A2 ว่า 9/3/2015
  • สมมติว่าผมเตรียมข้อมูลวันหยุดพิเศษไว้แล้ว ในช่อง H1:H100 ซึ่งในระหว่าง 2 วันข้างต้น มีวันที่ 4/3/2015 เป็นวันหยุดพิเศษเนื่องจากเป็นวันมาฆบูชาครับ

หาจำนวนวันทำงานในช่อง A4 =NETWORKDAYS(A1,A2, H1:H100) จะได้ว่า = 5 วัน เพราะว่า

ปฏิทิน วันทำงาน (ที่นับ) วันที่ไม่นับ
 networkdays
  • 2/3/2015 (นับวันเริ่ม)
  • 3/3/2015
  • 5/3/2015
  • 6/3/2015
  • 9/3/2015 (นับวันจบ)
  • 4/3/2015 เพราะอยู่ใน Holidays
  • 7/3/2015 เพราะเป็นวันเสาร์
  • 8/3/2015 เพราะเป็นวันอาทิตย์

 

วิธีทำ กรณีที่ 2

ในทางกลับกัน หากผมเริ่มที่ 2 มีนาคม พ.ศ. 2558  ซึ่งผมพิมพ์ไว้ในช่อง A1 ว่า 2/3/2015

แล้วผมมีวันทำงานเป็น 5 วัน ผมก็จะหาวันสิ้นสุดได้จาก =WORKDAY(start_date,days,holidays)
=WORKDAY(A1,A4,H1:H100) = 10/3/2015 ซึ่งไม่ตรงกับตัวอย่างข้างบนซะงั้น!! สาเหตุเป็นเพราะว่าสูตร WORKDAY มันไม่นับจุดเริ่มต้นนั่นเอง (ต่างจาก NETWORKDAYS) ตรงนี้เป็นจุดที่ต้องสังเกตดีๆ ครับ

 

การใช้ DATEDIF เพื่อหาระยะห่างระหว่างวันแบบขั้นสูง

DATEDIF เป็นฟังก์ชั่นเกี่ยวกับวันที่ ใช้หาว่าวันสองวันที่กำหนดได้ ซึ่งความสามารถของมันมีมากกว่าแค่เอาวันที่มาลบกันหาจำนวนวันแน่นอน เพราะมันสามารถให้เราเลือกได้ว่า จะคำนวณระยะห่างเป็น วัน เดือน หรือ ปี ซึ่งฟังก์ชั่นนี้ช่วยให้การคำนวณสะดวกขึ้นมาก แต่ใน Excel กลับไม่มี Help ให้นะครับ แต่ไม่ต้องห่วง ผมจะแนะนำการใช้งานให้เอง

วิธีการใช้ฟังก์ชั่น

DATEDIF( start_date, end_date, interval )
DATEDIF( วันเริ่ม, วันจบ, รูปแบบการวัดช่วงเวลา ) โดย interval (รูปแบบการวัดช่วงเวลา) คือ

  • Y = ปี (แบบครบปี), M = เดือน (แบบครบเดือน), D = วัน
  • MD = วัน (ไม่สนใจ เดือน ปี), YM = เดือน (ไม่สนใจวัน ปี), YD = วัน (ไม่สนใจปี)

เช่น =DATEDIF(A1,A2,”M”) เป็นการหาว่า วันที่ใน A1 และ A2 ห่างกันกี่เดือนแบบครบเดือน

ค่าที่ได้จาก DATEDIF กรณีใช้โหมด Interval ต่างกัน

datedif

ตัวอย่างการตีความ Start 1/1/2015 – End 31/12/2015

  • ถือว่ายังไม่ครบเต็มปี เวลา Interval เป็น “Y” จึงได้ค่า 0
  • และยังไม่เต็ม 12 เดือน (ได้ 11 เดือน ตาม “M”) เพราะยังขาดไปอีกวันหนึ่งจึงครบปีจริงๆ
  • หากดูจากคอลัมน์ 1/1/2015 – 1/1/2016 จะเห็นว่าครบปีจริงๆ จะเป็นอย่างไร

 

7 วิธีรับมือกับวันแย่ๆ (ใน Excel)

$
0
0

อย่างที่ผมเคยย้ำเสมอว่า Excel มองวันที่เป็นแค่ตัวเลขจำนวนธรรมดาตัวหนึ่งที่เปลี่ยนหน้าตาไปเท่านั้น (รายละเอียดอ่านได้ที่นี่)

นอกจากนี้ Excel จะรู้จักวันที่ในรูปแบบที่มันคุ้นเคยเท่านั้น เช่น dd/mm/yyyy หรือ dd-mm-yyyy หรือ yyyy/mm/dd หรือ yyyy-mm-dd (กรณีที่ตั้งค่า Regional Setting ใน Control Panel เป็น Thai )

ดังนั้น ถ้าหากเราใส่วันที่ในรูปแบบที่ Excel ไม่รู้จัก เช่น 2016.12.09 มันก็จะไม่มองว่าเป็นวันที่หรอกนะ นอกจากนี้จะต้องระวังเรื่องการใส่เลขปีด้วย ว่าปกติแล้วควรใส่เป็นปี ค.ศ. เสมอ (ยกเว้นจะตั้งค่าใน Number Format ให้รับ Input เป็น พ.ศ. ไทยไปเลย มีบอกวิธีท้ายบทความ)

แต่บางครั้งเราได้ข้อมูลมาจากคนอื่น (หรือแม้แต่ฐานข้อมูลที่ Office) ซึ่งดันมีข้อมูลวันที่อยู่ในรูปแบบที่แย่ๆ Excel มันก็เลยไม่รู้จัก เราก็เลยต้องยื่นมือไปช่วยหน่อยแล้ววววว!!!

นี่คือ 7 วิธีที่จะรับมือกับวันแย่ๆ ครับ

สมมติว่ากรอกวันที่แย่ๆ อยู่ในช่อง A1 นะครับ

วันแย่แบบที่ 1 : YYYYMMDD โดยปีเป็น ค.ศ.

วิธีแก้อาการนี้ ทำง่ายๆ ครับ โดยใช้ความรู้เรื่องฟังก์ชั่น TEXT กับ Custom Format มาช่วย ได้ดังนี้

=TEXT(A1,”0000-00-00″)*1 จะได้เป็นตัวเลขที่ถูกต้องแล้ว แต่ถ้าอยากเห็นเป็นวันที่ ก็ให้ Format เป็นวันที่เป็นอันจบ

วันแย่แบบที่ 2 : YYYYMMDD โดยปีเป็น พ.ศ.

วิธีแก้ ผมแนะนำ 2 วิธีแล้วกัน

แบบแรก ตัดทีละส่วนแล้วรวมกันด้วย DATE จะได้ว่า

=DATE(LEFT(A1,4)-543,MID(A1,5,2),RIGHT(A1,2))

แบบที่สอง ใช้ TEXT เหมือนเดิม จะได้ว่า

=TEXT((LEFT(A1,4)-543)&RIGHT(A1,4),”0000-00-00″)*1

วันแย่แบบที่ 3 : DDMMYYYY โดยปีเป็น ค.ศ.

คล้ายกับวิธีที่ 1 ครับ แต่ปรับ Format เล็กน้อย

=TEXT(A1,”00-00-0000″)*1

วันแย่แบบที่ 4 : DDMMYYYY โดยปีเป็น พ.ศ.

คล้ายกับวิธีที่ 2 ครับ มี 2 วิธี

แบบแรก =DATE(RIGHT(A1,4)-543,MID(TEXT(A1,”00000000″),3,2),LEFT(TEXT(A1,”00000000″),2))

แบบที่สอง = TEXT(LEFT(TEXT(A1,”00000000″),4)&RIGHT(A1,4)-543,”00-00-0000″)*1

วันแย่แบบที่ 5 : มีสัญลักษณ์ประหลาด เช่น .

กรณีเป็น ค.ศ :

วิธีแก้ง่ายมาก ก็แปลงจุด (หรือสัญลักษณ์อะไรก็แล้วแต่) ให้เป็นตัวที่ Excel รู้จักเช่น – ด้วย SUBSTITUTE ก็พอครับ

=SUBSTITUTE(A1,”.”,”-“)*1

กรณีปีเป็น พ.ศ.

หลักการก็คือทำให้ . หายไปก่อนด้วย =SUBSTITUTE(A1,”.”,””) แล้วเอาไปเข้ากรณีวันแย่แบบที่สองครับ ซึ่งจะได้ว่า

=DATE(LEFT(A1,4)-543,MID(SUBSTITUTE(A1,”.”,””),5,2),RIGHT(A1,2))

อีกแบบก็จะได้ว่า

=TEXT((LEFT(A1,4)-543)&RIGHT(SUBSTITUTE(A1,”.”,””),4),”0000-00-00″)*1

วันแย่แบบที่ 6 : เลขปีเขียนแบบย่อ จาก YYYY เหลือแค่ YY 2 ตัวหลัง

เช่น DDMMYY โดยปีเป็น ค.ศ. แบบนี้เราก็ต้องรู้ก่อนว่า ปีเป็น 19YY หรือ 20YY

ถ้ามั่นใจว่าเป็น 20YY ก็ทำแค่นี้พอ =TEXT(A1,”00-00-00″)*1

แต่ถ้าเป็น 19YY ก็อาจจะต้องเติมตัวเลข 19 ให้มัน เช่น =DATE(“19″&RIGHT(A1,2),MID(TEXT(A1,”000000″),3,2),LEFT(TEXT(A1,”000000”),2))

วันแย่แบบที่ 7 : ข้อมูลต้นทางมีหลายรูปแบบผสมผสานกัน!!

แบบนี้ ถ้าคิดว่ามีเครือ่งหมายประหลาดอะไรก็แนะนำว่าให้ใช้ SUBSTITUTE ตัดทิ้งให้หมดก่อน

หลังจากนั้นคุณต้องเขียนสูตรเพื่อตรวจเช็ครูปแบบแล้วล่ะ
เช่น ใช้ LEFT RIGHT เช็คดูว่าเลขน่าจะเป็น ค.ศ. หรือ พ.ศ.? และมีกี่ตัวอักษร??

จากนั้นค่อยเอาไปใช้ IF หรือ CHOOSE เพื่อเลือกสูตรที่เหมาะสมต่อไป

แต่ถ้าเกิดเหตุการณ์แบบนี้จริงๆ ไปแก้ตั้งแต่ต้นเหตุดีกว่า ว่าทำไมถึงกรอกข้อมูลได้มั่วขนาดนี้!!!!

อย่างน้อยก็ควรใส่ Data Validation ไว้บ้างนะครับ เช่น

data-validation

เทคนิคแถม : คนกรอกข้อมูลดึงดันจะกรอกเป็น พ.ศ.

อย่างที่บอกว่าเราควรกรอกข้อมูลเป็น ค.ศ. เสมอ แต่ถ้าคนกรอกดึงดันว่าจะกรอก พ.ศ.ล่ะ !!?

วิธีที่ทำให้กรอกข้อมูลเป็น พ.ศ. แล้วข้อมูลไม่เพี้ยน คือต้องเลือก Cell ช่องนั้นๆ แล้วเลือก Number Format ดังนี้ครับ

input-budd

เป็นอย่างไรกันบ้างครับ กับเทคนิคการรับมือกันวันแย่ๆ ใน Excel ผมหวังว่าจะเป็นประโยชน์กับเพื่อนๆ นะครับ

หากใครมีเทคนิคอื่นๆ ในการจัดการกับปัญหาเรื่องวันที่ อย่าลืมแชร์กันให้ผมและเพื่อนๆ รู้บ้างนะครับ เพราะปัญหาหนึ่งๆ มันมีหลายทางแก้ไขแน่นอน ^^

แนวทางจัดการวันที่สุดมั่ว (ผิดไปแล้วทำไงดี)

$
0
0

างที่ผมพยายามเตือนเรื่องการกรอกข้อมูลวันที่ไปแล้ว 2 ตอนด้วยกัน

สมมติว่าคุณแก้ไขตามที่ผมบอกไปแล้ว แปลว่าการกรอกวันที่ในอนาคตไม่น่าจะผิดอีกแล้ว แต่ของในอดีตที่เคยผิดไปแล้วจะทำไงดีล่ะ?

วันนี้ผมเลยทดลองกรอกวันที่มั่วๆ ลงไปในหลายๆ รูปแบบ แล้วลองเขียนสูตรดูซิว่าจะช่วยจัดการให้เข้าร่องเข้ารอยได้หรือไม่? แบบว่าอัดสูตรแบบ combo เข้าไปแบบเดียวกันดูเลยว่ามีใครรอดมั้ย?

ดาวน์โหลดไฟล์

ไฟล์ที่ผมลองทำ => mess-up-date2

Screenshot การทำ

มีหลายขั้นตอนมาก

หลักๆ คือ ผมก็คิดก่อนว่า ตัวเองรู้ได้ไงว่าวันที่อันไหนผิด ด้วยวิธีอะไร แล้วจะแก้ให้ถูกต้องได้ยังไง? แล้วเอาสิ่งนั้นแหละมาเขียนเป็นสูตร

ผมก็เลยพยายามแยก ปี เดือน วัน ออกมา แล้วลอง adjust เช่น ลบ 543 หรือ สลับวันกับเดือน

แล้วสุดท้ายเอาไปตรวจว่าอยู่ในช่วงวันที่ที่ต้องการหรือไม่? (กำหนดอยู่ข้างบน ซึ่งเป็นตัวที่ช่วยเช็คได้ดีมากๆ ตัวนึงเลย)

ถ้าอยู่ในช่วงวันที่ที่กำหนด ก็แสดงว่า ok น่าจะถูกครับ (สุดท้ายได้คอลัมน์ R)

โดยสรุป

ผมใช้หลายขั้นตอนมากๆ เพราะมีการ Error หลากหลายรูปแบบเหลือเกิน

แต่จะมีวันที่บางอันที่ผิดแล้วไม่มีทางรู้ เช่น 3/2/2017 กับ 2/3/2017 ไม่รู้เลยว่าจริงๆ หมายถึง 3 กพ. หรือ 2 มีค. กันแน่? อันนี้คุณเองแหละที่ต้องรู้ดีที่สุดนะครับ ว่างานของคุณแต่ละอันมันน่าจะอยู่ในเดือนไหน?

ใครลองทำตามนี้แล้วได้ผลหรือไม่ได้ผลยังไงช่วยบอกด้วย เผื่อผมจะได้ช่วยเขียนดักเพิ่มให้อีกนะครับ แต่ดีสุดคือ “กันไว้ดีกว่าแก้” นะครับ ^^

 

Viewing all 12 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>