Page 1 of 1

ปรับปรุงสูตร ให้ทีครับ

Posted: Thu Dec 04, 2014 10:12 am
by seeper
เรียน อาจารย์ครับ

แก้ไขสูตรให้ทีครับหรือมีสูตรอื่นไหมครับ หลักการคือช่อง h จะเป็นช่องรับข้อมูลอาจมีข้อมูลที่ซ้ำกัน แต่จะนับข้อมูลเฉพาะที่ไม่ซ้ำกันและโชว์ข้อมูลทั้งหมดที่ไม่ซ้ำในช่อง i

จากตัวอย่างที่ช่อง h มีข้อมูล 9 ตัวแต่ช่อง i กลับแสดงแค่ 8 ตัว

ช่วยแก้ไขด้วยนะครับ :flw: :flw: :flw:

Re: ปรับปรุงสูตร ให้ทีครับ

Posted: Thu Dec 04, 2014 10:32 am
by puriwutpokin
ที่H3=SUMPRODUCT(1/COUNTIF(OFFSET($H$4,0,0,COUNTA($H$4:$H$50),1),OFFSET($H$4,0,0,COUNTA($H$4:$H$50),1)))
ที่ I4=IFERROR(IF(ROWS($I$4:I4)>$H$3,"",INDEX($H$4:$H$50,SMALL(IF(FREQUENCY(MATCH($H$4:$H$50,$H$4:$H$50,0),ROW($H$4:$H$50)-ROW($H$4)+1),ROW($H$4:$H$50)-ROW($H$4)+1),ROWS($I$4:I4)))),"") ctrl+shift+enter

Re: ปรับปรุงสูตร ให้ทีครับ

Posted: Thu Dec 04, 2014 10:39 am
by seeper
ขอบคุณครับ :thup: :thup: :cp:

Re: ปรับปรุงสูตร ให้ทีครับ

Posted: Thu Dec 04, 2014 10:46 am
by seeper
อีกนิดครับ ถ้าเปลี่ยนจาก 0 ที่ช่อง H เป็น ="" มันไม่ได้อะครับแก้อย่างไรครับ

Re: ปรับปรุงสูตร ให้ทีครับ

Posted: Thu Dec 04, 2014 11:06 am
by puriwutpokin
ตามรูปไม่ต้องการให้แสดงค่าศูนย์ ไปที่เมนู option แล้วติ๊กเครื่องหมายถูกออกครับ

Re: ปรับปรุงสูตร ให้ทีครับ

Posted: Thu Dec 04, 2014 11:17 am
by snasui
seeper wrote:อีกนิดครับ ถ้าเปลี่ยนจาก 0 ที่ช่อง H เป็น ="" มันไม่ได้อะครับแก้อย่างไรครับ
:D ลองปรับสูตรเป็นด้านล่างครับ

Code: Select all

=IFERROR(INDEX($H$4:$H$50,SMALL(IF(FREQUENCY(IF($H$4:$H$50<>0,IF($H$4:$H$50<>"",MATCH($H$4:$H$50,$H$4:$H$50,0))),ROW($H$4:$H$50)-ROW($H$4)+1),ROW($H$4:$H$50)-ROW($H$4)+1),ROWS($I$4:I4))),"")

Re: ปรับปรุงสูตร ให้ทีครับ

Posted: Thu Dec 04, 2014 11:23 am
by seeper
โอ้ว มาย ก้อด ได้แว้วๆ สุดยอดเบย ขอบคุณครับ :cp: :cp:

Re: ปรับปรุงสูตร ให้ทีครับ

Posted: Thu Dec 04, 2014 11:37 am
by snasui
seeper wrote:โอ้ว มาย ก้อด ได้แว้วๆ สุดยอดเบย ขอบคุณครับ :cp: :cp:
:shock: คุณกำลังทำผิดกฎข้อ 1 ด้านบน :roll: ครับ

Re: ปรับปรุงสูตร ให้ทีครับ

Posted: Thu Dec 04, 2014 1:09 pm
by seeper
อ่าว ขอโทษครับ ดีใจไปหน่อย ^^

Re: ปรับปรุงสูตร ให้ทีครับ

Posted: Thu Dec 04, 2014 2:40 pm
by seeper
อาจารย์ว่างพอจะแปล เป็นภาษาอ่านให้ผมได้ไหมครับ

Re: ปรับปรุงสูตร ให้ทีครับ

