หน้าเว็บ

แสดงบทความที่มีป้ายกำกับ Rows แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ Rows แสดงบทความทั้งหมด

วันเสาร์ที่ 17 กุมภาพันธ์ พ.ศ. 2561

แยกข้อมูลในเซลล์โดยให้ค่าที่ซ้ำแสดงค่าเดียว

Smile ปกติแล้วการแยกค่าในเซลล์เดียวเป็นหลายเซลล์สามารถใช้ Data > Text to columns เข้ามาช่วยได้ และถ้าหากในเซลล์นั้นคั่นแต่ละส่วนด้วยอักขระใด ๆ แล้วจะยิ่งแยกได้โดยง่าย แต่หากว่าเซลล์นั้นมีค่าซ้ำกันหลายค่าแต่เราต้องการนำค่าที่ซ้ำกันนั้นมาแสดงเพียงค่าเดียวย่อมจะมีความยุ่งยากลำบากกว่าปกติ

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

ภาพแสดงแยกข้อมูลในเซลล์โดยให้ค่าที่ซ้ำแสดงค่าเดียว

ที่เซลล์ B2 เราสามารถเขียนสูตรได้ดังนี้

=IFERROR(INDEX(TRIM(MID(SUBSTITUTE( $A$2,",",REPT(" ",50)),50(ROW(INDIRECT("1:50"))-1)+1,50)),SMALL( IF(FREQUENCY(MATCH(TRIM(MID(SUBSTITUTE($A$2,",",REPT(" ",50)),50(ROW( INDIRECT("1:50"))-1)+1,50)),TRIM(MID(SUBSTITUTE($A$2,",",REPT(" ",50)), 50*(ROW(INDIRECT("1:50"))-)+1,50)),0),ROW(INDIRECT("1:"&LEN($A$2)))),
ROW(INDIRECT("1:"&LEN($A$2)))),ROWS(B$2:B2))),"")

Ctrl+Shift+Enter > คัดลอกสูตรลงด้านล่าง สามารถดาวน์โหลดไฟล์ตัวอย่างไปศึกษาได้ตามสะดวก

กรณีมีปัญหาเกี่ยวกับการใช้งาน Excel และ VBA สามารถสอบถามได้ที่ Excel Forum

วันเสาร์ที่ 21 ตุลาคม พ.ศ. 2560

การใช้ Count, Search และ Lookup ค้นหาข้อมูล

In love ปัญหาใหญ่ของผู้ที่ทำงานกับ Excel อย่างหนึ่งที่สำคัญคือการค้นหาข้อมูล แม้ว่า Excel จะมีเครื่องมือสำหรับการค้นหามาให้อย่างเพียบพร้อมแล้วก็ตาม กรณีต้องการค้นหาแล้วนำข้อมูลที่พบทั้งหมดมาแสดงให้ด้วยทันทีไม่ว่าข้อมูลนั้น จะอยู่ในคอลัมน์ใด ๆ ของฐานข้อมูลก็ตาม หากต้องทำด้วยการเข้าเมนูแล้วจะต้องผ่านหลายขั้นตอน

Video ด้านล่างนี้เป็นการแสดงการค้นหาข้อมูลด้วยการใช้ฟังก์ชั่นที่สำคัญคือ Count, Search และ Lookup ร่วมกัน เพื่อทำการค้นหาข้อมูลใด ๆ จากทุกคอลัมน์ของฐานข้อมูล แล้วนำข้อมูลที่พบมาแสดงยังพื้นที่เป้าหมายตามต้องการ ซึ่งจะมีการอธิบายและแปลความหมายของแต่ละฟังก์ชั่นอย่างละเอียด มีความเป็นอัตโนมัติและช่วยลดเวลาให้การค้นหาข้อมูลใด ๆ จากข้อมูลจำนวนมากได้อย่างมหาศาล Surprised smile

Video แสดงการใช้ Count, Search และ Lookup ค้นหาข้อมูล

ดาวน์โหลดไฟล์ตัวอย่างได้ที่ Example file

ศึกษาตัวอย่างการใช้งาน Count, Seach และ Lookup เพิ่มเติมได้ที่ Count Seach and Lookup

สอบถามปัญหาการใช้งาน Excel และ VBA ได้ที่ snasui.com

วันเสาร์ที่ 1 กรกฎาคม พ.ศ. 2560

การนำข้อมูลจากหลาย Sheet มาต่อกันใน Sheet เดียว (2)

Thinking smile ปัญหาสำคัญที่เราพบเห็นอยู่เป็นประจำคือ เราต้องสรุปข้อมูลจากข้อมูลที่แยกออกเป็นชีต ๆ ทำให้ต้องใช้เวลาไปกับการนำข้อมูลเหล่านั้นมาเรียงต่อกันในชีตเดียวเสียก่อน ทราบหรือไม่ว่าเราสามารถใช้สูตรนำข้อมูลหลายชีตมาต่อกันในชีตเดียวได้ VDO ด้านล่างนี้แสดงถึงการใช้สูตรเพื่อนำข้อมูลจากหลายชีตมาต่อกันในชีตเดียว ซึ่งข้อมูลปลายทางจะเปลี่ยนตามข้อมูลต้นทางได้ตลอดเวลา สามารถปรับปรุงเปลี่ยนแปลงข้อมูลได้ง่ายไม่ต้องเกิดการทำงานซ้ำ ๆ โดยไม่ต้องพึ่งพาการเขียน VBA Flirt male

VDO แสดงการนำข้อมูลหลายชีตมาต่อกันในชีตเดียว

วันศุกร์ที่ 17 กุมภาพันธ์ พ.ศ. 2560

การจัดเรียงบ้านเลขที่

การจัดเรียงบ้านเลขที่นั้นไม่สามารถทำได้อย่างง่าย ๆ เนื่องจากบ้านเลขที่มักจะมีเครื่องหมายทับ (/) ปนอยู่ด้วย ทำให้เครื่องมือของ Excel ที่ใช้ในการจัดเรียงไม่สามารถให้ผลลัพธ์ที่ต้องการได้

การจัดเรียงบ้านเลขที่จึงต้องอาศัยวิธีการอื่นเข้ามาช่วย เช่นการแบ่งบ้านเลขที่ออกเป็น 2 คอลัมน์แล้วค่อยจัดเรียง หรือสามารถใช้สูตร Array เข้ามาช่วยได้

ภาพการเรียงบ้านเลขที่จากน้อยไปหามากด้วยสูตร

 

จากภาพด้านบนจะเป็นการนำข้อมูลบ้านเลขที่ในคอลัมน์ A มาเรียงใหม่ โดยให้เรียงจากน้อยไปหามาก

สูตรในเซลล์ C2 คือ

