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
เราจะรู้ได้อย่างไรครับว่า ข้อมูลชุดไหนคือบันทึกเข้า ชุดไหนคือการแก้ไขข้อมูล
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
ผมเข้าใจครับว่ามันเป็นการบันทึกแก้ไข แต่ผมไม่เข้าใจว่าคุณต้องการแบบไหน
1. ต้องการบันทึกข้อมูลไปเก็บ
2. ต้องการอัพเดทข้อมูล
3. ต้องการดึงข้อมูลมาแสดง
ซึ่งผมทดสอบโค๊ดดูแล้ว ก็ยังไม่เข้าใจ ยังคงเห็นว่าเป็นการบันทึกข้อมูลเท่านั้น
ที่คิดไปเองคือ สงสัยว่าจะให้มีการคีย์รหัสในเซลล์ C3 ชีท1 แล้วให้ข้อมูลในชีท2 ที่มีรหัสตรงกันนำข้อมูลมาแสดง
Re: CODE_VLOOKUP
Posted: Thu Jun 12, 2014 12:41 pm
by pongpang
bank9597 wrote: ผมเข้าใจครับว่ามันเป็นการบันทึกแก้ไข แต่ผมไม่เข้าใจว่าคุณต้องการแบบไหน
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
ลองปรับโค๊ดตามนี้ดูครับว่าได้หรือไม่
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.ข้อมูลใหม่ คือการบันทึกเลขที่ ที่ยังไม่เคยบันทึกมาก่อน ให้นำไปต่อด้านล่าง
งงไปใหญ่เลยครับ ตกลงว่ามีแค่ 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
ขอบคุณครับ