:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

CODE_VLOOKUP

ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
pongpang
Member
Member
Posts: 242
Joined: Fri Jul 05, 2013 9:35 pm

CODE_VLOOKUP

#1

Post 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
สำหรับไฟล์ตัวอย่างได้แนบมาด้วยแล้ว ขอความอนุเคราะห์ด้วย
You do not have the required permissions to view the files attached to this post.
User avatar
bank9597
Guru
Guru
Posts: 3868
Joined: Wed Aug 17, 2011 11:49 am

Re: CODE_VLOOKUP

#2

Post by bank9597 »

:D เราจะรู้ได้อย่างไรครับว่า ข้อมูลชุดไหนคือบันทึกเข้า ชุดไหนคือการแก้ไขข้อมูล
Forum Rules
  1. อย่าใช้ภาษาแชทในการตอบ-ถาม
  2. ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
  3. ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
  4. ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
  5. หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
  6. แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
pongpang
Member
Member
Posts: 242
Joined: Fri Jul 05, 2013 9:35 pm

Re: CODE_VLOOKUP

#3

Post by pongpang »

ขอบคุณที่เอาใจช่วยเหลือ ดูที่ชีท 2 ดังภาพจะเห็นว่า เลขที่ 2 บันทึก 2 ครั้ง คือมีการแก้ไขข้อมูล
5.png
You do not have the required permissions to view the files attached to this post.
User avatar
bank9597
Guru
Guru
Posts: 3868
Joined: Wed Aug 17, 2011 11:49 am

Re: CODE_VLOOKUP

#4

Post by bank9597 »

:D ผมเข้าใจครับว่ามันเป็นการบันทึกแก้ไข แต่ผมไม่เข้าใจว่าคุณต้องการแบบไหน

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

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

ที่คิดไปเองคือ สงสัยว่าจะให้มีการคีย์รหัสในเซลล์ C3 ชีท1 แล้วให้ข้อมูลในชีท2 ที่มีรหัสตรงกันนำข้อมูลมาแสดง :?:
Forum Rules
  1. อย่าใช้ภาษาแชทในการตอบ-ถาม
  2. ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
  3. ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
  4. ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
  5. หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
  6. แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
pongpang
Member
Member
Posts: 242
Joined: Fri Jul 05, 2013 9:35 pm

Re: CODE_VLOOKUP

#5

Post by pongpang »

bank9597 wrote::D ผมเข้าใจครับว่ามันเป็นการบันทึกแก้ไข แต่ผมไม่เข้าใจว่าคุณต้องการแบบไหน

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

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

ที่คิดไปเองคือ สงสัยว่าจะให้มีการคีย์รหัสในเซลล์ C3 ชีท1 แล้วให้ข้อมูลในชีท2 ที่มีรหัสตรงกันนำข้อมูลมาแสดง :?:
ที่เข้าใจถูกต้องแล้ว แต่ที่คิดนั่นก็ถูกต้องอีก คือ CODE ต้องการให้นำFUNCTION VLOOKUP ไปวางที่
sheet1 เซล C4ถึง C7
User avatar
bank9597
Guru
Guru
Posts: 3868
Joined: Wed Aug 17, 2011 11:49 am

Re: CODE_VLOOKUP

#6

Post 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
You do not have the required permissions to view the files attached to this post.
Forum Rules
  1. อย่าใช้ภาษาแชทในการตอบ-ถาม
  2. ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
  3. ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
  4. ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
  5. หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
  6. แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
pongpang
Member
Member
Posts: 242
Joined: Fri Jul 05, 2013 9:35 pm

Re: CODE_VLOOKUP

#7

Post by pongpang »

ขอบคุณ มากครับ ที่พัฒนาขึ้น คือสามารถนำ function Vlookup วางใน เซลที่ต้องการได้
แต่การแก้ไขข้อมูลยังคงนำข้อมูลที่ต้องการแก้ไข ไปวางต่อท้าย ช่วย ๆ กันหน่อยครับ ขอบคุณล่วงหน้า
6.png
You do not have the required permissions to view the files attached to this post.
User avatar
bank9597
Guru
Guru
Posts: 3868
Joined: Wed Aug 17, 2011 11:49 am

Re: CODE_VLOOKUP

#8

Post by bank9597 »

:| ที่ว่านำไปวางต่อท้ายคืออะไรครับ ใช่การวางต่อจากรหัสที่เหมือนกันหรือเปล่า

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

ผมทดสอบไฟล์ที่ตอบไปแล้ว รู้สึกจะตรงกับที่คุณต้องการแล้ว
Forum Rules
  1. อย่าใช้ภาษาแชทในการตอบ-ถาม
  2. ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
  3. ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
  4. ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
  5. หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
  6. แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
pongpang
Member
Member
Posts: 242
Joined: Fri Jul 05, 2013 9:35 pm

Re: CODE_VLOOKUP

#9

Post 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
User avatar
bank9597
Guru
Guru
Posts: 3868
Joined: Wed Aug 17, 2011 11:49 am

Re: CODE_VLOOKUP

#10

Post by bank9597 »

:| เมื่อไหร่จะเป็นวางต่อแถว เมื่อไหร่จะเป็นการวางทับ มีเงื่อนไขอะไรกำหนดไว้บ้างครับ

ถ้าไม่กำหนดเงื่อนไขชัดเจน ก็ไม่สามารถเขียนโค๊ดได้ครับ เช่นเดียวกัน เราไม่สามารถทำสองอย่างในเวลาเดียวกันได้ เว้นแต่จะมีเงื่อนไขจำกัดไว้
Forum Rules
  1. อย่าใช้ภาษาแชทในการตอบ-ถาม
  2. ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
  3. ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
  4. ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
  5. หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
  6. แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
pongpang
Member
Member
Posts: 242
Joined: Fri Jul 05, 2013 9:35 pm

Re: CODE_VLOOKUP

#11

Post by pongpang »

bank9597 wrote::| เมื่อไหร่จะเป็นวางต่อแถว เมื่อไหร่จะเป็นการวางทับ มีเงื่อนไขอะไรกำหนดไว้บ้างครับ

ถ้าไม่กำหนดเงื่อนไขชัดเจน ก็ไม่สามารถเขียนโค๊ดได้ครับ เช่นเดียวกัน เราไม่สามารถทำสองอย่างในเวลาเดียวกันได้ เว้นแต่จะมีเงื่อนไขจำกัดไว้
ขอบคุณที่ให้การช่วยเหลือ
มีเงื่อนไข ดังนี้
1.ข้อมูลเก่า(เลขที่ ที่เคยบันทึกไว้แล้ว นำข้อมูลแก้ไข)วางทับที่เดิม
2.ข้อมูลใหม่ คือการบันทึกเลขที่ ที่ยังไม่เคยบันทึกมาก่อน ให้นำไปต่อด้านล่าง
User avatar
bank9597
Guru
Guru
Posts: 3868
Joined: Wed Aug 17, 2011 11:49 am

Re: CODE_VLOOKUP

#12

Post 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
You do not have the required permissions to view the files attached to this post.
Forum Rules
  1. อย่าใช้ภาษาแชทในการตอบ-ถาม
  2. ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
  3. ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
  4. ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
  5. หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
  6. แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
pongpang
Member
Member
Posts: 242
Joined: Fri Jul 05, 2013 9:35 pm

Re: CODE_VLOOKUP

#13

Post by pongpang »

ขอบคุณครับ
Post Reply