: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
🪷 คำแสดงเจตนา
ขอผลแห่งการให้ความรู้นี้ จงกลับไปยังผู้ที่เป็นเจ้าของเดิม แม้ข้าพเจ้าจะไม่รู้จักท่านก็ตาม ขอให้แสงแห่งปัญญาที่ท่านเคยจุดไว้ ได้กลับไปเติมเต็มชีวิตของท่านอีกครั้ง และขอให้เจตนาของข้าพเจ้าเป็นการคืนความดีอย่างสงบ

ทำไมสร้างสูตร list รายการตามเงื่อนไขใน Table จึง error ครับ

ฟอรัมถาม-ตอบปัญหาการใช้งาน 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
godman
Silver
Silver
Posts: 643
Joined: Mon Jul 05, 2010 6:18 pm

ทำไมสร้างสูตร list รายการตามเงื่อนไขใน Table จึง error ครับ

#1

Post by godman »

อยากทราบว่าทำไมผมสร้างสูตร list รายการใน table จึงerror แต่พอสร้างนอก table กลับใช้การได้ ผมอยากใช้คุณสมบัตรของ table ให้คุ้มค่า เพราะเห็นว่า ไม่ต้องลากเซลล์เผื่อไว้เยอะๆ เพราะการลากเผื่อไว้อาจทำให้ลืม และเปลืองเนื้อที่ด้วยใช่ไหมครับ รบกวนอาจารย์แก้ไขให้ผมด้วย เรื่องสูตรลิตต์ในคอลัมพ์ ที่เซลลแรกคือ 0 หนะครับตามไฟล์แนบครับ
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: ทำไมสร้างสูตร list รายการตามเงื่อนไขใน Table จึง error ค

#2

Post by bank9597 »

:D ลองตามนี้ครับ
ที่ AB2 คีย์ =IF(AA2<>"","",MAX($AB$1:AB1)+1)
Forum Rules
  1. อย่าใช้ภาษาแชทในการตอบ-ถาม
  2. ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
  3. ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
  4. ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
  5. หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
  6. แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
godman
Silver
Silver
Posts: 643
Joined: Mon Jul 05, 2010 6:18 pm

Re: ทำไมสร้างสูตร list รายการตามเงื่อนไขใน Table จึง error ค

#3

Post by godman »

ขอบคุณครับ แต่ยังไม่ใช่คำตอบครับ เพราะใน sheet home ผมเปลี่ยนเงื่อนไขเป็น Closed ปรากฏว่า สูตรใน table ขึ้นไม่ตรงกับ นอก table ครับ ตามไฟล์แนบ จุดประสงค์คือ list รายการตามเงื่อนไข ซึ่งเงื่อนไขอยู่ในหน้า Home เป็น Data validation ในช่อง ที่ผมทำสีและเขียนว่า select ครับ
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: ทำไมสร้างสูตร list รายการตามเงื่อนไขใน Table จึง error ค

#4

Post by bank9597 »

:D ขออภัยครับ ผมยังไม่รู้เงื่อนไข

ปรับสูตรเป็น =IF(Home!$E$2="","",IF(Home!$E$2=$O$2,(IF(AA2<>"","",MAX($AB$1:AB1)+1)),(IF(AA2="","",MAX($AB$1:AB1)+1))))
คัดลอกลงมา ทดสอบเปลี่ยนเงื่อนไขในชีท Home ครับ
Forum Rules
  1. อย่าใช้ภาษาแชทในการตอบ-ถาม
  2. ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
  3. ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
  4. ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
  5. หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
  6. แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
godman
Silver
Silver
Posts: 643
Joined: Mon Jul 05, 2010 6:18 pm

Re: ทำไมสร้างสูตร list รายการตามเงื่อนไขใน Table จึง error ค

#5

Post by godman »

ตรงครับ และขอรบกวนขอคำอธิบายสูตรได้ไหมครับ ต่างจากสูตรนอก table อย่างไร ขอบคุณครับ
User avatar
bank9597
Guru
Guru
Posts: 3868
Joined: Wed Aug 17, 2011 11:49 am