Posted: Thu Dec 04, 2014 9:13 pm
by snasui
:D สูตรประเภทนี้ยากต่อการทำความเข้าใจ ต้องมีความเข้าใจเกี่ยวกับ Array เป็นพื้นฐานอย่างดีมาก่อนครับ
  1. จากสูตร =IFERROR(INDEX($H$4:$H$50,SMALL(IF(FREQUENCY(IF($H$4:$H$50<>0,IF($H$4:$H$50<>"",MATCH($H$4:$H$50,$H$4:$H$50,0))),ROW($H$4:$H$50)-ROW($H$4)+1),ROW($H$4:$H$50)-ROW($H$4)+1),ROWS($I$4:I4))),"")

    หมายถึง หาก INDEX($H$4:$H$50,SMALL(IF(FREQUENCY(IF($H$4:$H$50<>0,IF($H$4:$H$50<>"",MATCH($H$4:$H$50,$H$4:$H$50,0))),ROW($H$4:$H$50)-ROW($H$4)+1),ROW($H$4:$H$50)-ROW($H$4)+1),ROWS($I$4:I4))) เป็นค่าผิดพลาดให้แสดงค่าว่าง
  2. จากสูตร INDEX($H$4:$H$50,SMALL(IF(FREQUENCY(IF($H$4:$H$50<>0,IF($H$4:$H$50<>"",MATCH($H$4:$H$50,$H$4:$H$50,0))),ROW($H$4:$H$50)-ROW($H$4)+1),ROW($H$4:$H$50)-ROW($H$4)+1),ROWS($I$4:I4)))

    หมายถึง จากช่วงเซลล์ $H$4:$H$50 ให้นำลำดับที่เป็นผลลัพธ์ของ SMALL(IF(FREQUENCY(IF($H$4:$H$50<>0,IF($H$4:$H$50<>"",MATCH($H$4:$H$50,$H$4:$H$50,0))),ROW($H$4:$H$50)-ROW($H$4)+1),ROW($H$4:$H$50)-ROW($H$4)+1),ROWS($I$4:I4)) มาแสดง หากผลลัพธ์เป็น 10 หมายถึง จากช่วง $H$4:$H$50 ให้นำลำดับที่ 10 มาแสดง
  3. จากสูตร SMALL(IF(FREQUENCY(IF($H$4:$H$50<>0,IF($H$4:$H$50<>"",MATCH($H$4:$H$50,$H$4:$H$50,0))),ROW($H$4:$H$50)-ROW($H$4)+1),ROW($H$4:$H$50)-ROW($H$4)+1),ROWS($I$4:I4))

    หมายถึง จากผลลัพธ์สูตร IF(FREQUENCY(IF($H$4:$H$50<>0,IF($H$4:$H$50<>"",MATCH($H$4:$H$50,$H$4:$H$50,0))),ROW($H$4:$H$50)-ROW($H$4)+1),ROW($H$4:$H$50)-ROW($H$4)+1) ให้นำค่าที่น้อยที่สุดในลำดับที่เป็นผลลัพธ์ของ ROWS($I$4:I4) มาแสดง ซึ่งหากผลลัพธ์ของ ROWS($I$4:I4) เป็น 5 หมายถึงให้นำค่าที่น้อยที่สุดในลำดับที่ 5 มาแสดง
  4. จากสูตร IF(FREQUENCY(IF($H$4:$H$50<>0,IF($H$4:$H$50<>"",MATCH($H$4:$H$50,$H$4:$H$50,0))),ROW($H$4:$H$50)-ROW($H$4)+1),ROW($H$4:$H$50)-ROW($H$4)+1)

    หมายถึง หาก FREQUENCY(IF($H$4:$H$50<>0,IF($H$4:$H$50<>"",MATCH($H$4:$H$50,$H$4:$H$50,0))),ROW($H$4:$H$50)-ROW($H$4)+1) เป็นค่าตัวเลขที่ไม่ใช่ 0 ให้แสดงค่าลำดับเริ่มจาก 1 เช่น {1,2,3...}
  5. จากสูตร FREQUENCY(IF($H$4:$H$50<>0,IF($H$4:$H$50<>"",MATCH($H$4:$H$50,$H$4:$H$50,0))),ROW($H$4:$H$50)-ROW($H$4)+1)

    หมายถึงให้หาค่าความถึ่จากผลลัพธ์ของ IF($H$4:$H$50<>0,IF($H$4:$H$50<>"",MATCH($H$4:$H$50,$H$4:$H$50,0))) กับ ROW($H$4:$H$50)-ROW($H$4)+1 ศึกษาเพิ่มเติมจาก Link นี้ครับ viewtopic.php?f=3&t=2221
  6. จากสูตร IF($H$4:$H$50<>0,IF($H$4:$H$50<>"",MATCH($H$4:$H$50,$H$4:$H$50,0)))

    หมายถึง หาก $H$4:$H$50<>0 เป็นจริง ให้แสดงผลลัพธ์ของ IF($H$4:$H$50<>"",MATCH($H$4:$H$50,$H$4:$H$50,0)) หากไม่เป็นจริงให้แสดงค่า false
  7. จากสูตร IF($H$4:$H$50<>"",MATCH($H$4:$H$50,$H$4:$H$50,0))

    หมายถึง หาก $H$4:$H$50<>"" เป็นจริงให้แสดงผลลัพธ์ของ MATCH($H$4:$H$50,$H$4:$H$50,0) หากไม่เป็นจริงให้แสดงค่า false

Re: ปรับปรุงสูตร ให้ทีครับ

Posted: Mon Dec 08, 2014 11:30 am
by seeper
ขอบคุณครับนั่งทำความเข้าใจก่อน

Re: ปรับปรุงสูตร ให้ทีครับ

Posted: Mon Dec 08, 2014 3:37 pm
by seeper
ตรวจสอบคำอ่านนะครับ คือเรียงลำดับในช่วงที่มีข้อมูล 1,2,3...,n แล้วตรวจสอบหาลำดับที่ซ้ำกันโดยแสดงแต่ลำดับที่มีค่าน้อยที่สุดหลังจากนั้นแปลงลำดับเป็นข้อมูลในช่อง H ที่มีข้อมูลลำดับเดียวกัน


ผมพอเข้าใจถูกไหมครับอาจารย์ช่วยชี้แนะผมที

Re: ปรับปรุงสูตร ให้ทีครับ

Posted: Mon Dec 08, 2014 4:52 pm
by snasui
:D เป็นการให้ค่าลำดับข้อมูลตามเงือนไข คือเข้าเงื่อนไขจึงจะให้ค่าลำดับ ไม่เข้าเงื่อนไขก็ไม่ให้ค่าลำดับ จากนั้น List ค่าที่ได้ออกมาตามลำดับที่ให้ไว้ครับ