=INDEX($A$2:$A$14,MATCH(SMALL(--SUBSTITUTE(IF(ISNUMBER(FIND("/",$A$2:$A$14)),
$A$2:$A$14,$A$2:$A$14&"/"),"/",REPT("0",10-LEN(MID($A$2:$A$14,
FIND("/",$A$2:$A$14&"/")+1,255)))),ROWS(C$2:C2)),--SUBSTITUTE(IF(
ISNUMBER(FIND("/",$A$2:$A$14)),$A$2:$A$14,$A$2:$A$14&"/"),"/",REPT(
"0",10-LEN(MID($A$2:$A$14,FIND("/",$A$2:$A$14&"/")+1,255)))),0))

ซึ่งจะต้องกดแป้นให้รับสูตรด้วย Ctrl+Shift+Enter เนื่องจากเป็นสูตร Array จากนั้น Copy สูตรลงด้านล่าง สามารถดาวน์โหลดไฟล์แนบตามด้านล่างไปศึกษาได้ตามสะดวกครับ

วันเสาร์ที่ 4 กุมภาพันธ์ พ.ศ. 2560

สูตรหาลำดับข้อความภายในอีกข้อความ

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

สำหรับการแยกข้อความออกมาเป็นข้อความละเซลล์เพื่อง่ายต่อการจัดการหากว่าเราทราบแน่ชัดว่าข้อความนั้น ๆ แบ่งด้วยอักขระใด เราสามารถแบ่งด้วย Text to columns ได้อย่างง่าย ๆ และใช้ฟังก์ชั่นที่ไม่ซับซ้อนนักในการหาลำดับที่ของแต่ละข้อความออกมาได้

จากภาพด้านล่าง เซลล์ A2 เป็นตัวอย่างข้อความต้นทางหลายข้อความคั่นแต่ละข้อความด้วยเครื่องหมายคอมม่า ส่วนเซลล์ C2 เป็นข้อความเพียงบางส่วนที่เราจะนำไปหาจากข้อความใน A2 ว่าแต่ละข้อความใน C2 อยู่ในลำดับที่เท่าไรของ A2 โดยให้แสดงลำดับที่พบเรียงลงไปด้านล่าง เริ่มลำดับแรกที่เซลล์ D2

เมื่อนำแต่ละข้อความในเซลล์ C2 ไปหาจากข้อความในเซลล์ A2 จะพบว่า

  1. A อยู่ในลำดับที่ 1
  2. B อยู่ในลำดับที่ 2
  3. AB อยู่ในลำดับที่ 6
  4. K อยู่่ในลำดับที่ 9
  5. CD อยู่ในลำดับที่ 3

ภาพแสดงการนำแต่ละข้อความในเซลล์ C2 ไปหาว่าอยู่ลำดับที่เท่าไรจากข้อความใน A2

[caption id="attachment_2767" align="alignnone" width="600"] String order in other string[/caption]

เราสามารถเขียนสูตรที่ D2 เพื่อหาคำตอบดังนี้

=IFERROR(INDEX(MATCH(MID($C$2,SMALL(IF(MID(","&$C$2&",",ROW(
INDIRECT("1:"&LEN($C$2))),1)=",",ROW(INDIRECT("1:"&LEN($C$2)))),
ROW(INDIRECT("1:"&LEN($C$2)))),SMALL(IF(MID($C$2&",",ROW(
INDIRECT("1:"&LEN($C$2)+1)),1)=",",ROW(INDIRECT("1:"&LEN($C$2)+1))),
ROW(INDIRECT("1:"&LEN($C$2))))-SMALL(IF(MID(","&$C$2&",",ROW(
INDIRECT("1:"&LEN($C$2))),1)=",",ROW(INDIRECT("1:"&LEN($C$2)))),
ROW(INDIRECT("1:"&LEN($C$2))))),MID($A$2,SMALL(IF(MID(","&$A$2&",",
ROW(INDIRECT("1:"&LEN($A$2))),1)=",",ROW(INDIRECT("1:"&LEN($A$2)))),
ROW(INDIRECT("1:"&LEN($A$2)))),SMALL(IF(MID($A$2&",",ROW(
INDIRECT("1:"&LEN($A$2)+1)),1)=",",ROW(INDIRECT("1:"&LEN($A$2)+1))),
ROW(INDIRECT("1:"&LEN($A$2))))-SMALL(IF(MID(","&$A$2&",",
ROW(INDIRECT("1:"&LEN($A$2))),1)=",",ROW(INDIRECT("1:"&LEN($A$2)))),
ROW(INDIRECT("1:"&LEN($A$2))))),0),ROWS(D$2:D2)),"")

Ctrl+Shift+Enter > Copy ลงด้านล่าง

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

วันอาทิตย์ที่ 9 ตุลาคม พ.ศ. 2559

การเลือกข้อมูลจากฐานข้อมูลมาแสดงตามเงื่อนไขที่ต้องการ

Open-mouthed smile ในการนำข้อมูลจากแหล่งใด ๆ มาแสดงตามเงื่อนไขนั้นสามารถทำได้หลายวิธี เช่น Advanced Filter, Array Fomulas, PivotTable, Consolidation หรือ เขียนโปรแกรมด้วย VBA ซึ่งจากที่กล่าวมาทั้งหมดเป็นการกระทำโดยไม่ต้องเพิ่มคอลัมน์ช่วยที่ฐานข้อมูลแต่อย่างใด ลักษณะเช่นนี้เป็นแนวทางการทำงานกับฐานข้อมูลที่ควรจะเป็น โดยหลักการแล้วในฐานข้อมูลเราไม่ควรมีสูตรใด ๆ หรือหากมีก็ควรมีให้น้อยที่สุด ทั้งนี้เนื่องจากหากฐานข้อมูลมีขนาดใหญ่และบางคอลัมน์เป็นสูตรแล้ว จะทำให้ไฟล์มีขนาดใหญ่ขึ้นอีกมากทั้งใช้ระยะเวลาในการคำนวณนานกว่าปกติ

วิธีที่จะนำเสนอต่อไปนี้เป็นวิธีการที่ต้องมีคอลัมน์ช่วยในฐานข้อมูลเพื่อระบุว่าบรรทัดใดเข้าเงื่อนไขและถูกเลือกไปแสดงผล เพียงเพื่อให้เห็นวิธีการแบบง่ายในการดึงข้อมูลจากฐานข้อมูลตามเงื่อนไขที่ต้องการ สะดวกในการศึกษา ประยุกต์ใช้ และปรับปรุงแก้ไขสูตรที่เกี่ยวข้องได้เองในภายหลัง โดยสมมุติตัวอย่างว่าเป็นฐานข้อมูลเกี่ยวกับผลิตสินค้าและต้องการให้ผู้ใช้เลือกแสดงรายงานโดยมี “ปี” และ “เดือน” เป็นเงื่อนไข

