หน้าเว็บ

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

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

Running no on categories

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

Video แสดงการให้หมายเลขกับกลุ่มข้อมูล โดยแยกเป็น แบบแรกคือ กลุ่มข้อมูลเดียวกันให้ลำดับที่เริ่มด้วย 1 เป็นต้นไปและเมื่อขึ้นกลุ่มใหม่จะให้หมายเลขลำดับที่เริ่มด้วย 1 ใหม่วนไปจนครบทุกลุ่ม และแบบที่สองคือ กลุ่มเดียวกันให้ลำดับตัวเลขเดียวกัน เมื่อขึ้นกลุ่มใหม่จะให้ลำดับตัวเลขถัดไป Winking smile

Video แสดงการให้ลำดับกลุ่มข้อมูล

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

วันอาทิตย์ที่ 24 กันยายน พ.ศ. 2560

ฟังก์ชั่น Count, Counta, Countif, Sumif และ Match

Eye rolling smile ฟังก์ชั่นพื้นฐานสำหรับการใช้งาน Excel ที่ใช้บ่อยและสามารถจัดการงานของเราให้ลุล่วงไปได้อย่างรวดเร็ว กลุ่มฟังก์ชั่นในจำนวนนั้นได้แก่ Count, Counta, Countif, Sumif และ Match โดย Count จะใช้นับตัวเลข Counta จะนับทุกค่ายกเว้นเซลล์ว่าง Countif จะเป็นการนับตามเงื่อนไขที่กำหนด Sumif จะเป็นการรวมตามเงื่อนไขที่กำหนด ส่วน Match จะเป็นการค้นหาและให้คำตอบเป็นตัวเลขลำดับที่ที่พบรายการ

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

Video แสดงการใช้ Count, Counta, Countif, Sumif และ Match

วันจันทร์ที่ 13 มีนาคม พ.ศ. 2560

การค้นหาข้อมูลจากหลายไฟล์หลายชีตหลายคอลัมน์ด้วย Vlookup

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

ยกตัวอย่างข้อมูลของเราเป็นข้อมูล Product อยู่ใน 3 ไฟล์ แต่ละไฟล์จะมีข้อมูลอยู่ที่ Sheet2 - Sheet4 ประกอบด้วย Product Name, Quantity และ Amount โดยต้องการจะ Lookup ค่า Product ในเซลล์ A4 ของ Sheet1 ของไฟล์หลัก จาก Sheet2 - Sheet4 ของแต่ละไฟล์ โดยให้สามารถค้นหาได้ทุกคอลัมน์ หากค้นพบให้นำข้อมูล Quantity และ Amount มาวางที่ เซลล์ B4, C4 ของ Sheet1 ของไฟล์หลักตามลำดับ ซึ่งได้มีการกำหนดชื่อไฟล์และชื่อชีตที่จะดึงข้อมูลเอาไว้ล่วงหน้าที่เซลล์ H1:I9 ของ Sheet1 ของไฟล์หลัก

ภาพการใช้ Vlookup ดึงข้อมูลที่ไม่เป็นระเบียบจากหลายไฟล์ หลายชีต หลายคอลัมน์มาแสดง

ไฟล์หลัก

ไฟล์ที่ 1

ไฟล์ที่ 2

เราสามารถเขียนสูตรที่เซลล์ B4 ของ Sheet1 ของไฟล์หลัก เพื่อค้นหาค่า Quantity ได้ดังนี้

=VLOOKUP($A4,OFFSET(INDIRECT(INDEX($H$1:$H$9&$I$1:$I$9&"!A2",
MIN(IF(COUNTIF(OFFSET(INDIRECT($H$1:$H$9&$I$1:$I$9&"!A2:A100"),
0,COLUMN($A$1:$O$1)-COLUMN($A$1)),$A4),ROW($I$1:$I$9)-ROW($I$1)+1)))),
0,MATCH(TRUE,COUNTIF(OFFSET(INDIRECT(INDEX($H$1:$H$9&$I$1:$I$9
&"!A2:A100",MIN(IF(COUNTIF(OFFSET(INDIRECT($H$1:$H$9&$I$1:$I$9
&"!A2:A100"),0,COLUMN($A$1:$O$1)-COLUMN($A$1)),$A4),ROW($I$1:$I$9)-
ROW($I$1)+1)))),0,COLUMN($A$1:$O$1)-COLUMN($A$1)),$A4)>0,0)-1,100,3),
COLUMNS($A3:B3),0)

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

