EXCEL TOOLS
Excel Add-ins ที่พัฒนาโดยคุณสันติพงศ์ ณสุย (MVP Excel 2010-2020) ด้วยภาษา C# เพื่อแก้ไขปัญหาไฟล์ใหญ่ คำนวณนาน ทำงานช้า จัดการข้อมูลต่าง ๆ ที่ทำงานประจำวันได้อย่างสะดวกรวดเร็ว สนใจคลิกไปดูได้ที่นี่ครับ => Excel Tools
Excel Add-ins ที่พัฒนาโดยคุณสันติพงศ์ ณสุย (MVP Excel 2010-2020) ด้วยภาษา C# เพื่อแก้ไขปัญหาไฟล์ใหญ่ คำนวณนาน ทำงานช้า จัดการข้อมูลต่าง ๆ ที่ทำงานประจำวันได้อย่างสะดวกรวดเร็ว สนใจคลิกไปดูได้ที่นี่ครับ => Excel Tools
[code]
และปิดด้วย [/code]
ตัวอย่างเช่น [code]dim r as range[/code]
เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)Code: Select all
=IFERROR(IF(SUM(IF(P2=ABS(sheet1!$P$2:$P$23),IF(T2=sheet1!$T$2:$T$23,ROW(sheet1!$T$2:$T$23)))),INDEX(sheet1!$U$1:$U$23,SMALL(IF(SMALL(ABS(U2-IF(P2=ABS(sheet1!$P$2:$P$23),IF(T2=sheet1!$T$2:$T$23,sheet1!$U$2:$U$23))),1)=ABS(U2-IF(P2=ABS(sheet1!$P$2:$P$23),IF(T2=sheet1!$T$2:$T$23,sheet1!$U$2:$U$23))),ROW(sheet1!$U$2:$U$23)),1)),""),"")
Code: Select all
SUM(IF(P2=ABS(sheet1!$P$2:$P$23),IF(T2=sheet1!$T$2:$T$23,ROW(sheet1!$T$2:$T$23))))
Code: Select all
INDEX(sheet1!$U$1:$U$23,SMALL(IF(SMALL(ABS(U2-IF(P2=ABS(sheet1!$P$2:$P$23),IF(T2=sheet1!$T$2:$T$23,sheet1!$U$2:$U$23))),1)=ABS(U2-IF(P2=ABS(sheet1!$P$2:$P$23),IF(T2=sheet1!$T$2:$T$23,sheet1!$U$2:$U$23))),ROW(sheet1!$U$2:$U$23)),1))
Code: Select all
INDEX(sheet1!$U$1:$U$23,SMALL(IF(SMALL(ABS(U2-IF(P2=ABS(sheet1!$P$2:$P$23),IF(T2=sheet1!$T$2:$T$23,sheet1!$U$2:$U$23))),1)=ABS(U2-IF(P2=ABS(sheet1!$P$2:$P$23),IF(T2=sheet1!$T$2:$T$23,sheet1!$U$2:$U$23))),ROW(sheet1!$U$2:$U$23)),1))
Code: Select all
SMALL(IF(SMALL(ABS(U2-IF(P2=ABS(sheet1!$P$2:$P$23),IF(T2=sheet1!$T$2:$T$23,sheet1!$U$2:$U$23))),1)=ABS(U2-IF(P2=ABS(sheet1!$P$2:$P$23),IF(T2=sheet1!$T$2:$T$23,sheet1!$U$2:$U$23))),ROW(sheet1!$U$2:$U$23)),1)
Code: Select all
SMALL(IF(SMALL(ABS(U2-IF(P2=ABS(sheet1!$P$2:$P$23),IF(T2=sheet1!$T$2:$T$23,sheet1!$U$2:$U$23))),1)=ABS(U2-IF(P2=ABS(sheet1!$P$2:$P$23),IF(T2=sheet1!$T$2:$T$23,sheet1!$U$2:$U$23))),ROW(sheet1!$U$2:$U$23)),1)
Code: Select all
IF(SMALL(ABS(U2-IF(P2=ABS(sheet1!$P$2:$P$23),IF(T2=sheet1!$T$2:$T$23,sheet1!$U$2:$U$23))),1)=ABS(U2-IF(P2=ABS(sheet1!$P$2:$P$23),IF(T2=sheet1!$T$2:$T$23,sheet1!$U$2:$U$23))),ROW(sheet1!$U$2:$U$23))
Code: Select all
IF(SMALL(ABS(U2-IF(P2=ABS(sheet1!$P$2:$P$23),IF(T2=sheet1!$T$2:$T$23,sheet1!$U$2:$U$23))),1)=ABS(U2-IF(P2=ABS(sheet1!$P$2:$P$23),IF(T2=sheet1!$T$2:$T$23,sheet1!$U$2:$U$23))),ROW(sheet1!$U$2:$U$23))
Code: Select all
SMALL(ABS(U2-IF(P2=ABS(sheet1!$P$2:$P$23),IF(T2=sheet1!$T$2:$T$23,sheet1!$U$2:$U$23))),1)=ABS(U2-IF(P2=ABS(sheet1!$P$2:$P$23),IF(T2=sheet1!$T$2:$T$23,sheet1!$U$2:$U$23)))
Code: Select all
ROW(sheet1!$U$2:$U$23)
Code: Select all
ABS(U2-IF(P2=ABS(sheet1!$P$2:$P$23),IF(T2=sheet1!$T$2:$T$23,sheet1!$U$2:$U$23)))
Code: Select all
U2-IF(P2=ABS(sheet1!$P$2:$P$23),IF(T2=sheet1!$T$2:$T$23,sheet1!$U$2:$U$23))
Code: Select all
IF(P2=ABS(sheet1!$P$2:$P$23),IF(T2=sheet1!$T$2:$T$23,sheet1!$U$2:$U$23))
Code: Select all
P2=ABS(sheet1!$P$2:$P$23)
Code: Select all
IF(T2=sheet1!$T$2:$T$23,sheet1!$U$2:$U$23)
Code: Select all
IF(T2=sheet1!$T$2:$T$23,sheet1!$U$2:$U$23)
Code: Select all
T2=sheet1!$T$2:$T$23
Code: Select all
sheet1!$U$2:$U$23
จะต้องเติมให้เต็ม เว้นว่างไม่ได้ ไปเติมไว้ที่เซลล์อื่นเช่นนั้นไม่ได้ครับ2. จากข้อมูลดิบพบว่า คอลัมน์ข้อความในชีทสาขาไม่ได้กรอกครบทุกบรรทัด
จึงมาระบุรหัสที่ต้องการไว้ที่ z1 แทนค่ะ
ทดลองเติมข้อความให้เต็มแล้ว แต่ก็ #value อยู่ดีค่ะ หรือว่าดิฉันกรอกสูตรอะไรผิดไปหรือเปล่าคะsnasui wrote:จะต้องเติมให้เต็ม เว้นว่างไม่ได้ ไปเติมไว้ที่เซลล์อื่นเช่นนั้นไม่ได้ครับ2. จากข้อมูลดิบพบว่า คอลัมน์ข้อความในชีทสาขาไม่ได้กรอกครบทุกบรรทัด
จึงมาระบุรหัสที่ต้องการไว้ที่ z1 แทนค่ะ
โจทย์แค่นี้ไม่สามารถขจัดรายการที่มีจำนวนเงินตรงกัน ข้อความตรงกัน แต่ต่างวันที่กันได้ ความต่างของวันที่จะต้องระบุด้วยว่า ต่างกันกี่วันจึงจะไม่เอามาแสดง ดังเช่นรายการในบรรทัด 31, 32 ในชีท สาขา ตามไฟล์แนบ จะยังให้คำตอบได้ จนกว่าจะระบุได้ว่า วันที่ต่างกันเท่าไรจึงจะถือว่าไม่ตรงกันและต้องไม่นำมาแสดง3. คีย์ที่ใช้จับคู่ คือ จำนวนเงิน ในชีท สาขา ที่ตรงกับจำนวนเงินในชีท สนญ และต้องมีรหัสข้อความในชีท สนญ. = 206
4. ถ้าจับคู่กันได้ (จำนวนเงินเท่ากัน และรหัส ตรงกัน ) ให้แสดงวันที่ Postg Date ในชีท สนญ ออกมา
5. กรณีที่มีจำนวนเงินเท่ากันหลายรายการ จะต้องจับคู่วันที่ให้ถูกรายการด้วยค่ะ
Code: Select all
=IF(T3="","",IFERROR(INDEX(สนญ!$U$4:$U$85,MATCH(MIN(IF(ISNUMBER(สนญ!$P$4:$P$85),IF(P3=ABS(สนญ!$P$4:$P$85),IF(T3=สนญ!$T$4:$T$85,ABS(สนญ!$U$4:$U$85-U3))))),IF(ISNUMBER(สนญ!$P$4:$P$85),IF(P3=ABS(สนญ!$P$4:$P$85),IF(T3=สนญ!$T$4:$T$85,ABS(สนญ!$U$4:$U$85-U3)))),0)),""))
ต้องระบุให้ได้ น้อยกว่ากี่วันก็ว่าไปครับ ถ้าระบุไม่ได้ก็หาคำตอบมาให้ไม่ได้pori wrote:แต่ถ้ามีเหลื่อมวันกันบ้าง ก็สันนิษฐานเอาว่ามันไม่น่าจะนานนัก อาจเป็น 1-3 วัน แต่ก็ระบุไม่ได้จริงๆค่ะ ว่าต่างกันกี่วันจึงไม่นำมาสดงค่ะ รู้แต่ว่า ถ้าต่างกันเป็น สิบๆๆวัน ร้อยวัน ไม่น่าใช่น่ะค่ะ
การกรอกผิดโปรแกรมจะทราบได้อย่างไรว่ากรอกผิด ถ้าไม่สามารถแยกได้ว่าอันไหนกรอกผิด อันไหนกรอกถูก โปรแกรมก็ย่อมหาคำตอบไม่ได้เช่นกันครับpori wrote:แต่ถ้าสมมติว่า ข้อความที่ระบุในชีทสาขาเป็น 206 เช่นกัน แต่เป็นการถอนไปใช้อย่างอื่นที่ไม่ใช่การโอนไปยัง สนญ (ที่จริงควรระบุรหัสอื่น แต่ user อาจกรอกผิด) ก็ไม่ควรจะแสดงวันที่ให้เห็นน่ะค่ะ
Code: Select all
Sub test()
'
' test แมโคร
'
'
Sheets("สนญ").Select
Range("U1").Select
ActiveCell.FormulaR1C1 = "DATE"
Range("U4").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISNUMBER(RC[-6]),DATE(RIGHT(RC14,4),MID(RC14,4,2),LEFT(RC14,2)),0)"
Range("U4").Select
Selection.Copy
Range("U5:U85").Select
ActiveSheet.Paste
Sheets("สาขา").Select
Range("U1").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "DUMMY"
Range("U3").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISNUMBER(RC[-1]),--(RIGHT(RC[-9],4)&MID(RC[-9],4,2)&LEFT(RC[-9],2)),"""")"
Range("V1").Select
ActiveCell.FormulaR1C1 = "แปลง date"
Range("V3").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISNUMBER(RC[-2]),DATE(RIGHT(RC14,4),MID(RC14,4,2),LEFT(RC14,2)),0)"
Range("W1").Select
ActiveCell.FormulaR1C1 = "วันที่ผ่านรายการ สนญ"
Range("W3").Select
Selection.FormulaArray = _
"=IF(RC[-3]="""","""",INDEX(สนญ!R[1]C[-2]:R[82]C[-2],MATCH(MIN(IF(ISNUMBER(สนญ!R[1]C[-7]:R[82]C[-7]),IF(สาขา!RC[-7]=ABS(สนญ!R[1]C[-7]:R[82]C[-7]),IF(สาขา!RC[-3]=สนญ!R[1]C[-3]:R[82]C[-3],IF(สาขา!RC[-2]=สนญ!R[1]C[-19]:R[82]C[-19],ABS(สนญ!R[1]C[-2]:R[82]C[-2]-สาขา!RC[-1])))))),IF(ISNUMBER(สนญ!R[1]C[-7]:R[82]C[-7]),IF(สาขา!RC[-7]=ABS(สนญ!R[1]C[-7]:R[82]C[-7]),IF(สาขา!RC[" & _
"R[1]C[-3]:R[82]C[-3],IF(สาขา!RC[-2]=สนญ!R[1]C[-19]:R[82]C[-19],ABS(สนญ!R[1]C[-2]:R[82]C[-2]-สาขา!RC[-1]))))),0)))"
Range("U3:W3").Select
Selection.Copy
Range("U4:W61").Select
ActiveSheet.Paste
Application.CutCopyMode = False
End Sub