ลักษณะงานนี้จะมีส่วนประกอบอยู่ 3 ส่วนประกอบหลักคือ

  1. ฐานข้อมูล
  2. ส่วนกำหนดเงื่อนไข
  3. ส่วนที่ใช้แสดงผล

ภาพประกอบการแสดงรายงานโดยระบุเงื่อนไขที่ต้องการ

SelectDataWithMultiConditions_001

จากภาพด้านบน มีขั้นตอนในการทำงานดังนี้

A. กำหนดให้เลือก “ปี” และ “เดือน” โดยไม่ต้องคีย์ลงไปในเซลล์โดยตรง

  1. คลิกที่ J2 > เข้าเมนู Data > Data Validation แล้วกำหนดตามภาพ
    SelectDataWithMultiConditions_002
  2. คลิกที่ J3 > เข้าเมนู Data > Data Validation แล้วกำหนดตามภาพ
    SelectDataWithMultiConditions_003

B. เขียนสูตรเพื่อดึงข้อมูลมาแสดงผล หลังจากเลือก “เดือน” และ “ปี”

  1. เซลล์ J5 คีย์สูตรเพื่อนับว่าพบตามเงื่อนไขกี่รายการ
    =COUNTIFS($B$2:$B$3000,J2,$C$2:$C$3000,J3)
    Enter
  2. เซลล์ G2 คีย์สูตรเพื่อตรวจสอบว่ารายการใดเข้าเงื่อนไขให้แสดงหมายเลขลำดับ
    =IF(AND(B2=$J$2,C2=$J$3),COUNT(G$1:G1)+1,"")
    Enter > Copy ลงด้านล่างตามจำนวนข้อมูลที่มี
  3. เซลล์ I6 คีย์สูตรเพื่อแสดงรายการที่พบตามเงื่อนไข
    =IF(ROWS(I$6:I6)>$J$4,"",LOOKUP(ROWS(I$6:I6),$G$2:$G$3000,A$2:A$3000))
    Enter > Copy ไปด้านขวาถึง N6 แล้ว Copy I6:N6 ลงด้านล่าง

เมื่อเลือก “ปี” และ “เดือน” ที่เซลล์ J2 และ J3 แล้ว จะนำข้อมูลจากฐานข้อมูลที่ตรงกับเงื่อนไขมาแสดง Thumbs up

Revised: January 29, 2017 at 07:02

การนำข้อมูลมาแสดงตามจำนวนรายการที่กำหนดโดยสามารถระบุหน้าที่ต้องการ

Smile กรณีฐานข้อมูลมีรายการจำนวนมากและเราต้องการนำมาแสดงเฉพาะจำนวนบรรทัดที่ต้องการ เฉพาะหน้าที่ต้องการเพื่อที่ว่าปริมาณข้อมูลจะได้ไม่มากเกินไป เหมาะกับการประยุกต์ใช้ในการนำข้อมูลมาลงแบบฟอร์มต่าง ๆ เหมาะแก่การดูหรือเพื่อการพิมพ์ เรา สามารถประยุกต์ใช้ Scroll Bar มาช่วยในการทำงานลักษณะนี้ได้

การทำรายงานลักษณะดังกล่าวนั้น จะมีส่วนประกอบหลัก ๆ ตามด้านล่าง

  1. ฐานข้อมูล
  2. รายงานตามจำนวนบรรทัดที่ต้องการ
  3. Scroll Bar กำหนดจำนวนบรรทัดที่ต้องการนำมาแสดงผล
  4. Scroll Bar กำหนดหน้าที่ต้องการนำมาแสดงผล

ภาพประกอบการนำข้อมูลจากฐานข้อมูลมาแสดงตามจำนวนบรรทัดที่กำหนดโดยสามารถระบุหน้าที่ต้องการนำมาแสดง

ShowData_Line_Page001

จากภาพด้านบนมีขั้นตอนการทำงานดังนี้

A. แสดงเมนู Developer เพื่อสะดวกต่อการเรียกใช้ Scroll Bar

  1. คลิกขวาที่ตำแหน่งใด ๆ บน Ribbon
  2. เลือก Customize Ribbon
  3. เลือก Developer
  4. คลิก OK

การทำเช่นนี้จะมีเมนู Developer ขึ้นมาให้ใช้งาน ดูขั้นตอนตามภาพด้านล่างประกอบ

ShowData_Line_Page002

ShowData_Line_Page003

B. สร้างปุ่ม Scroll Bar ขึ้นมา 2 ปุ่ม เพื่อใช้คลิกเลือกจำนวนบรรทัดและระบุหน้าที่ต้องการแสดงผล โดยมีขั้นตอนคือ

  1. เข้าเมนู Developer
  2. คลิกปุ่ม Insert
  3. คลิกปุ่ม Scroll Bar
  4. นำไปวาดในตำแหน่งที่ต้องการ

ภาพประกอบการสร้างปุ่ม Scroll Bar

ShowData_Line_Page004

C. กำหนดค่าให้กับ Scroll Bar แต่ละปุ่มโดยคลิกขวาที่ Scroll Bar แล้วเลือก Format Control

  1. กำหนดค่าให้กับปุ่มที่ใช้แสดง "จำนวนรายการ" ตามภาพ
    ShowData_Line_Page005
  2. กำหนดค่าให้กับปุ่มที่ใช้แสดง "หน้าที่" ตามภาพ
    ShowData_Line_Page006

D. เขียนสูตรเพื่อนำข้อมูลมาแสดงตามเงื่อนที่เลือกจาก Scroll Bar

  1. เซลล์ M2 คีย์สูตร
    =K2*L2
    Enter
  2. เซลล์ F2 คีย์สูตร
    =IF(ROWS(F$2:F2)>$K$2,"",$M$2-$K$2+ROWS(F$2:F2))
    Enter > Copy ลงด้านล่าง
  3. เซลล์ G2 คีย์สูตร
    =IFERROR(INDEX(B$2:B$41,$F2),"")
    Enter > Copy ไปด้านขวาถึง I2 แล้ว Copy ลงด้านล่าง
  4. เซลล์ L3 คีย์สูตร
    ="หน้าละ "&K2&" รายการ"
    Enter
  5. เซลล์ L4 คีย์สูตร
    ="หน้าที่ "&L2
    Enter

หลังจากการกำหนดค่าให้กับ Scroll Bar และเขียนสูตรต่าง ๆ เรียบร้อยแล้ว สามารถคลิกที่ Scroll Bar เพื่อเลือกดูข้อมูลได้ตามต้องการ Smile

