Page 1 of 1

CODE_VLOOKUP

Posted: Thu Jun 12, 2014 12:00 pm
by pongpang
เรียน อาจารย์ทุกท่าน
ความต้องการ
1.คีย์ข้อมูลแล้วคัดลอกข้อมูลจากชีทที่1 ไปวางในชีทที่2
2.การนำข้อมูลไปวางในชีทที่ 2 วาง ตามลำดับเลขที่(ไม่จำเป็นต้องบันทึกเรียงลำดับ)
3.ในกรณีแก้ไขข้อมูล ให้นำข้อมูลที่แก้ไขวางทับข้อมูลเดิม

Code: Select all

Sub Paste()
    Dim irRange As Range
    Worksheets("sheet1").Range("c3:c7").Copy
    Worksheets("sheet2").Select
    Set Item = Worksheets("sheet2").Range("B3:B1000").Cells.Find(What:=Range("b2").Value)
    If Item Is Nothing Then
        Worksheets("sheet2").Cells(65536, "B").End(xlUp).Offset(1, 0).Select
    Else
        Item.Activate
    End If
    
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
    
    With Worksheets("sheet2")
        Set irRange = .Range("b3", .Range("f" & Rows.Count).End(xlUp))
        irRange.Borders.LineStyle = xlContinuous
        irRange.Sort Key1:=.Range("b3"), Order1:=xlAscending, Header:=xlGuess
    End With
    With Worksheets("sheet1")
    .Range("c3:c7").ClearContents
    .Range("C4:C7").Formula = "= vlookup($C$3,range(names)" & Range("b1000").End(xlUp).Row & ",match(c3,names,0),0)"
        Range("B4:c4").Copy
        Range("B4").PasteSpecial xlPasteValues
        Application.CutCopyMode = False
        
    End With
    Worksheets("sheet1").Select
    Range("C4").Select
End Sub   
Code มีผลดังนี้
1. วางข้อมูลได้ตามต้องการ
2. เมื่อแก้ไขข้อมูล ข้อมูลจะเพิ่มอีก 1 row ไม่ทับข้อมูลเดิม
3. การวางสูตร ERROR ตามภาพ
4.png
สำหรับไฟล์ตัวอย่างได้แนบมาด้วยแล้ว ขอความอนุเคราะห์ด้วย

Re: CODE_VLOOKUP

Posted: Thu Jun 12, 2014 12:10 pm
by bank9597
:D เราจะรู้ได้อย่างไรครับว่า ข้อมูลชุดไหนคือบันทึกเข้า ชุดไหนคือการแก้ไขข้อมูล

Re: CODE_VLOOKUP

Posted: Thu Jun 12, 2014 12:18 pm
by pongpang
ขอบคุณที่เอาใจช่วยเหลือ ดูที่ชีท 2 ดังภาพจะเห็นว่า เลขที่ 2 บันทึก 2 ครั้ง คือมีการแก้ไขข้อมูล
5.png

Re: CODE_VLOOKUP

Posted: Thu Jun 12, 2014 12:27 pm
by bank9597
:D ผมเข้าใจครับว่ามันเป็นการบันทึกแก้ไข แต่ผมไม่เข้าใจว่าคุณต้องการแบบไหน

1. ต้องการบันทึกข้อมูลไปเก็บ
2. ต้องการอัพเดทข้อมูล
3. ต้องการดึงข้อมูลมาแสดง

ซึ่งผมทดสอบโค๊ดดูแล้ว ก็ยังไม่เข้าใจ ยังคงเห็นว่าเป็นการบันทึกข้อมูลเท่านั้น

ที่คิดไปเองคือ สงสัยว่าจะให้มีการคีย์รหัสในเซลล์ C3 ชีท1 แล้วให้ข้อมูลในชีท2 ที่มีรหัสตรงกันนำข้อมูลมาแสดง :?:

Re: CODE_VLOOKUP

Posted: Thu Jun 12, 2014 12:41 pm
by pongpang
bank9597 wrote::D ผมเข้าใจครับว่ามันเป็นการบันทึกแก้ไข แต่ผมไม่เข้าใจว่าคุณต้องการแบบไหน

1. ต้องการบันทึกข้อมูลไปเก็บ
2. ต้องการอัพเดทข้อมูล
3. ต้องการดึงข้อมูลมาแสดง

ซึ่งผมทดสอบโค๊ดดูแล้ว ก็ยังไม่เข้าใจ ยังคงเห็นว่าเป็นการบันทึกข้อมูลเท่านั้น