Re: ทำไมสร้างสูตร list รายการตามเงื่อนไขใน Table จึง error ค

#6

Post by bank9597 »

:D เรื่องอธิบายสูตร ผมไม่ค่อยมั่นใจครับ อยากให้รออาจารย์มาอธิบายอีกครั้งครับ อีกประการคือ สูตรถูกใช้งานบน Table ซึ่งผมก็ไม่ชำนาญกับฟังก์ชั่นนี้เช่นกัน

ตามที่ผมเข้าใจ สูตร Lookup สามารถใช้อ้างอิงกับข้อมูลที่เป็นตัวเลขเท่านั้น จะเป็นตัวอักษรไม่ได้ ต่างจากสูตร Max ที่อ้างอิงข้อมูลทั้งตัวเลขและตัวอักษรได้

จากสูตร =IF(ISNUMBER(SEARCH(Home!$E$2,Database!$O2)),LOOKUP(9.9999999999999E+307,$AD$1:AD1)+1,"") หากเปลี่ยนค่าที่ AD1 เป็นตัวอักษร สูตรนี้ก็จะใช้ไม่ได้เช่นกัน

แต่สูตร =IF(Home!$E$2="","",IF(Home!$E$2=$O$2,(IF(AA2<>"","",MAX($AB$1:AB1)+1)),(IF(AA2="","",MAX($AB$1:AB1)+1)))) หากเปลี่ยนค่าที่ AB1 เป็นตัวอักษร สูตรก็ยังให้ค่าที่ถูกต้องเหมือนเดิม

ด้วยฟังก์ชัน Table ที่น่าจะกำหนดให้หัวคอลัมน์มีฟอร์แมตเป็น Text เท่านั้น ไม่สามารถเป็นตัวเลขได้ ถึงแม้จะคีย์ตัวเลขลงไปก็ตาม สูตรทุกสูตรจะอ่านค่าเป็น Text เท่านั้น

ทดสอบคีย์เลข 0 ที AB1 แล้วที่ เซลล์ใดๆ คีย์ =Count($AB$1:AB1) จะได้เท่ากับ 0 ที่เป็นเช่นนั้นเพราะสูตร Count จะนับแค่ตัวเลขเท่านั้น หากเป็น Text มันจะนับค่าไม่ได้ ดังนั้นถึงแม้ที่ AB1 จะคีย์เลข 0 ลงไปก็ตาม ฟังก์ชั่น Table ก็จะเปลี่ยนให้เป็น Text ทั้งหมด

แต่หาก คีย์เลข 0 ตั้งแต่ AB2 ลงมา แล้วเปลี่ยนอ้างอิงในสูตรเป็น =IF(ISNUMBER(SEARCH(Home!$E$2,Database!$O2)),LOOKUP(9.9999999999999E+307,$AB$2:AB2)+1,"")
สูตรก็จะแสดงค่าได้โดยไม่แสดง Error ใด

ด้วยเหตุดังกล่าวมานี้ ผมเลยคิดว่าน่าจะเป็นไปประมาณนี้ครับ แต่หากจะให้แน่ชัดจริง ต้องรออาจารย์มาอธิบายอีกครั้งครับ :D
Forum Rules
  1. อย่าใช้ภาษาแชทในการตอบ-ถาม
  2. ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
  3. ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
  4. ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
  5. หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
  6. แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
User avatar
snasui
Site Admin
Site Admin
Posts: 31178
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ทำไมสร้างสูตร list รายการตามเงื่อนไขใน Table จึง error ค

#7

Post by snasui »