Revised: January 29, 2017 at 07:00

วันอาทิตย์ที่ 28 เมษายน พ.ศ. 2556

การเปรียบเทียบข้อมูลจาก 2 ชีทแล้วนำผลต่างไปแสดงในชีทที่ 3

Light bulb การนำข้อมูลจาก 2 ชีทมาเปรียบเทียบกันแล้วสรุปข้อมูลที่ต่างกันมาไว้ในชีทที่ 3 วิธีหนึ่งที่สามารถทำได้และไม่ยุ่งยากลำบากนักก็โดยใช้ PivotTable ซึ่งควรนำข้อมูลทั้งสองชีทมาต่อกันก่อนแล้วเพิ่มคอลัมน์ที่ระบุว่าข้อมูลใดเป็นของชีทเมื่อทำ PivotTable แล้วจะสามารถทราบได้ว่าข้อมูลที่แตกต่างกันระหว่าง 2 ชีทคือข้อมูลใดบ้าง

สำหรับการสรุปผลต่างของข้อมูลแล้วแสดงรายการข้อมูลที่ต่างกันด้วยสูตรดูเหมือนจะเป็นเรื่องยากลำบากที่จะทำเช่นนี้ แต่ก็ไม่เกินความสามารถของ Excel โดยไม่ต้องพึ่งพา VBA แต่อย่างใด แต่จะมีหลายลำดับขั้นตอน ดังตัวอย่างตามภาพด้านล่างซึ่งเป็นข้อมูลของ Sheet1, Sheet2 และ Sheet3 ซึ่งเป็นชีทสรุปข้อมูล

ภาพข้อมูลใน Sheet1

image

ภาพข้อมูลใน Sheet2

image

ภาพการสรุปผลต่างของข้อมูลระหว่าง Sheet1 กับ Sheet2

image

จากภาพด้านบนจะเป็นการหาผลต่างระหว่าง 2 ชีทโดยยึดค่าในคอลัมน์ A เป็นหลัก เราสามารถเขียนสูตรที่ Sheet3 ได้ดังนี้ครับ

  1. ที่เซลล์ G1:G2 คีย์ ไม่มีในชีท1, ไม่มีในชีท2 ตามลำดับ
  2. ที่เซลล์ H1 คีย์สูตร
    =SUM(IF(ISNA(MATCH(sheet2!A2:A117,sheet1!A2:A119,0)),1))
    Ctrl+Shift+Enter
  3. ที่เซลล์ H2 คีย์สูตร
    =SUM(IF(ISNA(MATCH(sheet1!A2:A119,sheet2!A2:A117,0)),1))
    Ctrl+Shift+Enter
  4. ที่เซลล์ H3 คีย์สูตร
    =SUM(H1:H2)
    Enter
  5. ที่เซลล์ I1 คีย์สูตร
    =SUM(H$1:H1)-H1+1
    Enter > Copy ไปยัง I2
  6. ที่เซลล์ E3 คีย์สูตร
    =IF(ROWS(E$3:E3)>$H$3,"",LOOKUP(ROWS(E$3:E3),$I$1:$I$2,$G$1:$G$2))
    Enter > Copy ลงด้านล่าง
  7. ที่เซลล์ B3 คีย์สูตร
    =IF(ROWS(B$3:B3)>$H$3,"",CHOOSE(MATCH($E3,$G$1:$G$2,0),INDEX(sheet1!B$2:B$119,SMALL(IF(ISNA(MATCH(sheet2!$A$2:$A$117,sheet1!$A$2:$A$119,0)),ROW(sheet2!$A$2:$A$117)-ROW(sheet2!$A$2)+1),COUNTIF($E$3:$E3,$E3))),INDEX(sheet1!B$2:B$119,SMALL(IF(ISNA(MATCH(sheet1!$A$2:$A$119,sheet2!$A$2:$A$117,0)),ROW(sheet1!$A$2:$A$119)-ROW(sheet1!$A$2)+1),COUNTIF($E$3:$E3,$E3)))))
    Ctrl+Shift+Enter > Copy ไปทางขวาและลงด้านล่าง

การสรุปผลต่างออกมาลักษณะนี้จะช่วยลดเวลาในการตรวจสอบข้อมูลด้วยสายตาและลดความผิดพลาดลงได้ครับ Thumbs up

วันอาทิตย์ที่ 30 ธันวาคม พ.ศ. 2555

การค้นหาบางอักขระในข้อความ

Smile สำหรับการค้นหาบางอักขระในข้อความ โดยไม่คำนึงว่าว่าอักขระนั้นจะมีจำนวนเท่าใดและอยู่ส่วนใดของข้อความ เราสามารถใช้สูตรมาช่วยค้นหาได้ครับ

ยกตัวอย่างเช่น มีรายชื่อตัวยาอยู่ในช่วงเซลล์ A2:A10 ต้องการคีย์ค้นหาในเซลล์ C2 แค่บางอักขระแล้วให้แสดงรายชื่อตัวยาออกมาในเซลล์ D2 เป็นต้นไป

เราสามารถเขียนสุตรได้ตามด้านล่างครับ

  1. ที่ C2 คีย์คำค้นตามต้องการ
  2. คีย์สูตรที่ D2 ตามด้านล่าง
    =IFERROR(INDEX($A$2:$A$10,SMALL(IF(MMULT(ISNUMBER(SEARCH(MID($C$2,TRANSPOSE(ROW(INDIRECT("1:"&LEN($C$2)))),1),$A$2:$A$10))+0,LEN(MID($C$2,ROW(INDIRECT("1:"&LEN($C$2))),1)))=LEN($C$2),ROW($A$2:$A$10)-ROW($A$2)+1),ROWS(D$2:D2))),"")
    Ctrl+Shift+Enter > Copy ลงด้านล่าง

ภาพตัวอย่างการค้นหาบางอักขระในข้อความ

image

วันเสาร์ที่ 11 มิถุนายน พ.ศ. 2554

การแสดงรายการซ้ำตามจำนวนที่กำหนด

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

Surprised smile กรณีแบบยากเราจะใช้สูตร Array ในการแสดงรายการซ้ำ ๆ ตามจำนวนที่กำหนด ยกตัวอย่างเช่นตามภาพด้านล่าง ข้อมูลอยู่ที่ A2:A7 จำนวนที่ระบุว่าซ้ำกันกี่ครั้งอยู่ที่ B2:B7 โดยจะนำรายการมาแสดงตั้งแต่ F2 เป็นต้นไป

ภาพแสดงการแสดงรายการซ้ำตามจำนวนที่กำหนดแบบยาก

AdvanceReptItem