ที่คิดไปเองคือ สงสัยว่าจะให้มีการคีย์รหัสในเซลล์ C3 ชีท1 แล้วให้ข้อมูลในชีท2 ที่มีรหัสตรงกันนำข้อมูลมาแสดง :?:
ที่เข้าใจถูกต้องแล้ว แต่ที่คิดนั่นก็ถูกต้องอีก คือ CODE ต้องการให้นำFUNCTION VLOOKUP ไปวางที่
sheet1 เซล C4ถึง C7

Re: CODE_VLOOKUP

Posted: Thu Jun 12, 2014 1:48 pm
by bank9597
:D ลองปรับโค๊ดตามนี้ดูครับว่าได้หรือไม่

Code: Select all

Sub Paste()
    Dim irRange As Range
    Worksheets("sheet1").Range("c3:c7").Copy
    Worksheets("sheet2").Select
    Set Item = Worksheets("sheet2").Range("B3:B1000").Cells.Find(What:=Range("b2").Value)
    If Item Is Nothing Then
        Worksheets("sheet2").Cells(65536, "B").End(xlUp).Offset(1, 0).Select
    Else
        Item.Activate
    End If
    
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
    
    With Worksheets("sheet2")
        Set irRange = .Range("b3", .Range("f" & Rows.Count).End(xlUp))
        irRange.Borders.LineStyle = xlContinuous
        irRange.Sort Key1:=.Range("b3"), Order1:=xlAscending, Header:=xlGuess
    End With
    
    With Worksheets("sheet1")

    .Range("c3:c7").ClearContents
    
    .Range("c3:c7").ClearContents
    .Range("C4").Formula = "= VLOOKUP(C3,sheet2!B3:F100,2,0)"
    .Range("C5").Formula = "= VLOOKUP(C3,sheet2!B3:F100,3,0)"
    .Range("C6").Formula = "= VLOOKUP(C3,sheet2!B3:F100,4,0)"
    .Range("C7").Formula = "= VLOOKUP(C3,sheet2!B3:F100,5,0)"
        
        
    End With
    Worksheets("sheet1").Select
    Range("C4").Select
End Sub

Re: CODE_VLOOKUP

Posted: Thu Jun 12, 2014 2:52 pm
by pongpang
ขอบคุณ มากครับ ที่พัฒนาขึ้น คือสามารถนำ function Vlookup วางใน เซลที่ต้องการได้
แต่การแก้ไขข้อมูลยังคงนำข้อมูลที่ต้องการแก้ไข ไปวางต่อท้าย ช่วย ๆ กันหน่อยครับ ขอบคุณล่วงหน้า
6.png

Re: CODE_VLOOKUP

Posted: Thu Jun 12, 2014 3:08 pm
by bank9597
:| ที่ว่านำไปวางต่อท้ายคืออะไรครับ ใช่การวางต่อจากรหัสที่เหมือนกันหรือเปล่า

เช่น รหัส 2 มีการแก้ไข พอนำไปบันทึก มันก็จะบันทึกต่อจากรหัส 2 ใช่หรือไม่

ผมทดสอบไฟล์ที่ตอบไปแล้ว รู้สึกจะตรงกับที่คุณต้องการแล้ว

Re: CODE_VLOOKUP

Posted: Thu Jun 12, 2014 3:16 pm
by pongpang
ขอบคุณมากครับที่ได้กรุณา
bank9597 wrote::| ที่ว่านำไปวางต่อท้ายคืออะไรครับ ใช่การวางต่อจากรหัสที่เหมือนกันหรือเปล่า

เช่น รหัส 2 มีการแก้ไข พอนำไปบันทึก มันก็จะบันทึกต่อจากรหัส 2 ใช่หรือไม่

ผมทดสอบไฟล์ที่ตอบไปแล้ว รู้สึกจะตรงกับที่คุณต้องการแล้ว
การวางข้อมูล แบ่งเป็น 2 กรณี ดังนี้
1. วางข้อมูลตามลำดับเลขที่(ข้อนี้ได้แล้ว)
2. ถ้าหากแก้ไขข้อมูล(นำข้อมูลมาแก้ไข)ให้นำไปวางทับข้อมูลเก่า เช่น นำข้อมูล เลขที่ 2 แก้ไข
ก็จะนำข้อไปเก็บทับข้อมูลเก่าของเลขที่2 (ยังไม่ได้ เพราะนำไปต่อท้ายเลขที่2เดิม)
pongpang wrote:เรียน อาจารย์ทุกท่าน
ความต้องการ
1.คีย์ข้อมูลแล้วคัดลอกข้อมูลจากชีทที่1 ไปวางในชีทที่2
2.การนำข้อมูลไปวางในชีทที่ 2 วาง ตามลำดับเลขที่(ไม่จำเป็นต้องบันทึกเรียงลำดับ)
3.ในกรณีแก้ไขข้อมูล ให้นำข้อมูลที่แก้ไขวางทับข้อมูลเดิม

