กฏกติกาของฟอรัม : แจ้งชื่อและนามสกุลจริงในการสมัครสมาชิก--ตั้งชื่อกระทู้ให้ตรงกับปัญหาที่ถาม--เขียนอธิบายคำถามทั้งในตัวกระทู้และในแฟ้มแนบให้ละเอียด--ห้ามใช้คำว่า อ่ะ คับ หรือคำผวน หรือคำที่ไม่มีในพจนานุกรมไทย--โปรดตั้งชื่อแฟ้มให้สื่อถึงปัญหาที่ถาม--อย่าระบุชื่อให้คนใดคนหนึ่งเป็นผู้ตอบ--งดให้ความร่วมมือหรือช่วยตอบคำถาม กระทู้ที่ละเมิดกฏกติกาของฟอรัม
Results 1 to 10 of 10

Thread: การทำ DataValidation List ไม่ให้ข้อมูลซ้ำ

  1. #1

    Join Date
    May 2007
    Location
    ฉะเชิงเทรา
    Job
    งานผลิต
    Version
    Excel 2003?? Windows XP??
    Posts
    68

    Default การทำ DataValidation List ไม่ให้ข้อมูลซ้ำ

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

  2. #2
    Excel Expert Volunteer
    Join Date
    May 2007
    Location
    กรุงเทพมหานคร
    Job
    วางแผน
    Version
    Excel 2003,2007 / Windows XP,7
    Posts
    522

    Default

    ตามไฟล์แนบครับ

    โดยขั้นแรกใช้
    =COUNTIF($C$2:C2,C2)
    เพื่อหาวันที่ที่ไม่ซ้ำ

    จากนั้นใช้
    =SMALL(IF($D$2:$D$39=1,$C$2:$C$39,999999),ROW()-1)
    เพื่อแสดงวันที่ที่ไม่ซ้ำ

    สุดท้ายใช้ Range Name
    =OFFSET(Ans!$E$2,,,COUNTIF(Ans!$E$2:$E$39,"<>999999"),1)
    เพื่อนำเฉพาะค่าที่ไม่ซ้ำไปแสดงใน List ครับ
    :)

  3. #3

    Join Date
    May 2007
    Location
    ฉะเชิงเทรา
    Job
    งานผลิต
    Version
    Excel 2003?? Windows XP??
    Posts
    68

    Default

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

  4. #4
    Forum Admin สมเกียรติ's Avatar
    Join Date
    May 2007
    Location
    Excel Expert Training
    Job
    MS Excel Instructor
    Version
    Excel 2010/Windows 7
    Posts
    6,968
    Blog Entries
    5

    Default

    ต้องอาศัยสูตร Dynamic Range : Offset ช่วยปรับขนาดตาราง แล้วจึงนำตารางไปหา Unique ต่อครับ ดูคำอธิบายที่ http://www.excelexperttraining.com/c...t/roffset.html

    ตัวอย่างแนบนี้ผมเปรียบเทียบวิธีหา Unique ที่ใช้สูตร กับ VBA Function

  5. #5

    Join Date
    May 2007
    Location
    ฉะเชิงเทรา
    Job
    งานผลิต
    Version
    Excel 2003?? Windows XP??
    Posts
    68

    Default

    ขอบคุณครับ

  6. #6

    Join Date
    Jun 2007
    Location
    ราชบุรี โพธาราม เจ็ดเสมียน
    Job
    จัดเก็บอุปกรณ์สื่อสารโครงข่าย
    Version
    Excel 2007 Windows XP
    Posts
    2

    Default เรียนอาจารย์ครับ Data Vidation ถ้าเป็นตัวเลข

    Quote Originally Posted by ie36022 View Post
    ขอบคุณครับ
    ผมลองทำเป็นตัวเลข ทำไม่ผลออกมาเป็น 99999 ครับ

  7. #7
    Forum Admin สมเกียรติ's Avatar
    Join Date
    May 2007
    Location
    Excel Expert Training
    Job
    MS Excel Instructor
    Version
    Excel 2010/Windows 7
    Posts
    6,968
    Blog Entries
    5

    Default

    สูตร Array Step2 ต้องสร้างพร้อมกันทุกเซลล์ครับ และปรับสูตรเป็น
    =SMALL(IF( D2 : D39 =1, C2 : C39), ROW(C2 : C7)-1)

  8. #8

    Join Date
    Jun 2007
    Location
    ราชบุรี โพธาราม เจ็ดเสมียน
    Job
    จัดเก็บอุปกรณ์สื่อสารโครงข่าย
    Version
    Excel 2007 Windows XP
    Posts
    2

    Default อาจารย์ครับ รวดเร็วทันใจดียิ่ง ขอบคุณมากครับ

    อาจารย์ครับ อาจารย์ช่วยเสริมคำอธิบายเพิ่มเกี่ยวกับสูตรว่าเหตุจึงต้องเปลี่ยนสูตร SMALL(IF($D$2:$D$39=1,$C$2:$C$39,999999),ROW()-1) เป็น
    SMALL(IF(D2:D39=1,C2:C39),ROW(C2:C7)-1) สักเล็กน้อยเพื่อให้ผมและผู้ต้องความรู้เห็นช่องทางของสูตรนั้นๆมากยี่งขึ้น /ขอบพระคุณอาจารย์มากครับ

  9. #9
    Forum Admin สมเกียรติ's Avatar
    Join Date
    May 2007
    Location
    Excel Expert Training
    Job
    MS Excel Instructor
    Version
    Excel 2010/Windows 7
    Posts
    6,968
    Blog Entries
    5

    Default

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

    =SMALL(IF( D2 : D39 =1, C2 : C39), ROW(C2 : C7)-1)

    ส่วนแรก IF( D2 : D39 =1, C2 : C39) ทำหน้าที่ตรวจสอบแต่ละเซลล์ในช่วง D2 : D39 ว่าตำแหน่งใดมีค่าเท่ากับ 1 ซึ่งถ้าใช่ให้คืนค่าเป็นค่าจาก C2 : C39 แต่ถ้าไม่ใช่ก็ให้ปล่อยตำแหน่งที่ไม่ใช่เป็น False ไปเลยโดยไม่จำเป็นต้องใส่เลข 9999 แทนก็ได้

    ส่วนต่อไป SMALL(ค่าที่ได้จากIF, ROW(C2 : C7)-1) ทำหน้าที่เรียงลำดับตัวเลขจากน้อยไปมาก ตามเลขลำดับ 1, 2, 3, 4, 5, 6 ที่คำนวณได้จากสูตร ROW(C2 : C7)-1

    การที่ใช้สูตร ROW(C2 : C7)-1 มีข้อจำกัดว่าจะต้องใช้สูตรนี้เริ่มจาก Row 2 เท่านั้น ถ้าจะให้ดีขึ้นสามารถย้ายสูตรไปใช้ที่เซลล์อื่นได้ ควรแก้เป็น ROW(C2 : C7) -ROW(C2) +1

    ถ้าสร้างสูตรตามแบบของผม ให้ดูที่นี่ครับ
    http://www.excelexperttraining.com/f...opic.php?t=259

  10. #10
    Forum Admin สมเกียรติ's Avatar
    Join Date
    May 2007
    Location
    Excel Expert Training
    Job
    MS Excel Instructor
    Version
    Excel 2010/Windows 7
    Posts
    6,968
    Blog Entries
    5

    Default

    ขอแก้เลข 39 เป็น 7 ทุกตัวครับ เป็น
    =SMALL(IF( D2 : D7 =1, C2 : C7), ROW(C2 : C7)-1)
    หรือ
    =SMALL(IF( D2 : D7 =1, C2 : C7), ROW(C2 : C7)-ROW(C2)+1)

Similar Threads

  1. Replies: 8
    Last Post: 11 Nov 2009, 17:55
  2. การทำ Graph Bar
    By janry in forum Forum Library
    Replies: 2
    Last Post: 19 Oct 2009, 07:20
  3. การทำ SLA Report
    By tonpoon in forum Forum Library
    Replies: 3
    Last Post: 11 Jun 2009, 13:42
  4. Replies: 16
    Last Post: 2 Dec 2008, 21:26
  5. การทำ Background ใน Excel
    By paiboonin in forum Forum Library
    Replies: 2
    Last Post: 1 Jul 2008, 16:53

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •