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]
เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
nobody
Member
Posts: 11 Joined: Fri Oct 28, 2011 11:11 am
#1
Post
by nobody » Sun Jul 08, 2012 2:00 am
ผมมีปัญหาการอ้างอิงไฟล์ โดยกำหนดตัวแปรชื่อไฟล์ไว้ โดยใช้สูตร
=VLOOKUP($B$4,"["&$B$2&".xlsx]Sheet1'!$B$2:$E$5",3,0) (ตามไฟล์แนบครับ)
ได้ผลลัพท์เป็น " #VALUE! " ไม่ทราบใส่สูตรผิดตรงไหน
ขอบคุณครับ
You do not have the required permissions to view the files attached to this post.
bank9597
Guru
Posts: 3868 Joined: Wed Aug 17, 2011 11:49 am
#2
Post
by bank9597 » Sun Jul 08, 2012 7:30 am
ลองตามนี้ครับ
ที่เซลล์ B7 คีย์ =VLOOKUP($B$4,INDIRECT("["&B2&".xlsx"&"]"&"Sheet1"&"!"&"$B$3:$E$5"),3,0)
สามารถเปลี่ยนชื่อไฟล์ได้ใน B2
ปล. การทำเช่นนี้ ทุกไฟล์จะต้องมีตารางข้อมูลที่เหมือนกัน และชื่อชีทด้วย
Forum Rules
อย่าใช้ภาษาแชทในการตอบ-ถาม
ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
nobody
Member
Posts: 11 Joined: Fri Oct 28, 2011 11:11 am
#3
Post
by nobody » Sun Jul 08, 2012 7:46 am
รบกวนสอบถามอีกที ยังไม่ตรงกับความต้องการครับ
เนื่อง INDIRECT ต้องเปิดไฟล์ data.xlsx ค้างไว้ ข้อมูลถึงจะมาด้วยครับ
แต่ถ้าไม่ต้องการให้ไฟล์ data.xlsx เปิดไว้จะได้หรือไม่? เนื่องจากไฟล์ data.xlsx ผมมีอยู่หลายไฟล์ เช่น data1.xlsx , data2.xlsx , data3.xlsx , ........
ขอบคุณครับ
snasui
Site Admin
Posts: 30917 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#4
Post
by snasui » Sun Jul 08, 2012 9:28 am
ไม่สามารถใช้สูตรอื่นนอกจาก Indirect มาแบบเชื่อมให้เป็น Path แบบ String แล้วให้แสดงข้อมูลจากไฟล์ต้นทางได้ครับ
กรณีเป็นการรวบรวมข้อมูลจากหลาย ๆ ไฟล์ลองดูตัวอย่างจากที่นี่ครับ
http://snasui.blogspot.com/2010/06/blog-post.html นอกเหนือจากนี้คงต้องพึ่ง VBA ครับ
bank9597
Guru
Posts: 3868 Joined: Wed Aug 17, 2011 11:49 am
#5
Post
by bank9597 » Sun Jul 08, 2012 9:40 am
ต้องเปิดไฟล์ data.xlsx ค้างไว้ ข้อมูลถึงจะมาด้วยครับ
ครั้งแรกที่เปิดไฟล์ขึ้นมา จำเป็นต้องเปิดไฟล์ที่เกี่ยวข้องขึ้นมาพร้อมกันก่อนครับ และไม่ว่าสูตรไหน วิธีไหน คุณจำเป็นต้องเปิดขึ้นมาพร้อมกันก่อนเสมอ เพื่อให้สูตรจดจำปลายทางของอีกไฟล์ได้
เมื่อขึ้นมาพร้อมกันแล้ว คุณทดสอบปิดไฟล์ Data ไป สังเกตุที่สูตรจะยังทำงานตามปกติเหมือนเดิม
แต่กรณีใช้สูตร =VLOOKUP($B$4,[Data.xlsx]Sheet1!$B$3:$E$5,3,0) คุณไม่จำเป็นต้องเปิดไฟล์ทั้ง 2 พร้อมกันครับ สามารถเปิดแค่ไฟล์ที่ต้องการได้
ส่วนเหตุผลเป็นเพราะอะไรนั้น ต้องให้อาจารย์ หรือผู้รู้ท่านอื่นมาอธิบายอีกครั้งครับ
Forum Rules
อย่าใช้ภาษาแชทในการตอบ-ถาม
ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
nobody
Member
Posts: 11 Joined: Fri Oct 28, 2011 11:11 am
#6
Post
by nobody » Sun Jul 08, 2012 9:42 am
ขอบคุณทุกท่านมากครับ ที่ช่วยให้คำตอบ
พอเป็นแนวทางไปต่อได้ ยังไงจะลองปรับข้อมูลตามลิงค์ดูสงสัยยังไงจะเข้ามาสอบถามใหม่ครับ
snasui
Site Admin
Posts: 30917 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#7
Post
by snasui » Sun Jul 08, 2012 9:49 am
bank9597 wrote: ครั้งแรกที่เปิดไฟล์ขึ้นมา จำเป็นต้องเปิดไฟล์ที่เกี่ยวข้องขึ้นมาพร้อมกันก่อนครับ และไม่ว่าสูตรไหน วิธีไหน คุณจำเป็นต้องเปิดขึ้นมาพร้อมกันก่อนเสมอ เพื่อให้สูตรจดจำปลายทางของอีกไฟล์ได้
การเปิดไฟล์ขึ้นมาพร้อมกันช่วยให้ง่ายในการอ้างอิงข้ามไฟล์เท่านั้นครับ กรณีที่สามารถเขียนสูตรอ้างอิงแบบ
ข้ามเครื่อง ข้ามไดรฟ์ ข้ามโฟลเดอร์ ข้ามไฟล์ ได้ก็ไม่จำเป็นต้องเปิดไฟล์ขึ้นมาก่อนแต่อย่างใด
bank9597
Guru
Posts: 3868 Joined: Wed Aug 17, 2011 11:49 am
#8
Post
by bank9597 » Sun Jul 08, 2012 9:54 am
อธิบายเพิ่มเติมครับ
กรณีที่ต้องใช้สูตรแบบอ้างชื่อไฟล์ลงไปในสูตร เช่น Indirect Sumif Countif Offset เหล่านี้เป็นต้น จำเป็นต้องเปิดไฟล์ขึ้นมาพร้อมกันเสมอครับ
แต่กรณีใช้สูตร Vlookup ,Sum,Count,Sumproduct เหล่านี้ัเป็นต้น ไม่จำเป็นต้องเปิดไฟล์พร้อมกันก็ได้ เพียงแต่คุณต้องแม่นพอที่จะระบุที่อยู่ของไฟล์ได้ถูกต้อง แต่ตามหลักความเป็นจริงแล้ว จำเป็นต้องเปิดไฟล์พร้อมกันเสมอ เพื่อให้สามารถเขียนสูตรได้ง่ายและถูกต้องครับ
Forum Rules
อย่าใช้ภาษาแชทในการตอบ-ถาม
ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
bank9597
Guru
Posts: 3868 Joined: Wed Aug 17, 2011 11:49 am
#9
Post
by bank9597 » Sun Jul 08, 2012 9:55 am
snasui wrote: bank9597 wrote: ครั้งแรกที่เปิดไฟล์ขึ้นมา จำเป็นต้องเปิดไฟล์ที่เกี่ยวข้องขึ้นมาพร้อมกันก่อนครับ และไม่ว่าสูตรไหน วิธีไหน คุณจำเป็นต้องเปิดขึ้นมาพร้อมกันก่อนเสมอ เพื่อให้สูตรจดจำปลายทางของอีกไฟล์ได้
การเปิดไฟล์ขึ้นมาพร้อมกันช่วยให้ง่ายในการอ้างอิงข้ามไฟล์เท่านั้นครับ กรณีที่สามารถเขียนสูตรอ้างอิงแบบ
ข้ามเครื่อง ข้ามไดรฟ์ ข้ามโฟลเดอร์ ข้ามไฟล์ ได้ก็ไม่จำเป็นต้องเปิดไฟล์ขึ้นมาก่อนแต่อย่างใด
ขอบคุณอาจารย์ด้วยครับ
Forum Rules
อย่าใช้ภาษาแชทในการตอบ-ถาม
ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
nobody
Member
Posts: 11 Joined: Fri Oct 28, 2011 11:11 am
#10
Post
by nobody » Sun Jul 08, 2012 10:02 am
แต่กรณีใช้สูตร Vlookup ,Sum,Count,Sumproduct เหล่านี้ัเป็นต้น ไม่จำเป็นต้องเปิดไฟล์พร้อมกันก็ได้ เพียงแต่คุณต้องแม่นพอที่จะระบุที่อยู่ของไฟล์ได้ถูกต้อง แต่ตามหลักความเป็นจริงแล้ว จำเป็นต้องเปิดไฟล์พร้อมกันเสมอ เพื่อให้สามารถเขียนสูตรได้ง่ายและถูกต้องครับ
อีกทีครับ แล้วทำไม เราถึงอ้างอิงตัวแปรชื่อไฟล์ ไม่ได้ครับ Data.xlsx ระหว่าง
=VLOOKUP($B$4,[
Data.xlsx ]Sheet1!$B$3:$E$5,3,0)
กับ
=VLOOKUP($B$4,"[
"&$B$2&".xlsx ]Sheet1'!$B$2:$E$5",3,0)
snasui
Site Admin
Posts: 30917 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#11
Post
by snasui » Sun Jul 08, 2012 10:05 am
snasui wrote:
ไม่สามารถใช้สูตรอื่นนอกจาก Indirect มาแบบเชื่อมให้เป็น Path แบบ String แล้วให้แสดงข้อมูลจากไฟล์ต้นทางได้ครับ
Path หมายถึงเส้นทางเพื่อที่จะให้สูตรรู้จักต้นแหล่ง ผมกล่าวรวมถึงชื่อไฟล์ด้วยครับ
nobody
Member
Posts: 11 Joined: Fri Oct 28, 2011 11:11 am
#12
Post
by nobody » Sun Jul 08, 2012 10:16 am
ดังนั้นข้อหัวกระทู้นี้สามารถทำได้ 2 วิธี
1.
ที่เซลล์ B7 คีย์ =VLOOKUP($B$4,INDIRECT("["&B2&".xlsx"&"]"&"Sheet1"&"!"&"$B$3:$E$5"),3,0)
กรณีนี้ต้องเปิดไฟล์ที่เชื่อมโยงด้วยเท่านั้น
2.
ไม่สามารถใช้สูตรอื่นนอกจาก Indirect มาแบบเชื่อมให้เป็น Path แบบ String แล้วให้แสดงข้อมูลจากไฟล์ต้นทางได้ครับ
กรณีเป็นการรวบรวมข้อมูลจากหลาย ๆ ไฟล์ลองดูตัวอย่างจากที่นี่ครับ
http://snasui.blogspot.com/2010/06/blog-post.html นอกเหนือจากนี้คงต้องพึ่ง VBA ครับ
กรณีนี้
ไม่จำเป็น ต้องเปิดไฟล์ที่เชื่อมโยง
ถูกต้องไหมครับ ขอบคุณทุกท่านอีกทีครับ ถ้าท่านใดจะเสริมก็ได้เลยนะครับ
snasui
Site Admin
Posts: 30917 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#13
Post
by snasui » Sun Jul 08, 2012 10:24 am
กรณีความต้องการตามกระทู้นี้ถ้าต้องการให้ครอบคลุมเนื่องจากไม่ได้ระบุว่าต้องเป็นสูตร ผมสรุปให้ครอบคลุมแล้วกันครับ
ที่สามารถจะทำได้คือ
สูตร Indirect ร่วมกับสูตรใด ๆ ก็ได้ทั้งนั้นที่สามารถเขียน Lookup ค่าออกมาได้ ไม่จำเป็นต้อง Vlookup กรณีที่เปิดไฟล์ต้นทาง
เทคนิคตาม http://snasui.blogspot.com/2010/06/blog-post.html ซึ่งต้อง Manual เข้าไปส่วนหนึ่งเพื่อ Activate สูตรให้ทำงานกับไฟล์ที่ปิดอยู่ได้
ด้วย Add-ins หรือการ Coding เช่น VBA