: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

VBA Vlookup ข้อมูลระหว่าง worksheet

ฟอรัมถาม-ตอบปัญหาการใช้งาน 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
a6block5
Member
Member
Posts: 14
Joined: Thu May 13, 2021 2:34 pm
Excel Ver: 365

VBA Vlookup ข้อมูลระหว่าง worksheet

#1

Post by a6block5 »

ขอคำแนะนำในการเขียน Code Macro สำหรับการ Vlookup ข้อมูลใน Sheet1 ให้แสดงใน Sheet Tracking หน่อยครับ ผมลองเขียนตามความเข้าใจ แต่ข้อมูลไม่มา ขอบคุณมากครับ
You do not have the required permissions to view the files attached to this post.
User avatar
logic
Gold
Gold
Posts: 1511
Joined: Thu Mar 18, 2010 1:57 pm
Excel Ver: 365

Re: VBA Vlookup ข้อมูลระหว่าง worksheet

#2

Post by logic »

แบบนี้หรือเปล่าครับ

Code: Select all

Private Sub Worksheet_Vaccine()
    Dim lastRow&
    Dim myCode As Range, c As Range
    With Sheets("Tracking")
        lastRow = .Range("b" & .Rows.Count).End(xlUp).Row
        Set myCode = .Range("b3:b" & lastRow)
        For Each c In myCode
            c.Offset(0, 1).Value = Application.VLookup(c, Sheet1.Range("b:d"), 2, False)
            c.Offset(0, 2).Value = Application.VLookup(c, Sheet1.Range("b:d"), 3, False)
        Next c
    End With
End Sub
a6block5
Member
Member
Posts: 14
Joined: Thu May 13, 2021 2:34 pm
Excel Ver: 365

Re: VBA Vlookup ข้อมูลระหว่าง worksheet

#3

Post by a6block5 »

เรียนคุณ logic

ลอง copy code มันยังไม่ขึ้นค่า Vlookup เลยครับ ขอคำชี้แนะด้วยครับ
You do not have the required permissions to view the files attached to this post.
User avatar
logic
Gold
Gold
Posts: 1511
Joined: Thu Mar 18, 2010 1:57 pm
Excel Ver: 365

Re: VBA Vlookup ข้อมูลระหว่าง worksheet

#4

Post by logic »

ต้องรันโค้ดก่อนถึงจะได้คำตอบครับ

ถ้ารันตรง ๆ ก็เข้าไปที่หน้าโค้ด ~~> คลิกในโค้ด ~~> กดปุ่ม F5 ที่คีย์บอร์ด

้ถ้าจะเรียกรันจาก Excel ต้องเปลี่ยนคำขึ้นต้นจาก Private ไปเป็น Public ที่หน้า Excel กดแป้น Alt+F8 ก็จะมีชื่อโค้ดให้เลือกรันครับ
a6block5
Member
Member
Posts: 14
Joined: Thu May 13, 2021 2:34 pm
Excel Ver: 365

Re: VBA Vlookup ข้อมูลระหว่าง worksheet

#5

Post by a6block5 »

อ่อ ขอบคุณมากครับ ผมกำลังจะถามพอดีเลย
a6block5
Member
Member
Posts: 14
Joined: Thu May 13, 2021 2:34 pm
Excel Ver: 365

Re: VBA Vlookup ข้อมูลระหว่าง worksheet

#6

Post by a6block5 »

logic wrote: Fri May 14, 2021 1:46 pm ต้องรันโค้ดก่อนถึงจะได้คำตอบครับ

ถ้ารันตรง ๆ ก็เข้าไปที่หน้าโค้ด ~~> คลิกในโค้ด ~~> กดปุ่ม F5 ที่คีย์บอร์ด

้ถ้าจะเรียกรันจาก Excel ต้องเปลี่ยนคำขึ้นต้นจาก Private ไปเป็น Public ที่หน้า Excel กดแป้น Alt+F8 ก็จะมีชื่อโค้ดให้เลือกรันครับ
===========================================================================================
ขอบคุณมากครับ ได้ตามที่ต้องการเลยครับ
a6block5
Member
Member
Posts: 14
Joined: Thu May 13, 2021 2:34 pm
Excel Ver: 365

Re: VBA Vlookup ข้อมูลระหว่าง worksheet

#7

Post by a6block5 »

สวัสดีครับคุณ logic

ผมลองเขียน code ตามที่คุณ logic สอน และนำ code ไปวางใน sheet จริง