VlookupMultipleFilesSheetsCols

วันอาทิตย์ที่ 12 มีนาคม พ.ศ. 2560

การค้นหาข้อมูลจากหลายชีตหลายคอลัมน์ที่ไม่เป็นระเบียบด้วย Vlookup

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

ยกตัวอย่างข้อมูลของเราเป็นข้อมูล Product อยู่ใน Sheet2 - Sheet4 ประกอบด้วย Product Name, Quantity และ Amount โดยต้องการจะ Lookup ค่า Product ในเซลล์ A4 ของ Sheet1 จาก Sheet2 - Sheet4 โดยให้สามารถค้นหาได้ทุกคอลัมน์ หากค้นพบให้นำข้อมูล Quantity และ Amount มาวางที่ เซลล์ B4, C4 ของ Sheet1 ตามลำดับ ซึ่งได้มีการกำหนดชื่อชีตที่จะดึงข้อมูลเอาไว้ล่วงหน้าที่เซลล์ I1:I3 ของ Sheet1

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

ชีตที่ใช้ Vlookup ดึงข้อมูล

ข้อมูลใน Sheet2

ข้อมูลใน Sheet3

ข้อมูลใน Sheet4

เราสามารถเขียนสูตรที่เซลล์ B4 ของ Sheet1 เพื่อค้นหาค่า Quantity ได้ดังนี้

=VLOOKUP($A4,OFFSET(INDIRECT(INDEX($I$1:$I$3&"!A2",MIN(IF(
COUNTIF(OFFSET(INDIRECT($I$1:$I$3&"!A2:A100"),0,
COLUMN($A$1:$O$1)-COLUMN($A$3)),$A4),ROW($I$1:$I$3)-ROW($I$1)+1)))),
0,MATCH(TRUE,COUNTIF(OFFSET(INDIRECT(
INDEX($I$1:$I$3&"!A2:A100",MIN(IF(COUNTIF(OFFSET(INDIRECT(
$I$1:$I$3&"!A2:A100"),0,COLUMN($A$1:$O$1)-COLUMN($A$3)),$A4),
ROW($I$1:$I$3)-ROW($I$1)+1)))),0,COLUMN($A$1:$O$1)-COLUMN($A$3)),
$A4)>0,0)-1,100,3),COLUMNS($A3:B3),0)

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

VlookupMultiSheetsMultiColumns

วันอาทิตย์ที่ 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

วันเสาร์ที่ 26 มกราคม พ.ศ. 2556

การสุ่มแบบแบ่งเป็นกลุ่มและแต่ละกลุ่มสุ่มมาไม่เท่ากัน

กรณีที่ต้องการสุ่มกลุ่มข้อมูล โดยแต่ละกลุ่มต้องการให้สุ่มมาไม่เท่ากันนั้น สามารถใช้สูตรในการจัดการได้เช่นกัน

ยกตัวอย่างเช่น ข้อมูลที่ A1:B19 แบ่งเป็น 3 กลุ่ม คือ A, B, C แต่ละสมาชิกกลุ่มมีมูลค่ากำกับตามภาพด้านล่าง ต้องการสุ่มโดย

  1. สุ่ม A มา 1 ค่า
  2. สุ่ม B มา 2 ค่า
  3. สุ่ม C มา 3 ค่า

แล้วนำค่าที่ได้จากการสุ่มมารวมกัน

ภาพตัวอย่างข้อมูลที่ต้องการสุ่ม

image

