Page 1 of 2
การจัดการฐานข้อมูลสต๊อกค่ะ
Posted: Thu Jul 16, 2015 9:18 pm
by suka
เรียนอาจารย์และท่านผู้รู้ค่ะ ช่วยเรื่องปรับสูตรค่ะ
ตัวอย่างไฟล์แนบชีท Form เซลล์ P204:P220ไฟล์ PO สูตรดึงค่าสุดคอลัมน์ AF ไฟล์ DB ด้วยเงื่อนไขที่ชีท Form ค่าตรงกับเซล์ C204 ให้ดึงค่าสุดท้าย ถ้าค่าในเซลล์ J2 ซื้อให้ + หาก ขายให้ - ค่ะ
สูตรล่างด้านควรปรับอย่างไรคะ
=LOOKUP(9.99999999999999E+307,CHOOSE({1,2},0,LOOKUP(2,1/([DB.xlsx]Sheet1!$M$2:$M$1000=$C204),[DB.xlsx]Sheet1!$AF$2:$AF$1000)))
Re: การจัดการฐานข้อมูลสต๊อกค่ะ
Posted: Thu Jul 16, 2015 9:47 pm
by suka
ขอเพิ่มข้อมูลค่ะ หากค่าในเซลล์ J2 ขายให้นำค่าในเซลล์ H204 ลบกับค่าในเซลล์ P204 คำตอบที่ต้องการในเซลล์ P204 6000 P205 เป็นค่าลบ -4000 หากค่าในเซลล์ J2 ซื้อก็ให้บวกค่ะ
Re: การจัดการฐานข้อมูลสต๊อกค่ะ
Posted: Thu Jul 16, 2015 10:09 pm
by snasui

คำตอบ 6000 และ -4000 มาจากไหน คิดอย่างไรจึงได้ค่าเท่านั้น ช่วยอธิบายมาด้วยครับ
Re: การจัดการฐานข้อมูลสต๊อกค่ะ
Posted: Thu Jul 16, 2015 10:46 pm
by suka
6000 ได้จากดึงค่าสุดท้ายจากคอลัมน์ AF หากค่าในคอลัมน์ M ของชีท DB ตรงกับค่าในเซลล์ C204 ชีท Form ก็ให้นำค่านั้นมาแสดงที่เซลล์ P204 ชีท Form และนำค่านั่นมาลบค่าในเซลล์ J2 ถ้า J2 ( ขาย - ) J2 ( ซื้อ + )
ตัวอย่างไหล์แนบค่าใน P204 8000 ( - ) ค่าในเซลล์ H204 2000 ก็เท่ากับเหลือ 6000 ค่ะ
4000 ได้จากดึงค่าสุดท้ายจากคอลัมน์ AF หากค่าในคอลัมน์ M ของชีท DB ตรงกับค่าในเซลล์ C205 ชีท Form ก็ให้นำค่านั้นมาแสดงที่เซลล์ P205 ชีท Form และนำค่านั่นมาลบค่าในเซลล์ J2 ถ้า J2 ( ขาย - ) J2 ( ซื้อ + )
ตัวอย่างไหล์แนบค่าใน P205 4000 ( - ) ค่าในเซลล์ H205 8000 ก็เท่ากับเหลือ -4000 ค่ะ
Re: การจัดการฐานข้อมูลสต๊อกค่ะ
Posted: Thu Jul 16, 2015 10:59 pm
by snasui

จากตัวอย่างที่ให้มา ไม่ได้ค่า 6000 และ -4000 ครับ ที่เป็นเช่นนั้นเเพราะ C204 และ C205 ในชีท Form ไม่มีอยู่ใน Sheet1 ไฟล์ DB ช่วยทำตัวอย่างมาใหม่ให้สอดคล้องกับสิ่งที่อธิบายด้วยครับ
Re: การจัดการฐานข้อมูลสต๊อกค่ะ
Posted: Fri Jul 17, 2015 11:09 am
by suka
อาจารย์คะ ตัวอย่างไฟล์ DB ปรับที่ Sheet1 เรียบร้อยแล้วค่ะ
ที่ไฟล์ DB ชีท Sheet1 เซลล์ N2:N3 รายการที่มีอยู่เป็นารยการซื้อ ที่ชีท Form ค่าในเซลล์ J2 เป็นขายให้แทนค่าด้วย ( - ) หากเป็นซื้อให้แทนค่าด้วย ( + ) ค่า
ที่ไฟล์ DB ชีท Sheet1 เซลล์ AF3 8000 ต้องการปรับสูตรชีท Form เซลล์ P204 ที่ดึงค่ามา 8000 ( - ) 2000 ตามค่าในเซลล์ H204 ชีท Form เนื่องจากค่าในเซลล์ J2 เป็นขาย ต้องการปรับสูตรในเซลล์ P204 จะเป็น 6000 ค่ะ
ชีท Form เซลล์ P205 ดึงค่ามา 4000 ( - ) 8000 ตามค่าในเซลล์ H205 ต้องการปรับสูตรในเซลล์ P205 เป็น ( - ) 4000 ค่ะ
ได้แนบรูปประกอบการอธิบายความต้องการมาด้วยค่ะ ไม่ทราบว่าควรเพิ่มวันเดือนปีเข้ามาตรวจสอบด้วยไหมค่ะ
Re: การจัดการฐานข้อมูลสต๊อกค่ะ
Posted: Fri Jul 17, 2015 1:28 pm
by snasui