วิธีการ

  1. ที่เซลล์ B8 คีย์สูตรเพื่อหายอดรวมตัวเลขทั้งหมด เพื่อประโยชน์ในการกำหนดจำนวนบรรทัดสูงสุดที่จะแสดงรายการ
    =SUM(B2:B7)
    Enter
  2. ที่เซลล์ B9 หาค่าสูงสุดของช่วง B2:B7
    =MAX(B2:B7)
    Enter
  3. ที่เซลล์ F2 คีย์สูตรเพื่อแสดงรายการ
    =IF(ROWS($F$2:F2)>$B$8,"",INDEX($A$2:$A$7,SMALL(IF(TRANSPOSE(ROW(INDIRECT("1:"&$B$9)))<=$B$2:$B$7,ROW($B$2:$B$7)-ROW($B$2)+1),ROWS($F$2:F2))))
    Ctrl+Shift+Enter > Copy ลงด้านล่างตามต้องการ สังเกตการกดแป้นจะต้องกด Ctrl+Shift ค้างไว้ก่อนแล้วตามด้วย Enter หากกดแป้นถูกต้องจะเห็นเครื่องหมายปีกกาคร่อมสูตร ปีกกานี้จะคีย์เข้าไปเองไม่ได้ครับ การแก้ไขปรับปรุงสูตรจะต้องกด Ctrl+Shift+Enter ทุกครั้ง

Open-mouthed smile กรณีแบบง่ายจะใช้สูตร Lookup และเพิ่ม C2:C7 มาช่วย โดยจะนำข้อมูลมาแสดงตั้งแต่ G2 เป็นต้นไปตามภาพด้านล่างครับ

ภาพแสดงการแสดงรายการซ้ำตามจำนวนที่กำหนดแบบง่าย

NormalReptItem

วิธีการ

  1. ที่เซลล์ B8 คีย์สูตรเพื่อหายอดรวมตัวเลขทั้งหมด เพื่อประโยชน์ในการกำหนดจำนวนบรรทัดสูงสุดที่จะแสดงรายการ
    =SUM(B2:B7)
    Enter
  2. ที่เซลล์ C2 คีย์สูตรเพื่อประโยชน์ในการ Lookup ข้อมูล
    =SUM(B$2:B2)-B2+1
    Enter > Copy ลงด้านล่าง
  3. ที่เซลล์ G2 คีย์สูตรเพื่อแสดงรายการ
    =IF(ROWS($G$2:G2)>$B$8,"",LOOKUP(ROWS($G$2:G2),$C$2:$C$7,$A$2:$A$7))
    Enter > Copy ลงด้านล่างตามต้องการ

วันศุกร์ที่ 10 มิถุนายน พ.ศ. 2554

การนำข้อมูลที่อยู่ในคอลัมน์เดียวไปเรียงหลายคอลัมน์

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

ตัวอย่างเช่นข้อมูลอยู่ที่ A2:A100 และต้องการเรียงใหม่ที่คอลัมน์ B เริ่มจาก B2 เป็นต้นไปโดยสามารถเลือกได้ว่าแต่ละคอลัมน์จะให้มีข้อมูลเพียงกี่บรรทัด

สามารถทำได้ดังนี้

  1. ที่เซลล์ B1 ทำ Validation เพื่อเลือกจำนวนบรรทัดที่ต้องการ
  2. ที่เซลล์ B2 คีย์สูตรเพื่อจัดเรียงข้อมูลใหม่
    =IF(ROWS(B$2:B2)>$B$1,"",IFERROR(INDEX($A$2:$A$100,ROWS(B$2:B2)+($B$1*(COLUMNS($B2:B2)-1))),"")
    Enter > Copy ไปด้านขวาและลงด้านล่างตามต้องการ

    สูตรข้างต้นใช้กับ Excel Version 2007 เป็นต้นไป ส่วน Excel 2003 สามารถใช้สูตรตามด้านล่างครับ
    =IF(OR(ROWS(B$2:B2)>$B$1,ROWS(B$2:B2)+($B$1*(COLUMNS($B2:B2)-1))>COUNTA($A$2:$A$100)),"",INDEX($A$2:$A$100,ROWS(B$2:B2)+($B$1*(COLUMNS($B2:B2)-1))))
    Enter > Copy ไปทางด้านขวาและลงด้านล่าง

ภาพประกอบการนำข้อมูลที่อยู่ในคอลัมน์เดียวไปเรียงหลายคอลัมน์

ReArrangeDataFromOneToManyComumn

วันจันทร์ที่ 18 เมษายน พ.ศ. 2554

การจัดเรียงข้อมูลจากน้อยไปหามากหรือตรงกันข้ามด้วยสูตร

สำหรับการจัดเรียงข้อมูลด้วยสูตรนั้น ประโยชน์ที่ได้คือสามารถลดเวลาในการจัดเรียงข้อมูลกรณีที่ข้อมูลเปลี่ยนแปลงบ่อย ๆ เนื่องจากข้อมูลถูกจัดเรียงอัตโนมัติตามที่ต้องการ ไม่ต้องทำการจัดเรียงเองทุกครั้งที่ข้อมูลเปลี่ยนแปลง แต่สูตรที่ใช้เรียงข้อมูลนั้นค่อนข้างยากต่อการทำความเข้าใจเนื่องจากต้องใช้สูตร Array

ตามด้านล่างจะเป็นภาพการเรียงข้อมูลจากน้อยไปหามากด้วยสูตรเปรียบเทียบกับการเรียงข้อมูลด้วยเมนู Data > Sort

ภาพการเรียงข้อมูลจากน้อยไปหามากด้วยสูตร

SortByFormulas

โดยมีวิธีการดังนี้

  1. ข้อมูลอยู่ที่เซลล์ A1:A12
  2. ที่ B1 คีย์สูตรเพื่อนับว่ามีเซลล์ที่มีข้อมูลจำนวนเท่าไร

    =Counta(A:A)

    Enter
  3. ที่เซลล์ C1 คีย์สูตรเพื่อเรียงข้อมูลจากน้อยไปหามาก

    =IF(ROWS(C$1:C1)>$B$1,"",INDEX($A$1:$A$12,MATCH(SMALL(IF(ISERR(CODE($A$1:$A$12)),"",CODE($A$1:$A$12)+COUNTIF($A$1:$A$12,"<"&$A$1:$A$12)),ROWS(C$2:C2)),CODE($A$1:$A$12)+COUNTIF($A$1:$A$12,"<"&$A$1:$A$12),0)))

    Ctrl+Shift+Enter > Copy ลงด้านล่าง

Note:

กรณีต้องการเรียงข้อมูลจากมากไปหาน้อยให้เปลี่ยน Small เป็น Large

วันอาทิตย์ที่ 3 เมษายน พ.ศ. 2554

เทคนิคการตัดข้อความที่คั่นด้วยเครื่องหมายต่าง ๆ

การตัดข้อความกรณีที่มีเครื่องหมายต่าง ๆ คั่นระหว่างข้อความ นอกจากจะใช้ Text to columns ได้แล้ว เรายังสามารถใช้สูตรมาจัดการได้ เพื่อจะได้ไม่ต้องทำ Text to columns ซ้ำ ๆ ครับ

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

ตัวอย่างตามภาพด้านล่าง ข้อความอยู่ที่เซลล์ A1 และคั่นด้วยเครื่องหมายคอมม่า (,) เราต้องการตัดข้อความออกเป็นแต่ละค่าโดยแสดงที่ A3 เป็นต้นไป

ExtractText

การแบ่งแต่ละข้อความเราสามารถใช้สูตรดังนี้ครับ

  1. ที่ A2 คีย์
    =Len(A1)
    Enter
  2. ที่ A3 คีย์สูตรเพื่อแบ่งข้อความ
    =TRIM(MID(SUBSTITUTE(","&A$1,",",REPT(" ",A$2)),ROWS(A$3:A3)*A$2,A$2))
    Enter > Copy ลงด้านล่าง

เราสามารถแกะสูตรในข้อ 2 ตามด้านล่างครับ

  1. จากสูตรในข้อ 2 หมายถึงให้ตัดช่องว่างที่เกินความจำเป็นจากผลลัพธ์ของสูตร MID(SUBSTITUTE(","&A$1,",",REPT(" ",A$2)),ROWS(A$3:A3)*A$2,A$2)
  2. จากสูตร MID(SUBSTITUTE(","&A$1,",",REPT(" ",A$2)),ROWS(A$3:A3)*A$2,A$2)) หมายถึงให้ตัดข้อความที่ได้จากผลลัพธ์ของสูตร SUBSTITUTE(","&A$1,",",REPT(" ",A$2)) โดยเริ่มจากตำแหน่งที่ได้จากผลลัพธ์ของสูตร ROWS(A$3:A3)*A$2 มาเป็นจำนวนอักขระตามค่าในเซลล์ A2
  3. จากสูตร SUBSTITUTE(","&A$1,",",REPT(" ",A$2)) หมายถึงให้เปลี่ยนค่าอักขระ "," ในข้อความ ","&A$1 ให้เป็นอักขระ REPT(" ",A$2)
  4. จากสูตร REPT(" ",A$2) หมายถึงให้แสดงค่า " " เป็นจำนวนครั้งเท่ากับค่าใน A2
  5. จากสูตร ROWS(A$3:A3)*A$2 หมายถึงให้นำจำนวนแถวในช่วง A$3:A3 มาคูณกับค่าใน A2 เพื่อจะใช้เป็นจุดเริ่มตัดข้อความ

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