เราสามารถใช้สูตรในการสุ่มได้ดังนี้ครับ

  1. ที่ C2 คีย์สูตร
    =RAND()
    Enter > Copy ลงด้านล่าง
  2. ที่ E2:E4 คีย์ A, B และ C ตามลำดับ
  3. ที่ F2:F4 กรอกจำนวนที่ต้องการสุ่มแต่ละค่า
  4. ที่ F5 คีย์สูตรเพื่อรวมจำนวนรายการที่ต้องสุ่ม
    =SUM(F2:F4)
    Enter
  5. ที่ G2 คีย์สูตรเพื่อใช้หาบรรทัดที่เริ่มของแต่ละ Group
    =SUM(F$2:F2)-F2+1
    Enter > Copy ไปถึง G4
  6. ที่ I2 คีย์สูตรเพื่อ List รายชื่อ Group
    =IF(ROWS(I$2:I2)>$F$5,"",LOOKUP(ROWS(I$2:I2),$G$2:$G$4,$E$2:$E$4))
    Enter > Copy ลงด้านล่าง
  7. ที่ J2 คีย์สูตรเพื่อหา Value ที่ได้จากการสุ่ม
    =IF(I2="","",INDEX($B$2:$B$16,MATCH(SMALL(IF($A$2:$A$16=I2,$C$2:$C$16),COUNTIF(I$2:I2,I2)),IF($A$2:$A$16=I2,$C$2:$C$16),0)))
    Ctrl+Shift+Enter > Copy ลงด้านล่าง
  8. กดแป้น F9 เพื่อสุ่มค่าตามต้องการ

Rainbow Note: Ctrl+Shift+Enter หมายถึงเมื่อคีย์สูตรแล้ว แทนที่จะกด Enter ให้กดแป้น Ctrl+Shift ค้างไว้แล้วกด Enter เพื่อสร้างเป็นสูตร Array หากกดแป้นถูกต้องสูตรนั้นจะมีเครื่องหมายปีกกาครอบ เช่น {=YourFormulas(...)} ปีกกานี้คีย์เข้าไปเองไม่ได้ ถ้ายังไม่เห็นปีกกาครอบสูตรแสดงว่ากดแป้นให้รับสูตรไม่ถูกต้อง

ภาพแสดงผลลัพธ์ที่ต้องการในช่อง I:J

วันพฤหัสบดีที่ 16 มิถุนายน พ.ศ. 2554

เทคนิคการแทรกสัญญลักษณ์ต่าง ๆ ในข้อความในตำแหน่งที่ไม่แน่นอน

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

แต่ถึงจะยุ่งยากอย่างไรก็ตามก็ไม่เกินความสามารถของฟังก์ชั่นที่ Excel ได้เตรียมไว้ให้ เพียงแต่ค่อนข้างจะซับซ้อนและต้องทำเป็นสูตร Array ซึ่งจะยกตัวอย่างการแทรกสัญญลักษณ์ “ / “ ในข้อความต้นฉบับเพื่อให้เป็นข้อความใหม่ตามภาพด้านล่าง Winking smile

ภาพตัวอย่างการแทรกสัญญลักษณ์ “ / “ ในข้อความในตำแหน่งที่ไม่แน่นอน

AdvanceSubstitute

จากภาพด้านบนจะเห็นว่าที่เซลล์ A2:A3 นั้นเป็นข้อความที่ประกอบด้วยชื่อคนแจ้งตามด้วยหน้าที่ที่ทำ และเราต้องการแทรก “ / “ ไว้ท้ายชื่อคนแจ้ง โดยมีฐานข้อมูลชื่อคนแจ้งที่เซลล์ A10:A14

เราสามารถทำดังนี้ครับ

ที่เซลล์ B2 คีย์สูตรเพื่อแทรกสัญญลักษณ์หลังชื่อคนแจ้ง

=SUBSTITUTE(A2,INDEX($A$10:$A$14,MATCH(MIN(LEN(SUBSTITUTE(A2,$A$10:$A$14,""))),LEN(SUBSTITUTE(A2,$A$10:$A$14,"")),0)),INDEX($A$10:$A$14,MATCH(MIN(LEN(SUBSTITUTE(A2,$A$10:$A$14,""))),LEN(SUBSTITUTE(A2,$A$10:$A$14,"")),0))&" / ")