มันยัง run ไม่ได้ เพราะ sheet จรืงที่ lookup ค่า แถว/คอลัมน์ ไม่ตรงกัน แต่ผมอ้างอิงไปแล้ว ก็ยังไม่ออก

ช่วยแนะนำด้วยครับ ผมเขียนสูตรที่ใช้ใน excel ปกติ ถ้าอยากเขียน VBA มันต้องเขียนยังไงครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31153
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: VBA Vlookup ข้อมูลระหว่าง worksheet

#8

Post by snasui »

:D ใน Code ไป Vlookup จาก Sheet1 แต่ในไฟล์จริงไม่มีชีตนั้น มีแต่ชีตดังภาพครับ
SheetName.png
การประกาศตัวแปรและนำไปใช้ควรจะเป็นตัวเดียวกัน ไม่ใช่ประกาศไว้เป็นค่าหนึ่งแล้วนำไปใช้เป็นอีกค่าหนึ่ง

เช่นประกาศไว้เป็น dim c as range ก็ไม่ควรใช้เป็น for each m in mycode แต่ควรเป็น for each c in mycode

การประกาศตัวแปรเป็นการจัดสรร Memory ให้ใช้งานอย่างเหมาะสม การที่ไม่ประกาศตัวแปรแล้วนำไปใช้จะทำให้สิ้นเปลือง Memory ถ้าโปรแกรมนั้นมีขนาดใหญ่ทำงานอย่างซับซ้อนครับ
You do not have the required permissions to view the files attached to this post.
a6block5
Member
Member
Posts: 14
Joined: Thu May 13, 2021 2:34 pm
Excel Ver: 365

Re: VBA Vlookup ข้อมูลระหว่าง worksheet

#9

Post by a6block5 »

ขอบคุณคุณ Snasui ที่ชี้แนะครับ ผมปรับตามที่คุณ Snasui และคุณ Logic แนะนำรันได้แล้วครับ

ผมอยากทราบเพิ่มเติมครับ


1.) sheet Tracking เดิมผมรวมข้อมูล Column D:K โดยการทำ CONCAT (D,K) แสดงค่าใน Column i แล้ว Vlookup ไป sheet UnitCost

ถ้าต้องการเพิ่มเติม Code ใน VBA ให้ CONCAT (D,K) ใน VBA ไปเลย ควรเพิ่ม Code ยังไงครับ หมายถึงใน เขียน Code VBA ให้มัน CONCAT(D,K) โดยที่เราไม่ต้องสร้าง MatCode เพิ่ม column i ครับ

อันนี้ของเดิม ครับ

Code: Select all

 lastRow = .Range("i" & .Rows.Count).End(xlUp).Row
        Set myCode = .Range("i8:i" & lastRow) 
You do not have the required permissions to view the files attached to this post.
User avatar
logic
Gold
Gold
Posts: 1511
Joined: Thu Mar 18, 2010 1:57 pm
Excel Ver: 365

Re: VBA Vlookup ข้อมูลระหว่าง worksheet

#10

Post by logic »

ผมขอบอกเป็นแนวทางแทนแล้วกัน กติกาคือเขียนมาเองก่อน ติดแล้วค่อยถามกันครับ

การเอาค่ามาต่อกันใน vba ก็เหมือนกับในเอ็กเซลใช้เครื่องหมาย & ช่วยได้ สมมุติว่าเอา d8 เชื่อมกับ k8 ก็ใช้เป็น range("d8").value & "-" & range("k8").value ถ้าเดิม i เป็นคอลัมน์ว่าง ๆ ลองย้าย mycode ไปเป็นคอลัมน์อื่นที่ไม่ใช่ i แล้วใช้ m.offset(x,y) แทน range ดูครับ

ส่วนเรื่องลบ ถ้าเป็นผมจะเพิ่มปุ่มมาอีกอัน เอาไว้ลบโดยเฉพาะ ลองอัดมาโครตอนลบแล้วเอาโค้ดมาปรับใช้ ถ้าเอาแบบคลิกซ้ำแล้วลบก็ต้องเขียนเช็คอีกว่าก่อนหน้านี้ทำอะไรไป อีกแบบที่ใช้ได้ก็จะเป็นว่าเช็คเซลล์นั้นเซลล์นี้ ถ้ามีค่าก็ลบ ถ้าไม่มีค่าก็รันโค้ดเติมค่า
Post Reply