godman wrote:อยากทราบว่าทำไมผมสร้างสูตร list รายการใน table จึงerror แต่พอสร้างนอก table กลับใช้การได้ ผมอยากใช้คุณสมบัตรของ table ให้คุ้มค่า เพราะเห็นว่า ไม่ต้องลากเซลล์เผื่อไว้เยอะๆ เพราะการลากเผื่อไว้อาจทำให้ลืม และเปลืองเนื้อที่ด้วยใช่ไหมครับ รบกวนอาจารย์แก้ไขให้ผมด้วย เรื่องสูตรลิตต์ในคอลัมพ์ ที่เซลลแรกคือ 0 หนะครับตามไฟล์แนบครับ
เนื่องจาก Field ของ Talble สามารถเป็น Text ได้เท่านั้น ไม่สามารถเป็น Number ได้ จึงต้องเปลี่ยนสูตรที่ AB2 เป็น

=IF(ISNUMBER(SEARCH(Home!$E$2,Database!$O2)),LOOKUP(9.9999999999999E+307,$AB$1:AB1+0)+1,"")

Enter > Copy ลงด้านล่าง
bank9597 wrote:ด้วยฟังก์ชัน Table ที่น่าจะกำหนดให้หัวคอลัมน์มีฟอร์แมตเป็น Text เท่านั้น ไม่สามารถเป็นตัวเลขได้ ถึงแม้จะคีย์ตัวเลขลงไปก็ตาม สูตรทุกสูตรจะอ่านค่าเป็น Text เท่านั้น
เข้าใจถูกต้องแล้วครับ
User avatar
bank9597
Guru
Guru
Posts: 3868
Joined: Wed Aug 17, 2011 11:49 am

Re: ทำไมสร้างสูตร list รายการตามเงื่อนไขใน Table จึง error ค

#8

Post by bank9597 »

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

Re: ทำไมสร้างสูตร list รายการตามเงื่อนไขใน Table จึง error ค

#9

Post by godman »

ขอบคุณอาจารย์ทั้งสองครับ พอเข้าใจบ้างแล้วครับ แต่ผมก็มีปัญหาต่อไป คือ ผมเป็นแฟนคลับของ Dynamic Range Name เพราะทำให้ผมไม่ต้องกังวัลว่าเซลล์จะไปสิ้นสุดตรงใหน แต่ใน sheet นี้ผมกลับเจอปัญหาเมื่อไป offset ใน table ที่ผู้ใช้เว้นช่องว่างไว้ ทำให้ range ไม่เท่านกันในแต่ละ filed เช่น
=OFFSET(Database!$Y$1,0,0,MATCH("*",Database!$Y:$Y,-1),1) เป็นของฟิลด์ ValidationDatail แต่มันก็ range ได้แค่เซลล์สุดท้ายยังไม่สุดและไม่เท่ากับ range name อื่นและสูตรตั้งชื่อก็ต่างกัน อาจารย์ช่วยแนะนำสูตรที่ผมจะตั้งชื่อได้ทีเดียวเหมื่อนกันหมดและจำนวนเซลล์ที่ไปถึงเท่ากัน เพราะต้องนำไปใช้กับ array ต่อด้วยครับ

=OFFSET(Database!$D$1,0,0,MATCH("*",Database!$D:$D,-1),1) ชือของ Part number ซึ่งมีช่องว่าง 1 ช่องในฟิลล์ และเราไม่สามารถควบคุมได้ เพราะผมดึงดาต้านี้มาจาก MICROSFOT aCCESS ครับ
สรุปว่า สูตร Dynamic Range name ที่ครอบคลุม case แบบนี้มีไหมครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31178
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ทำไมสร้างสูตร list รายการตามเงื่อนไขใน Table จึง error ค

#10

Post by snasui »

:lol: การตั้งชื่อให้ Range มีความสูงเท่ากันทั้งหมด จำเป็นต้องทราบว่าคอลัมน์ไหนมีข้อมูลครบทุกบรรทัด เพื่อจะได้นับคอลัมน์นั้นมาเป็นความสูงของทุก ๆ Range Name

จากไฟล์ตัวอย่าง คอลัมน์ A คือ ID มีครบทุกบรรทัด ควรใช้คอลัมน์นี้เป็นความสูงของทุก ๆ Range Name สำหรับข้อมูลในตารางนี้ ยกตัวอย่างการตั้งชื่อให้กับ Part Number# ซึ่งอยู่ที่คอลัมน์ D ควรจะใช้สูตรเป็น