Ctrl+Shift+Enter > Copy ไปด้านล่าง ซึ่งการกดแป้นให้รับสูตรต้องกดแป้น Ctrl+Shift ค้างไว้แล้วตามด้วย Enter จะกดแป้น Enter อย่างเดียวไม่ได้ครับ หากกดแป้นถูกต้องจะเห็นเครื่องหมายปีกกาคร่อมสูตร ปีกกานี้จะคีย์เข้าไปเองไม่ได้ การแก้ไขเปลี่ยนแปลงสูตร จะต้องกดให้รับสูตรด้วย Ctrl+Shift+Enter ทุกครั้ง Surprised smile

หลักการของสูตรคือ หาว่ามีข้อมูลในตำแหน่งใดในช่วง A10:A14 อยู่ในข้อความที่ A2 ก็ให้นำค่าในตำแหน่งนั้นมาเชื่อมด้วย “ / “ แล้วเปลี่ยนแทนข้อมูลเดิม Open-mouthed smile

วันจันทร์ที่ 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

วันอาทิตย์ที่ 20 มีนาคม พ.ศ. 2554

การให้ลำดับข้อมูลคะแนนโดยค่าเดียวกันได้ลำดับเดียวกันและไม่ข้ามลำดับ

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

 

A

B

C

1

คะแนน

Rank

ที่ต้องการ

2

300

1

1

3

200

2

2

4

200

2

2

5

100

4

3

จากตารางจะเห็นว่าด้วยฟังก์ชั่น Rank จะมีการให้ลำดับข้ามไป คือไม่มีลำดับที่ 3 หากต้องการผลลัพธ์ตามคอลัมน์ B เราสามารถคีย์สูตรที่ B2 เป็น

=Rank($A2,$A$2:$A$5)

Enter > Copy ลงด้านล่าง

แต่หากต้องการผลลัพธ์ที่มีการให้ลำดับต่อเนื่องกันไปเช่นเดียวกับผลลัพธ์ในคอลัมน์ C ที่ C2 คีย์

=MATCH($A2,LARGE(IF(FREQUENCY(MATCH($A$2:$A$5,$A$2:$A$5,0),ROW($A$2:$A$5)-ROW($A$2)+1),$A$2:$A$5),ROW(INDIRECT("1:"&SUM(1/COUNTIF($A$2:$A$5,$A$2:$A$5))))),0)

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

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

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

วันพุธที่ 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

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

โดยปกติแล้วฐานข้อมูลที่ควรจะเป็นนั้น ข้อมูลจะต้องเรียงติดกันจากบนลงล่าง ไม่มีบรรทัดว่าง ไม่มีค่าใด ๆ ที่ไม่เกี่ยวกับฐานข้อมูลอยู่ด้านข้างและด้านล่างของฐานข้อมูล เพื่อที่จะนำความสามารถที่มีเช่น 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

วันพฤหัสบดีที่ 12 มีนาคม พ.ศ. 2552

สูตรที่แสดงค่าผิดพลาดเมื่อปิดไฟล์

กรณีที่เราทำงานกับไฟล์ซึ่งมีการเชื่อมโยงกับไฟล์อื่น หากปิดไฟล์ต้นแหล่งไปแล้ว ทำไมสูตรที่เราเขียนไว้เกิดค่าผิดพลาดขึ้น เช่นติด #Ref! หรือ #Value!

ที่เป็นเช่นนี้เนื่องจากว่าเป็นข้อจำกัดของ Excel ในบางฟังก์ชั่นที่ไม่สามารถใช้กับไฟล์ที่ปิดไปแล้วได้ครับ ฟังก์ชั่นดังกล่าวได้แก่

  1. Sumif
  2. Countif
  3. Offset
  4. Indirect

หากปิดไฟล์ต้นแหล่ง 3 ตัวแรกจะเกิดค่าผิดพลาดเป็น #Value! และ Indirect จะเกิดค่าผิดพลาดเป็น #Ref! ดังนั้นในการใช้สูตรเพื่อหาข้อมูลจากไฟล์อื่นจำเป็นต้องระวังในการใช้สูตร 4 ตัวนี้ข้ามไฟล์ครับ