เอาแบบย่อๆ นะครับ เพราะหากจะอธิบาย MMULT จริงๆ ผมว่าหน้ากระดาษ A4 ไม่พอแน่ๆ เพราะต้องเอาเรื่องเมตริกซ์ในวิชาคณิตศาสตร์มาพูดด้วย สยองครับ (หากอยากหาข้อมูลเพิ่ม เปิด google แล้วคีย์ค้นหา "การคูณเมตริกซ์" ครับ

)
การเปรียบเทียบในกรณีนี้เป็นการเปรียบเทียบกับเงื่อนไขหลายตัว ขอยกตัวอย่างแค่เงื่อนไขแรกนะครับคือการเทียบว่า A หรือ B (เซลล์ M3) และขอยกตัวอย่างเพียงการเปรียบเทียบข้อมูลอย่างเดียว ซึ่งเป็นสาเหตุที่ผมนึกได้แค่สูตร MMULT ครับ

กรณีที่ 1 คีย์เงื่อนไขตัวเดียว สมมติว่าเป็น A
การเปรียบเทียบจะง่ายครับ จะได้ว่า
Code: Select all
=I3:I8="A"
={"TRUE";
"TRUE";
"TRUE";
"FALSE";
"FALSE";
"FALSE"}
(ผมเขียนแบบนี้เพราะการเปรียบเทียบในแนวแถว ผลลัพธ์ที่ได้ก็จะยังเป็นแนวแถวครับ ปกติเราเห็นแบ่งด้วย ";" ที่ต้องเขียนแบบนี้เพราะเดี๋ยวกรณีที่ 2 จะได้เห็นภาพชัด)
ผลลัพธ์แค่แนวเดียว คือมีคอลัมน์เดียว ในทางเมตริกซ์เรียกข้อมูลนี้ว่ามีขนาดหรือมิติ 6 x 1 (แถว x คอลัมน์) ข้อมูลลักษณะนี้เราเอาไปใช้ต่อในสูตรง่ายครับ

กรณีที่ 2 คีย์เงื่อนไขหลายตัว สมมติว่าคีย์ A,B
- การเปรียบเทียบจะยากขึ้น เพราะสูตร MID จะตัดได้ว่า
"A";
",";
"B" (สังเกตว่าผลลัพธ์มีขนาด 3x1)
- สูตร Transpose จะเปลี่ยนแกนของผลลัพธ์นี้ครับ จาก 3x1 เป็น 1x3 คือ
"A",
",",
"B" (เครื่องหมาย , จะคั่นข้อมูลที่อยู่คนละคอลัมน์)
Code: Select all
=I3:I8={"A",",","B"}
={"T","F","F";
"T","F","F";
"T","F","F";
"F","F","T";
"F","F","T";
"F","F","T"}
(ขอย่อ T=True, F=False)
- งงไหมครับ คอลัมน์แรกมาจากการเทียบ I3:I8 กับ A คอลัมน์ที่สองเทียบกับ , คอลัมน์สุดท้ายเทียบกับ B
- จะเห็นว่าข้อมูลมีมิติ 6x3 แบบนี้เราเอามาใช้ในสูตรยากครับ เราต้องการให้เหลือเพียงคอลัมน์เดียว จะได้เลือกถูกว่าจะเอาค่าไหนในคอลัมน์ K มาบวก ผมเลยเอาสูตร MMULT มาใช้เพราะสูตรนี้เป็นการคูณเมตริกซ์กับเมตริกซ์ ผลที่ได้ยังเป็นเมตริกซ์
ที่มีมิติเปลี่ยนไปครับ มีเทคนิคคือ
เมตริกซ์ตัวตั้ง x เมตริกซ์ตัวคูณ = เมตริกซ์ผลลัพธ์
[
m x n] x [a x
b] = [
m x
b]
--- สังเกตว่า ผลลัพธ์จะมีแถวเท่าตัวตั้ง และคอลัมน์เท่าตัวเอามาคูณ
--- กรณีนี้ตัวตั้งของเรามีมิติ 6x3 หากผมอยากให้เหลือ 6x1 ก็ต้องหาข้อมูลที่มีมิติ 3x1 มาเป็นตัวคูณครับ (สูตร Len ครับ)
--- และหากเราหาตัวคูณที่มีสมาชิกเป็น 1 ทั้งหมด ผลลัพธ์จะมีความพิเศษตรงที่ ดูตัวตั้งนะครับ หากแถวไหนมี T ผลลัพธ์ก็จะมี T ที่แถวนั้นครับ (ขอเปลี่ยน T, F เป็นเลขนะครับ จะได้ดูง่ายหน่อย)
Code: Select all
2, 0, 0 2
3, 0, 0 3
4, 0, 0 1 4
0, 0, 5 x 1 = 5
0, 0, 6 1 6
0, 0, 7 7
คราวนี้เราก็เอาไปใช้ในสูตร IF ได้ง่ายขึ้นครับ (ยกตัวอย่างสูตรที่ O3)
=IF(
MMULT(--($I$3:$I$8=TRANSPOSE(MID(M3,ROW(INDIRECT("a1:a"&LEN(M3))),1))),LEN(MID(M3,ROW(INDIRECT("a1:a"&LEN(M3))),1))),IF(
MMULT(--($J$3:$J$8&""=TRANSPOSE(MID(N3,ROW(INDIRECT("a1:a"&LEN(N3))),1))),LEN(MID(N3,ROW(INDIRECT("a1:a"&LEN(N3))),1))),$K$3:$K$8))
=IF(
{1;1;1;1;1;1},IF(
{1;1;0;1;1;0},$K$3:$K$8))
={5;6;FALSE;8;6;FALSE}