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
:D คำตอบ 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
:D จากตัวอย่างที่ให้มา ไม่ได้ค่า 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
:D ที่ไฟล์ 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
:D ตัวอย่างสูตรที่ 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
:D ใส่วงเล็บปิดหลังสุดเข้าไปอีกตัว วงเล็บปิดยังไม่ครบครับ

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
:D เซลล์ 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
:D ไฟล์ 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
:D ค่า 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
:D การบันทึก เพิ่มลด แก้ไขข้อมูลเดิม ให้บันทึกจากหน้า Form ครับ

หากมีการบันทึกยอดยอดขายผิดก็จะต้องบันทึกการปรับปรุงยอดขาย หากบันทึกยอดซื้อผิดก็จะต้องบันทึกปรับปรุงยอดซื้อเพื่อให้ยอดใน DB เป็นยอดที่ถูกต้อง

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