การ Lookup ข้อมูลพร้อมทำ Hyperlink กลับไปยังต้นแหล่ง

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

ยกตัวอย่างการดึงข้อมูลตามเงื่อนไขตามภาพด้านล่าง ใน Sheet2 เป็นการดึงข้อมูลเฉพาะเซลล์ที่มีความยาวข้อมูลระหว่าง 60 ถึง 70 ตัวอักษรจาก Sheet1 และสำหรับเซลล์ที่แสดงผลนั้น สามารถอ้างถึงตำแหน่งที่มาของข้อมูลและยังมีความพิเศษที่สามารถคลิกลงบนรายการที่สนใจ เพื่อ Link กับไปยังข้อมูลต้นแหล่งได้อีกด้วย

ภาพประกอบการ Lookup พร้อมทำ Hyperlink กลับไปยังต้นแหล่ง

ListAndHyperlink

ตามวิธีการด้านล่างนี้จะต้อง Save ไฟล์ก่อน เพราะจะต้องนำชื่อไฟล์มาใช้ในสูตร

ซึ่งมีขั้นตอนดังนี้

  1. Sheet1 เซลล์ B1 คีย์ 0 เพื่อใช้เป็นเซลล์ต้นทางในสูตร Lookup
  2. Sheet1 เซลล์ B2 คีย์สูตรเพื่อให้ลำดับกับข้อมูลที่ตรงตามเงื่อนไข
    =IF(AND(LEN(A2)>=60,LEN(A2)<=70),LOOKUP(9.99999999999999E+307,$B$1:B1)+1,"")
    Enter > Copy ลงด้านล่าง
  3. Sheet2 เซลล์ B1 คีย์สูตรเพื่อหาจำนวนที่พบทั้งหมดจากข้อ 2
    =LOOKUP(9.99999999999999E+307,Sheet1!B:B)
    Enter
  4. Sheet2 เซลล์ A2 คีย์สูตรเพื่อ List รายการที่ตรงตามเงื่อนไข
    =IF(ROWS($A$2:A2)>$B$1,"",HYPERLINK("[LookupListHyperlink.xls]"&"Sheet1!A"&MATCH(ROWS($A$2:A2),Sheet1!$B:$B),"Sheet1 Cell A"&MATCH(ROWS($A$2:A2),Sheet1!$B:$B)))
    Enter > Copy ลงด้านล่าง

Note: จากสูตรในข้อ 4 ขอเพิ่มเติมคร่าว ๆ เพื่อเป็นแนวทางครับ

  1. LookupListHyperlink.xls คือชื่อไฟล์
  2. Sheet1!A เป็นการระบุว่าให้นำมาจาก Sheet1 คอลัมน์ A
  3. MATCH(ROWS($A$2:A2),Sheet1!$B:$B) หาตำแหน่งที่พบข้อมูล

วันพุธที่ 9 ธันวาคม พ.ศ. 2552

การนำข้อมูลจากหลาย Sheet มาต่อกันใน Sheet เดียว

สำหรับข้อมูลที่อยู่ในฟอร์มเดียวกันแต่แยกเป็นหลาย Sheet และต้องการนำมาต่อกันเป็นฐานข้อมูลใน Sheet เดียวกันนั้น สามารถใช้สูตรทำได้ครับ แต่อาจจะมีวิธีการหลายขั้นตอน ดังจะแสดงตามด้านล่าง

ภาพ Sheet ที่ใช้รวมข้อมูล 

MergeMultipleSheet01

ภาพ Sheet ที่ 1 

MergeMultipleSheet02

ภาพ Sheet ที่ 2 

MergeMultipleSheet03

ภาพ Sheet ที่ 3 

MergeMultipleSheet04