=OFFSET(Database!$D$2,0,0,COUNT(Database!$A:$A))

ลองปรับใช้กับ Range Name อื่น ๆ ครับ
User avatar
bank9597
Guru
Guru
Posts: 3868
Joined: Wed Aug 17, 2011 11:49 am

Re: ทำไมสร้างสูตร list รายการตามเงื่อนไขใน Table จึง error ค

#11

Post by bank9597 »

:D เท่าที่อ่านไป พอเข้าใจครับ

ลองตั้งชื่อ Range Name ชื่อ Test กำหนดช่วงแถว =Database!$AA$2:$AA$23 สูตรจะคลุมจาก AA2:AA23

ลองทดสอบคีย์ข้อมูลในเซลล์ AA24 ดูครับ แล้ว ลองไปดูสูตรใน Range Name ชื่อ Test สูตรจะเปลี่ยนเป็น =Database!$AA$2:$AA$24


ฟังก์ชั่น table มีความสามารถที่ดีมากอยู่แล้วครับ หากคุณเพิ่มข้อมูลลงไปเรื่อยๆ สูตรมันก็จะลากไปให้เองอัตโนมัติครับ :D

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

Re: ทำไมสร้างสูตร list รายการตามเงื่อนไขใน Table จึง error ค

#12

Post by godman »

เยี่ยมเลยครับ สำหรับคำตอบ ขอบพระคุณมาก ครับขอให้มีความสุขมากๆ ครับ
godman
Silver
Silver
Posts: 643
Joined: Mon Jul 05, 2010 6:18 pm

Re: ทำไมสร้างสูตร list รายการตามเงื่อนไขใน Table จึง error ค

#13

Post by godman »

อาจารญ์ครับ ถามต่อ พอดีผมอาจจะเป็น lazy man ขี้เกียจสร้าง Dyanamic Range name เยอะๆด้วยการนั่งพิมพ์สูตรทีละ field ผมได้ macro ตัวนี้มา คงพูดไม่เต็มปากว่าเขียนเอง แต่นำมาดัดแปลงใช้กับลัษณะงานที่ทำอยู่ แต่พอผม run แล้วมันติด error ขอรบกวนอาจารย์ช่วยดู MACRO ให้ด้วยครับ มันเกิดจากอะไร หรือเป็นเพราะเหตุผลข้างบนหรือปล่าวครับ ที่ไม่สามารถทำได้ เพราะมี cell ว่างอยู่ ข้อมูลไม่เเต็มแถวหรือปล่ววครับ ขอบคุณครับ

Code: Select all

Sub CreateNames()


    Dim wb As Workbook, ws As Worksheet
    Dim lrow As Long, lcol As Long, i As Long
    Dim myName As String, Start As String

    ' set the row number where headings are held as a constant
    ' change this to the row number required if not row 1
    Const Rowno = 1

    ' set the Offset as the number of rows below Rowno, where the
    ' data begins
    Const ROffset = 1

    ' set the starting column for the data, in this case 1
    ' change if the data does not start in column A
    Const Colno = 1
    
    ' Set an Offset from the starting column, for the column number that
    ' will always have data entered, and will therefore be used in calculating lrow
    
    Const COffset = 0  ' in this case, the first column will always contain data.

    On Error GoTo CreateNames_Error

    Set wb = ActiveWorkbook
    Set ws = ActiveSheet

    ' count the number of columns used in the row designated to
    ' have the header names
 
    lcol = Cells(Rowno, Columns.Count).End(xlToLeft).Column
    lrow = ws.Cells(Rows.Count, Colno).End(xlUp).Row
    Start = Cells(Rowno, Colno).Address
    
    wb.Names.Add Name:="lcol", RefersTo:="=COUNTA($" & Rowno & ":$" & Rowno & ")"
    wb.Names.Add Name:="lrow", RefersToR1C1:="=COUNTA(C" & Colno + COffset & ")"
    wb.Names.Add Name:="myData", RefersTo:= _
                  "=" & Start & ":INDEX($1:$65536," & "lrow," & "Lcol)"

    For i = Colno To lcol
        ' if a column header contains spaces, replace the space with an underscore
        ' spaces are not allowed in range names.
        myName = Replace(Cells(Rowno, i).Value, " ", "_")
        If myName = "" Then
            ' if column header is blank, warn the user and stop the macro at that point
            ' names will only be created for those cells with text in them.
            MsgBox "Missing Name in column " & i & vbCrLf _
                   & "Please Enter a Name and run macro again"
            Exit Sub
        End If
        wb.Names.Add Name:=myName, RefersToR1C1:= _
                     "=R" & Rowno + ROffset & "C" & i & ":INDEX(C" & i & ",lrow)"
