snasui.com ยินดีต้อนรับ
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ ระบุ Version ของ Excel
ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code]
และปิดด้วย [/code]
ตัวอย่างเช่น [code]dim r as range[/code]
เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
a6block5
Member
Posts: 14 Joined: Thu May 13, 2021 2:34 pm
Excel Ver: 365
#1
Post
by a6block5 » Fri May 14, 2021 9:59 am
ขอคำแนะนำในการเขียน Code Macro สำหรับการ Vlookup ข้อมูลใน Sheet1 ให้แสดงใน Sheet Tracking หน่อยครับ ผมลองเขียนตามความเข้าใจ แต่ข้อมูลไม่มา ขอบคุณมากครับ
You do not have the required permissions to view the files attached to this post.
logic
Gold
Posts: 1511 Joined: Thu Mar 18, 2010 1:57 pm
Excel Ver: 365
#2
Post
by logic » Fri May 14, 2021 11:14 am
แบบนี้หรือเปล่าครับ
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
Posts: 14 Joined: Thu May 13, 2021 2:34 pm
Excel Ver: 365
#3
Post
by a6block5 » Fri May 14, 2021 1:32 pm
เรียนคุณ logic
ลอง copy code มันยังไม่ขึ้นค่า Vlookup เลยครับ ขอคำชี้แนะด้วยครับ
You do not have the required permissions to view the files attached to this post.
logic
Gold
Posts: 1511 Joined: Thu Mar 18, 2010 1:57 pm
Excel Ver: 365
#4
Post
by logic » Fri May 14, 2021 1:46 pm
ต้องรันโค้ดก่อนถึงจะได้คำตอบครับ
ถ้ารันตรง ๆ ก็เข้าไปที่หน้าโค้ด ~~> คลิกในโค้ด ~~> กดปุ่ม F5 ที่คีย์บอร์ด
้ถ้าจะเรียกรันจาก Excel ต้องเปลี่ยนคำขึ้นต้นจาก Private ไปเป็น Public ที่หน้า Excel กดแป้น Alt+F8 ก็จะมีชื่อโค้ดให้เลือกรันครับ
a6block5
Member
Posts: 14 Joined: Thu May 13, 2021 2:34 pm
Excel Ver: 365
#5
Post
by a6block5 » Fri May 14, 2021 1:58 pm
อ่อ ขอบคุณมากครับ ผมกำลังจะถามพอดีเลย
a6block5
Member
Posts: 14 Joined: Thu May 13, 2021 2:34 pm
Excel Ver: 365
#6
Post
by a6block5 » Fri May 14, 2021 2:04 pm
logic wrote: Fri May 14, 2021 1:46 pm
ต้องรันโค้ดก่อนถึงจะได้คำตอบครับ
ถ้ารันตรง ๆ ก็เข้าไปที่หน้าโค้ด ~~> คลิกในโค้ด ~~> กดปุ่ม F5 ที่คีย์บอร์ด
้ถ้าจะเรียกรันจาก Excel ต้องเปลี่ยนคำขึ้นต้นจาก Private ไปเป็น Public ที่หน้า Excel กดแป้น Alt+F8 ก็จะมีชื่อโค้ดให้เลือกรันครับ
===========================================================================================
ขอบคุณมากครับ ได้ตามที่ต้องการเลยครับ
a6block5
Member
Posts: 14 Joined: Thu May 13, 2021 2:34 pm
Excel Ver: 365
#7
Post
by a6block5 » Fri May 14, 2021 4:22 pm
สวัสดีครับคุณ 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.
snasui
Site Admin
Posts: 31153 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#8
Post
by snasui » Fri May 14, 2021 5:14 pm
ใน 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
Posts: 14 Joined: Thu May 13, 2021 2:34 pm
Excel Ver: 365
#9
Post
by a6block5 » Mon May 17, 2021 9:51 am
ขอบคุณคุณ 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.
logic
Gold
Posts: 1511 Joined: Thu Mar 18, 2010 1:57 pm
Excel Ver: 365
#10
Post
by logic » Mon May 17, 2021 10:56 am
ผมขอบอกเป็นแนวทางแทนแล้วกัน กติกาคือเขียนมาเองก่อน ติดแล้วค่อยถามกันครับ
การเอาค่ามาต่อกันใน vba ก็เหมือนกับในเอ็กเซลใช้เครื่องหมาย & ช่วยได้ สมมุติว่าเอา d8 เชื่อมกับ k8 ก็ใช้เป็น range("d8").value & "-" & range("k8").value
ถ้าเดิม i เป็นคอลัมน์ว่าง ๆ ลองย้าย mycode ไปเป็นคอลัมน์อื่นที่ไม่ใช่ i แล้วใช้ m.offset(x,y)
แทน range
ดูครับ
ส่วนเรื่องลบ ถ้าเป็นผมจะเพิ่มปุ่มมาอีกอัน เอาไว้ลบโดยเฉพาะ ลองอัดมาโครตอนลบแล้วเอาโค้ดมาปรับใช้ ถ้าเอาแบบคลิกซ้ำแล้วลบก็ต้องเขียนเช็คอีกว่าก่อนหน้านี้ทำอะไรไป อีกแบบที่ใช้ได้ก็จะเป็นว่าเช็คเซลล์นั้นเซลล์นี้ ถ้ามีค่าก็ลบ ถ้าไม่มีค่าก็รันโค้ดเติมค่า