จากภาพด้านบนเป็นการนำข้อมูล Sheet1, 2, 3 มาต่อกัน ให้ทำตามลำดับดังนี้ครับ

  1. เขียนชื่อชีทเรียงกันไว้ตามต้องการที่ G1:G3
  2. เซลล์ H1 คีย์สูตรเพื่อนับว่ามีข้อมูลใน Sheet1 เท่าไร
    =COUNTA(INDIRECT("'"&G1&"'!"&"A2:A65536"))
    Enter แล้ว Copy ลงด้านล่าง
  3. เซลล์ H4 รวมจำนวนจากด้านบน คีย์
    =SUM(H1:H3)
    Enter
  4. เซลล์ I1 ใช้สูตรในการ Run ข้อมูลใหม่เพื่อใช้ในสูตร Lookup
    =SUM($H$1:H1)-H1+1
    Enter แล้ว Copy ลงด้านล่าง
  5. เซลล์ E2 คีย์สูตรเพื่อ List รายชื่อ Sheet
    =IF(ROWS($E$2:E2)>$H$4,"",LOOKUP(ROWS($E$2:E2),$I$1:$I$3,$G$1:$G$3))
    Enter แล้ว Copy ไปด้านล่าง
  6. เซลล์ A2 คีย์สูตรเพื่อนำข้อมูลใน Sheet ต่าง ๆ มาแสดงต่อกัน
    =IF($E2<>"",INDIRECT("'"&$E2&"'!"&SUBSTITUTE(ADDRESS(1,COLUMN()),1,"")&COUNTIF($E$2:$E2,$E2)+1),"")
    Enter แล้ว Copy ไปทางขวาและลงด้านล่าง

จะเห็นว่าการนำข้อมูลจากหลาย ๆ Sheet มาต่อกันนั้น ไม่ใช่เรื่องยากอีกต่อไปสำหรับพวกเราครับ Winking smile

การใช้สูตรสุ่มข้อมูลเป็นชุด ๆ โดยกำหนดได้ว่าให้ไม่ซ้ำกันภายในชุด

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

เป็นที่น่าดีใจว่า Excel เองสามารถที่จะสุ่มเช่นนี้ด้วยสูตรได้เหมือนกัน โดยไม่ต้องพึ่งพา VBA แต่สูตรยาวพอควร เข้าใจค่อนข้างยาก แต่นั่นไม่ใช่ปัญหาสำหรับเราใช่ไหมครับ

ภาพตัวอย่างการ Random ด้วยสูตรตามด้านล่างครับ

RandomInAdvanced 

จากภาพด้านบนเราสมมุติว่าข้อมูลมีชุดละ 2 บรรทัด และโดยชุดแรกคือ C2:C3, ชุดที่สองคือ C4:C5 เป็นต้น และจะทำการสุ่มโดยนำข้อมูลสีที่ E3:E4 เข้าแสดงแต่ต้องไม่ซ้ำสีกันภายในชุดเดียวกัน

เซลล์ E3:E4  สามารถกรอกค่าใด ๆ ก็ได้ไม่จำเป็นต้องเป็นต้วหนังสือ และจะกรอกกี่ค่าก็ได้ แต่ถ้ากรอกมากกว่า 2 ค่าตามที่ยกตัวอย่างมา จะต้องเข้าไปแก้สูตรใหม่ โดยเปลี่ยนเลข 2 ที่ไม่เกี่ยวกับช่วงเซลล์ ให้เป็นเลขใด ๆ ตามจำนวนค่าจริงที่ต้องการสุ่ม และแก้ไขช่วงเซลล์ที่ต้องการสุ่ม

สำหรับเลข 2 ด้านบน สามารถใช้ฟังก์ชั่นนับค่าที่ต้องการสุ่มไว้ในเซลล์ใด ๆ แล้วค่อยอ้างอิงไปใช้ในสูตร จะสะดวกกว่ามากหากมีการแก้ไขในภายหลัง

ช่วงเซลล์ที่ต้องการสุ่มในฟังก์ชั่น Index ก็เช่นกัน สามารถทำให้ Dynamic โดยการให้ชื่อกับช่วงเซลล์แบบ Dynamic ได้

ตามรูป ที่ C2 คีย์

=Index($E$3:$E$4,Small(If(Countif(If(Mod(Rows($C$2:C2)-1,2)=0,$C$1:$C$1,Offset(C1,0,0,-Mod(Rows($C$2:C2)-1,2),1):C1),$E$3:$E$4)=0,Row($E$3:$E$4)-Row($E$3)+1),Int((2-Mod(Rows($C$2:C2)-1,2))*Rand())+1))

การกดแป้นให้รับสูตรต้องกด 3 แป้นคือ Ctrl+Shift+Enter ถ้ากดแป้นถูกต้องจะเห็นปีกกาคร่อมสูตร จากนั้น Copy ลงด้านล่าง

การสรุปข้อมูลจากฐานข้อมูลที่แบ่งเป็นช่วง ๆ

โดยปกติแล้วฐานข้อมูลที่ควรจะเป็นนั้น ข้อมูลจะต้องเรียงติดกันจากบนลงล่าง ไม่มีบรรทัดว่าง ไม่มีค่าใด ๆ ที่ไม่เกี่ยวกับฐานข้อมูลอยู่ด้านข้างและด้านล่างของฐานข้อมูล เพื่อที่จะนำความสามารถที่มีเช่น PivotTable มาสรุปเป็นรายงานได้อย่างง่าย ๆ

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

จากภาพด้านล่างจะเป็นการสรุปข้อมูลตามที่ต้องการโดยการเลือก Region และ Product โปรแกรมจะแสดงยอดรวม ทั้งแจกแจงรายการทั้งหมดที่ตรงตาม Region และ Product

ภาพตัวอย่างการสรุปข้อมูลจากฐานข้อมูลที่แบ่งเป็นช่วง ๆ

AdvancedOffsetMatch

โดยมีวิธีการและขั้นตอนดังนี้

A. List รายการของ Product ทั้งหมด

  1. นับ Product ที่มีทั้งหมดโดยไม่นับค่าที่ซ้ำ H1 คีย์
    =SUM(IF(FREQUENCY(IF(ISNUMBER($B$1:$B$39),MATCH("~"&$A$1:$A$39,$A$1:$A$39&"",0)),ROW($B$1:$B$39)-ROW($B$1)),1))
    Ctrl+Shift+Enter
  2. List รายการ Product ทั้งหมดโดยไม่เอาค่าซ้ำที่ H2 คีย์
    =IF(ROWS($H$2:H2)<=$H$1,INDEX($A$1:$A$39,SMALL(IF(FREQUENCY(IF(ISNUMBER($B$1:$B$39),MATCH("~"&$A$1:$A$39,$A$1:$A$39&"",0)),ROW($A$1:$A$39)-ROW($A$1)+1),ROW($A$1:$A$39)-ROW($A$1)+1),ROWS($H$2:H2))),"")
    Ctrl+Shift+Ener > Copy ลงด้านล่าง