ที่ไฟล์ PO.xlsm ชีท Form เซลล์ P204 ปรับสูตรเป็นด้านล่างครับ
=LOOKUP(9.99999999999999E+307,CHOOSE({1,2},0,LOOKUP(2,1/([DB.xlsx]Sheet1!$M$2:$M$1000=$C204),[DB.xlsx]Sheet1!$AF$2:$AF$1000)))+G204*IF(J2="ขาย",-1,1)
Re: การจัดการฐานข้อมูลสต๊อกค่ะ
Posted: Fri Jul 17, 2015 6:40 pm
by suka
ขอบคุณค่ะอาจารย์ สูตรที่ให้มาได้ตรงตามต้องการแล้วค่ะ
ขอช่วยอีกรอบค่ะ ตัวอย่างไฟล์แนบชีท Form เซลล์ P204 มีค่าเป็น 0 สูตรที่เซลล์ O204 ปรับอย่างไรให้แสดงค่าเป็น Finish คะ
และหากบรรทัดถัดไปว่าง เซลล์ O205:P220 ต้องการให้ว่างด้วยค่ะ
Re: การจัดการฐานข้อมูลสต๊อกค่ะ
Posted: Fri Jul 17, 2015 6:52 pm
by snasui

ตัวอย่างสูตรที่ P204 ครับ
=IF(P204="","",IF(P204=0,"Finish","process"))
Re: การจัดการฐานข้อมูลสต๊อกค่ะ
Posted: Fri Jul 17, 2015 7:20 pm
by suka
ขอบคุณค่ะอาจารย์ สูตรที่ O204 ได้ตามต้องการแล้วค่ะ
อาจารย์คะ รบกวนอีกรอบค่ะ ที่ P204 ปรับสูตรอย่างไรคะ ลองใส่สูตรด้านล่างใช่ไม่ได้ติดที่ 1 ระบายสีแดงค่ะ
=IF(ISBLANK($D204)," ",LOOKUP(9.99999999999999E+307,CHOOSE({1,2},0,LOOKUP(2,1/([DB.xlsx]Sheet1!$J$2:$J$984=$C204),[DB.xlsx]Sheet1!$Y$2:$Y$9993)))+$H204*IF($J$2="จ่ายออก",-1,[color=#BF0000]1)[/color]
Re: การจัดการฐานข้อมูลสต๊อกค่ะ
Posted: Fri Jul 17, 2015 8:39 pm
by snasui

ใส่วงเล็บปิดหลังสุดเข้าไปอีกตัว วงเล็บปิดยังไม่ครบครับ
Re: การจัดการฐานข้อมูลสต๊อกค่ะ
Posted: Sat Jul 18, 2015 11:21 am
by suka
ขอบคุณค่ะอาจารย์ ใส่วงเล็บปิดเพิ่มไปในสูตรแล้วใช้ได้ตรงตามต้องการแล้วค่ะ
ขอถามเพิ่มนะคะ ที่ไฟล์ DB.xlsx เซลล์ Y เป็นเซลล์รับค่ายอดคงเหลือหากมีการเรียกข้อมูลที่บันทึกไว้ก่อนหน้ามาแก้ไขแล้ว ค่ายอดคงเหลือที่เซลล์ Y ต้องการให้อัพเดทด้วย จะต้องปรับอย่างไรดีคะ
หมายเหตุ เนื่องจากไฟล์กรอกข้อมูลจะเรียกค่าสุดท้ายมาอัดเดท ถ้านำข้อมูลที่บันทึกไว้ก่อนหน้ามาแก้ไข ข้อมูลนั้นอาจไม่ใช่ค่าสุดท้ายค่ะ
Re: การจัดการฐานข้อมูลสต๊อกค่ะ
Posted: Sat Jul 18, 2015 12:36 pm
by snasui

เซลล์ Y ตามที่กล่าวถึงเราจะไม่นิยมเรียกเช่นนั้น ควรเรียกคอลัมน์ Y ครับ
จะเรียกว่าเซลล์ได้จะต้องประกอบด้วยคอลัมน์และบรรทัด เช่น เซลล์ Y1, AA2 เป็นต้น
การจะให้กลับไป Update ได้ก็ต้องเขียน Code เข้าไปจัดการซึ่งต้องเขียนมาเองก่อน ติดแล้วค่อยถามกันครับ
Re: การจัดการฐานข้อมูลสต๊อกค่ะ
Posted: Sun Jul 19, 2015 7:16 pm
by suka
อาจารย์คะ ขอรบกวนช่วยเรื่องปรับโค๊ดค่ะ
ไฟล์ DB.xlsx ชีท Sheet1 ที่เซลล์ J2 รหัส D002 คีย์ผิด และที่เซลล์ F2 เลขที่เอกสารถูกเรียกมาแก้ไข ให้เซลล์ J2 ใช้รหัส C002 แทนค่ะ ค่าที่ต้องการตัวอย่างไฟล์แนบไฟล์ DB.xlsx ชีท Sheet1 คอลัมน์ AB ค่ะ
ใช้โค๊ดด้านล่างนี้ไม่อัพเดทค่ะ ความต้องการให้อัพเดทข้อมูลค่ะ ไม่ทราบว่าควรปรับอย่างไรค่ะ
Code: Select all
Set rj = wbShare.Sheets("Sheet1").Range("J" & Rows.Count).End(xlUp).Offset(1, 0)
ใช้กับ Code ทั้งชุดด้านล่างนี้ค่ะ
Code: Select all
Sub PasteData()
Dim wbShare As Workbook
Dim formBook As Workbook
Dim rTarget As Range
Dim i As Integer
Dim E As Long
Dim rs As Range
Dim rt As Range
Dim rj As Range
Dim rd As Range
Set formBook = ThisWorkbook
Set wbShare = Workbooks("DB.xlsx")
On Error Resume Next ' ดักเผื่อหากชีท Sheet1ไม่ Filter ให้ทำขั้นตอนต่อไป
wbShare.Sheets("Sheet1").ShowAllData ' โค๊ดสั่งให้ปลด AutoFilter
Set rj = wbShare.Sheets("Sheet1").Range("J" & Rows.Count).End(xlUp).Offset(1, 0)
With wbShare
E = .Sheets("Sheet1").Range("e" & Rows.Count).End(xlUp).Value + 1
Select Case formBook.Sheets("Form").Range("o2").Value
Case "บิลซื้อ"
E = formBook.Sheets("Sheet1").Range("c2")
Case "ใบกำกับภาษี"
E = formBook.Sheets("Sheet1").Range("c3")
Case "ใบลดหนี้"
E = formBook.Sheets("Sheet1").Range("c4")
End Select
formBook.Worksheets("Form").Range("m2").Value = E
End With
wbShare.Save
With formBook
i = .Worksheets("Form").Range("C225").Value
End With
With formBook.Worksheets("Template")
Set rs = .Range(.Range("A2"), .Range("Z" & i + 1))
End With
Set rt = wbShare.Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
If formBook.Worksheets("Form").Range("C225") = True Then
End If
If formBook.Worksheets("Form").Range("B204") = "" Then
MsgBox "Your data is empty. Fill your data and click record button again."
Exit Sub
End If
rs.Copy: rt.PasteSpecial xlPasteValues
formBook.Save
formBook.Activate
formBook.Sheets("Form").Range("D2,B204:B220,D204:D220,D222, E204:F220,N204:N220").ClearContents
End Sub
Re: การจัดการฐานข้อมูลสต๊อกค่ะ
Posted: Sun Jul 19, 2015 8:32 pm
by snasui

ไฟล์ DB น่าจะเป็น Database เองอยู่แล้ว จะแก้ก็แก้ได้ตรง ๆ เลย
ที่กำลังจะทำอยู่นี้เมื่อแก้แล้วนำไป Update ที่ไหนครับ
Code บรรทัดใดที่เป็นการ Update ข้อมูลครับ
Re: การจัดการฐานข้อมูลสต๊อกค่ะ
Posted: Sun Jul 19, 2015 9:23 pm
by suka
ค่ะอาจารย์ ไฟล์ DB เป็น datatbase ค่ะ
จากตัวอย่างไฟล์ DB ชีท Sheet1 เซลล์ J2 ที่เป็นตัวหนังสือสีแดงเป็นข้อมูลเก่าที่คีย์ผิด เป็นการเรียกข้อมูลที่คีย์ผิดรายการมาแก้ไขแล้วบันทึกที่บรรทัดเดิมเซลล์ J2 ค่ะ
ตัวอย่างข้อมูลที่แก้ไขแล้วอยู่ที่เซลล์ J3 ไฟล์ DB ชีท Sheet1 ค่ะ
เมื่อแก้ไขอัพเดทข้อมูลแล้วจากไฟล์ตัวอย่าง
ค่าที่เซลล์ AA8 ก่อนแก้ข้อมูลค่าเดิม 500 ถ้าแก้ไขแล้วค่าใหม่ที่เซลล์ AA8 ต้องเป็น 1000 ค่ะ
Re: การจัดการฐานข้อมูลสต๊อกค่ะ
Posted: Sun Jul 19, 2015 9:29 pm
by snasui

ค่า 1000 คำนวณมาได้อย่างไรครับ
กรณีที่กลับมาแก้ใน Database ตรง ๆ ก็ต้อง Manual เข้าไปทั้งหมด ไม่ต้องเสียเวลาเขียน Code ครับ
Re: การจัดการฐานข้อมูลสต๊อกค่ะ
Posted: Sun Jul 19, 2015 10:15 pm
by suka
ค่า 1000 ได้จากการรับเข้า ยังไม่ได้จ่ายออกค่ะ
เซลล์ J2 รหัสสินค้า C002 ค่าที่เซลล์ AA2 เหลือค่าสุดท้าย 500
เซลล์ J8 รหัสสินค้า C002 ค่าที่เซลล์ AA8 500 + 500 ที่ J2
รวมเป็นค่า 1000 ที่ AA8 ค่ะ
ที่กลับมาแก้ที่ database ตรงๆคือต้องการทำตัวอย่างค่ะ
หากข้อมูลที่ database มีจำนวนมากๆการใช้ Manual ก็ต้องใช้เวลามากและอาจมีข้อผิดพลาดได้ค่ะ
จึงมาขอรบกวนอาจารย์ช่วยการปรับ code ค่ะ
Re: การจัดการฐานข้อมูลสต๊อกค่ะ
Posted: Mon Jul 20, 2015 9:13 am
by suka
suka wrote:ค่า 1000 ได้จากการรับเข้า ยังไม่ได้จ่ายออกค่ะ
เซลล์ J2 รหัสสินค้า C002 ค่าที่เซลล์ AA2 เหลือค่าสุดท้าย 500
เซลล์ J8 รหัสสินค้า C002 ค่าที่เซลล์ AA8 500 + 500 ที่ J2
รวมเป็นค่า 1000 ที่ AA8 ค่ะ
ที่กลับมาแก้ที่ database ตรงๆคือต้องการทำตัวอย่างค่ะ
หากข้อมูลที่ database มีจำนวนมากๆการใช้ Manual ก็ต้องใช้เวลามากและอาจมีข้อผิดพลาดได้ค่ะ
จึงมาขอรบกวนอาจารย์ช่วยการปรับ code ค่ะ
เพิ่มข้อมูลโพสต์ด้านบนค่ะ
ค่า 1000 ได้จากการรับเข้า ยังไม่ได้จ่ายออกค่ะ
เซลล์ J3 รหัสสินค้า C002 ค่าที่เซลล์ Y3 เหลือค่าสุดท้าย 500
เซลล์ J8 รหัสสินค้า C002 ค่าที่เซลล์ Y8 500 + 500 ที่ J3
หากได้รับการอัพเดทค่าที่ Y8 จะได้ 1000 ค่ะ
โดยกรอกข้อมูลที่ไฟล์ PO.xlsm ชีท Form เชลล์ P204 ดึงค่าสุดท้ายจากไฟล์ DB.xlsx ชีท Sheet1 คอลัมน์ Y มาด้วยเงื่อนไขรหัสสินค้าที่คอลัมน์ J
ไฟล์ PO.xlsm ชีท Form เซลล์ C204 บวกกับค่าในเซลล์ H204 ( ค่าที่ J2 รับเข้า + จ่ายออก - ค่ะ ) ที่ไฟล์ DB.xlsx ชีท Sheet1 คอลัมน์ Y หากค่าได้รับการอัพเดท ค่าที่ไฟล์ PO.xlsm ชีท Form เซลล์ P204 จะเป็นค่า 1500 จากไฟล์ตัวอย่างค่ะ
Re: การจัดการฐานข้อมูลสต๊อกค่ะ
Posted: Mon Jul 20, 2015 6:07 pm
by snasui

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