1. วางข้อมูลได้ตามต้องการ
2. เมื่อแก้ไขข้อมูล ข้อมูลจะเพิ่มอีก 1 row ไม่ทับข้อมูลเดิม
3. การวางสูตร ERROR ตามภาพ
4.png

Re: CODE_VLOOKUP

Posted: Thu Jun 12, 2014 3:22 pm
by bank9597
:| เมื่อไหร่จะเป็นวางต่อแถว เมื่อไหร่จะเป็นการวางทับ มีเงื่อนไขอะไรกำหนดไว้บ้างครับ

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

Re: CODE_VLOOKUP

Posted: Thu Jun 12, 2014 3:49 pm
by pongpang
bank9597 wrote::| เมื่อไหร่จะเป็นวางต่อแถว เมื่อไหร่จะเป็นการวางทับ มีเงื่อนไขอะไรกำหนดไว้บ้างครับ

ถ้าไม่กำหนดเงื่อนไขชัดเจน ก็ไม่สามารถเขียนโค๊ดได้ครับ เช่นเดียวกัน เราไม่สามารถทำสองอย่างในเวลาเดียวกันได้ เว้นแต่จะมีเงื่อนไขจำกัดไว้
ขอบคุณที่ให้การช่วยเหลือ
มีเงื่อนไข ดังนี้
1.ข้อมูลเก่า(เลขที่ ที่เคยบันทึกไว้แล้ว นำข้อมูลแก้ไข)วางทับที่เดิม
2.ข้อมูลใหม่ คือการบันทึกเลขที่ ที่ยังไม่เคยบันทึกมาก่อน ให้นำไปต่อด้านล่าง

Re: CODE_VLOOKUP

Posted: Thu Jun 12, 2014 4:29 pm
by bank9597
pongpang wrote:
bank9597 wrote::| เมื่อไหร่จะเป็นวางต่อแถว เมื่อไหร่จะเป็นการวางทับ มีเงื่อนไขอะไรกำหนดไว้บ้างครับ

ถ้าไม่กำหนดเงื่อนไขชัดเจน ก็ไม่สามารถเขียนโค๊ดได้ครับ เช่นเดียวกัน เราไม่สามารถทำสองอย่างในเวลาเดียวกันได้ เว้นแต่จะมีเงื่อนไขจำกัดไว้
ขอบคุณที่ให้การช่วยเหลือ
มีเงื่อนไข ดังนี้
1.ข้อมูลเก่า(เลขที่ ที่เคยบันทึกไว้แล้ว นำข้อมูลแก้ไข)วางทับที่เดิม
2.ข้อมูลใหม่ คือการบันทึกเลขที่ ที่ยังไม่เคยบันทึกมาก่อน ให้นำไปต่อด้านล่าง
:lol: งงไปใหญ่เลยครับ ตกลงว่ามีแค่ 2 กรณีเท่านั้น คือบันทึกเข้า กับ ปรับปรุงข้อมูล (ตามที่เข้าใจในขณะนี้)

ผมปรับโค๊ดและรูปแบบอื่นๆให้ใหม่ดังนี้
ที่ Sheet1 เซลล์ E3 คีย์ =COUNTIF(Sheet2!B3:B100,C3)
ที่ Sheet1 เซลล์ F3 คีย์ =IF(C3="","",C3) ปรับเซลล์ในสูตรเรื่อยไปจนถึงคอลัมน์ J เป็นการสร้างแทมเพลส

ปรับโค๊ดใหม่เป็น

Code: Select all

Sub Paste()
   Dim wsPaste As Worksheet
   Dim temp As Worksheet
   
   Set wsPaste = Sheets("Sheet2")
   Set temp = Sheets("Sheet1")
   
   If temp.Range("E3") = 0 Then
        temp.Range("F3:J3").Copy
        wsPaste.Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
        Application.CutCopyMode = False
        MsgBox "บันทึกข้อมูลเรียบร้อย", vbInformation
    ElseIf IsNull(temp.Range("C3")) Then
        MsgBox "๕ุณยังไม่กรอกรหัส", vbInformation
    Else
        With Application
            Dim i As Integer
            i = .Match(temp.Range("C3"), wsPaste.Range("B3:B100")) + 1
            temp.Range("G3:J3").Copy
            wsPaste.Cells(i, 3).Offset(1, 0).PasteSpecial xlPasteValues
            MsgBox "แก้ไขข้อมูลเรียบร้อยแล้ว", vbInformation
            Application.CutCopyMode = False
        End With
        
    End If
   
End Sub

Re: CODE_VLOOKUP

Posted: Thu Jun 12, 2014 5:17 pm
by pongpang
ขอบคุณครับ