B. List รายการ Region ทั้งหมด

  1. นับจำนวน Region โดยไม่เอาค่าซ้ำที่ G1 คีย์
    =SUMPRODUCT(--(B1:B39=""),--(A1:A39<>""))
    Enter
  2. List Region ทั้งหมด G2 คีย์
    =IF(ROWS($G$2:G2)<=$G$1,INDEX($A$1:$A$39,SMALL(IF($B$1:$B$39="",IF($A$1:$A$39<>"",ROW($B$1:$B$39)-ROW($B$1)+1)),ROWS($G$2:G2))),"")
    Ctrl+Shift+Ener > Copy ลงด้านล่าง

C. หาตำแหน่งเซลล์ว่างสุดท้ายในบรรทัดด้านล่างถัดจาก Region ที่เลือกใน E2 ที่ E1 คีย์

=SMALL(IF(A1:A39="",ROW(A1:A39)-ROW(A1)+1),MATCH(E2,G2:G7,0))
Ctrl+Shift+Ener

D. List รายการที่ตรงตามเงื่อนไขทั้ง Region และ Prod ที่เลือกใน E2 และ E3 ตามลำดับ

  1. นับว่าตรงตามเงื่อนไขทั้งหมดมีจำนวนเท่าไรที่ D6 คีย์
    =COUNTIF(OFFSET(A2,MATCH(E2,$A$1:$A$39,0),0,E1-MATCH(E2,$A$1:$A$39,0)),E3)
    Enter
  2. List Product ทั้งหมดที่ตรงตามเงื่อนไข ที่ D8 คีย์
    =IF(ROWS($D$8:D8)<=$D$6,INDEX(OFFSET($A$2,MATCH($E$2,$A$1:$A$39,0),0,$E$1-MATCH($E$2,$A$1:$A$39,0)),SMALL(IF(OFFSET($A$2,MATCH($E$2,$A$1:$A$39,0),0,$E$1-MATCH($E$2,$A$1:$A$39,0))=$E$3,ROW(OFFSET($A$2,MATCH($E$2,$A$1:$A$39,0),0,$E$1-MATCH($E$2,$A$1:$A$39,0)))-MATCH($E$2,$A$1:$A$39,0)-1),ROWS($D$8:D8))),"")
    Ctrl+Shift+Enter > Copy ลงด้านล่าง
  3. List Value ทั้งหมดที่ตรงตามเงื่อนไข ที่ E8 คีย์
    =IF(ROWS($D$8:D8)<=$D$6,INDEX(OFFSET($B$2,MATCH($E$2,$A$1:$A$39,0),0,$E$1-MATCH($E$2,$A$1:$A$39,0)),SMALL(IF(OFFSET($A$2,MATCH($E$2,$A$1:$A$39,0),0,$E$1-MATCH($E$2,$A$1:$A$39,0))=$E$3,ROW(OFFSET($A$2,MATCH($E$2,$A$1:$A$39,0),0,$E$1-MATCH($E$2,$A$1:$A$39,0)))-MATCH($E$2,$A$1:$A$39,0)-1),ROWS($D$8:D8))),"")
    Ctrl+Shift+Enter > Copy ลงด้านล่าง

E. สูตรหายอดรวมรายการที่ตรงตามเงื่อนไขโดยไม่ต้องแจกแจงรายการออกมาก่อน ที่ E4 คีย์

=SUMIF(OFFSET(A2,MATCH(E2,$A$1:$A$39,0),0,E1-MATCH(E2,$A$1:$A$39,0)),E3,OFFSET(B2,MATCH(E2,$A$1:$A$39,0),0,E1-MATCH(E2,$A$1:$A$39,0)))
Enter

การคำนวณจากพื้นที่แบบสามเหลี่ยม

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

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

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

ภาพประกอบ

TriangleCalculation 

A. สามเหลี่ยมบน

  1. หาค่าผลรวม ที่ M2 คีย์
    =SUMPRODUCT(SUBTOTAL(9,OFFSET(C2,,ROW(K10)-ROW(K2:K10),ROW(K10)-ROW(K2:K10)+1)))
    Enter
  2. หาค่าเฉลี่ยที่ M3 คีย์
    =M2/SUMPRODUCT(SUBTOTAL(3,OFFSET(C2,,ROW(K10)-ROW(K2:K10),ROW(K10)-ROW(K2:K10)+1)))
    Enter
  3. หาค่า Max ที่ M4 คีย์
    =MAX(SUBTOTAL(4,OFFSET(C2,,ROW(K10)-ROW(K2:K10),ROW(K10)-ROW(K2:K10)+1)))
    Ctrl+Shift+Enter
  4. หาค่า Min ที่ M5 คีย์
    =MIN(SUBTOTAL(5,OFFSET(C2,,ROW(K10)-ROW(K2:K10),ROW(K10)-ROW(K2:K10)+1)))
    Ctrl+Shift+Enter

B. สามเหลี่ยมล่าง

  1. หาค่าผลรวมที่ M11 คีย์
    =SUMPRODUCT(SUBTOTAL(9,OFFSET(J12,,ROW(B4:B12)-ROW(B12),ROW(B4:B12)-ROW(B12)-1)))
    Enter
  2. หาค่าเฉลี่ยที่ M12 คีย์
    =M11/SUMPRODUCT(SUBTOTAL(3,OFFSET(J12,,ROW(B4:B12)-ROW(B12),ROW(B4:B12)-ROW(B12)-1)))
    Enter
  3. หาค่า Max ที่ M13 คีย์
    =MAX(SUBTOTAL(4,OFFSET(J12,,ROW(B4:B12)-ROW(B12),ROW(B4:B12)-ROW(B12)-1)))
    Ctrl+Shift+Enter
  4. หาค่า Min ที่ M14 คีย์
    =MIN(SUBTOTAL(5,OFFSET(J12,,ROW(B4:B12)-ROW(B12),ROW(B4:B12)-ROW(B12)-1)))
    Crl+Shift+Enter

C. หาจุดตัดสามเหลี่ยมบนที่ M18 คีย์

  1. =OFFSET(B2,MIN(MATCH(M17,C16:C25,0)-1,MATCH(N17,C16:C25,0)-1),MAX(MATCH(M17,C16:C25,0)-1,MATCH(N17,C16:C25,0)-1))
    Enter

D. หาจุดตัดสามเหลี่ยมล่างที่ M22 คีย์

  1. =OFFSET(B3,MAX(MATCH(N21,B16:B25,0)-1,MATCH(M21,B16:B25,0)-1),MIN(MATCH(N21,B16:B25,0)-1,MATCH(M21,B16:B25,0)-1))
    Enter