nexti:
    Next i

    On Error GoTo 0
        MsgBox "All dynamic Named ranges have been created"
    Exit Sub

    Exit Sub

CreateNames_Error:

    MsgBox "Error " & Err.Number & " (" & Err.Description & _
    ") in procedure CreateNames of Module Technology4U"

End Sub

You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31178
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ทำไมสร้างสูตร list รายการตามเงื่อนไขใน Table จึง error ค

#14

Post by snasui »

:D เพิ่มบรรทัดนี้เพื่อลบเครื่องหมาย # ในการตั้ง Range Name ทิ้งไปครับ

Code: Select all

myName = Replace(myName, "#", "")
จะได้เป็น

Code: Select all

Option Explicit

Sub CreateNames()

    Dim wb As Workbook, ws As Worksheet
    Dim lrow As Long, lcol As Long, i As Long
    Dim myName As String, Start As String
    
    Const Rowno = 1
    Const ROffset = 1
    Const Colno = 1
    Const COffset = 0  ' in this case, the first column will always contain data.
    
    On Error GoTo CreateNames_Error
    Set wb = ActiveWorkbook
    Set ws = ActiveSheet
    lcol = Cells(Rowno, Columns.Count).End(xlToLeft).Column
    lrow = ws.Cells(Rows.Count, Colno).End(xlUp).Row
    Start = Cells(Rowno, Colno).Address
    wb.Names.Add Name:="lcol", RefersTo:="=COUNTA($" & Rowno & ":$" & Rowno & ")"
    wb.Names.Add Name:="lrow", RefersToR1C1:="=COUNTA(C" & Colno + COffset & ")"
    wb.Names.Add Name:="myData", RefersTo:= _
                  "=" & Start & ":INDEX($1:$65536," & "lrow," & "Lcol)"
                  
    For i = Colno To lcol
        myName = Replace(Cells(Rowno, i).Value, " ", "_")
        myName = Replace(myName, "#", "")
        If myName = "" Then
            MsgBox "Missing Name in column " & i & vbCrLf _
                   & "Please Enter a Name and run macro again"
            Exit Sub
        End If
        wb.Names.Add Name:=myName, RefersToR1C1:= _
                     "=R" & Rowno + ROffset & "C" & i & ":INDEX(C" & i & ",lrow)"
    Next i
    
    On Error GoTo 0
        MsgBox "All dynamic Named ranges have been created"
    Exit Sub
    
CreateNames_Error:
    MsgBox "Error " & Err.Number & " (" & Err.Description & _
    ") in procedure CreateNames of Module Technology4U"
    
End Sub

godman
Silver
Silver
Posts: 643
Joined: Mon Jul 05, 2010 6:18 pm

Re: ทำไมสร้างสูตร list รายการตามเงื่อนไขใน Table จึง error ค

#15

Post by godman »

มันยอดมากเลยครับอาจารย์ ผมคลั่งไคล้มันมาก และมันช่วยให้ชีวิตผมง่ายขึ้น สะดวกขึ้นมีเวลาอยู่กับครอบครัวมากขึ้นขอบคุณมากครับ
เพราะมันไม่คำนึงถึงช่องว่าง มันไม่คำนึงถึงสูตร เอ้ะไม่แน่ใจ ขอให้อาจารย์มีแค่ความสุขครับ
Post Reply