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]
เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
yangkodza
Bronze
Posts: 372 Joined: Tue Feb 10, 2015 10:37 am
Excel Ver: 2021
#1
Post
by yangkodza » Sun Apr 30, 2017 2:42 pm
01.GIF
Code: Select all
Sub Macro01()
Application.Goto Reference:="data01" 'แก้ส่วนนี้
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlLessEqual, _
Formula1:="=$E$7/2" 'แก้ส่วนนี้
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Font
.Color = -16776961
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = True
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, _
Formula1:="=$E$7" 'แก้ส่วนนี้
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Font
.Color = -16711681
.TintAndShade = 0
End With
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = True
End Sub
จาก VBA ด้านบน
ผมต้องการทำซ้ำไปทางขวาอีก 19 ครั้ง รวมต้นฉบับ คือ 20 ครั้ง
รวบกวนช่วยปรับสูตรให้ทีครับ
ในทีนี้ผมได้สร้างกล่องชื่อข้อมูล data01 - data20 ไว้แล้วครับ
test.xls
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 30738 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#2
Post
by snasui » Sun Apr 30, 2017 3:04 pm
ลักษณะงานเป็นการกำหนด
Conditional Formatting และมีลักษณะเดียวกันทุกคอลัมน์ ให้ทำทุกคอลัมน์พร้อมกันได้เลยไม่ต้อง Loop ครับ หรือติดขัดตรงไหน อย่างไร ช่วยอธิบายมาอีกรอบครับ
yangkodza
Bronze
Posts: 372 Joined: Tue Feb 10, 2015 10:37 am
Excel Ver: 2021
#3
Post
by yangkodza » Sun Apr 30, 2017 3:10 pm
ผมต้องทำทีละคอลัมน์ครับ ทำพร้อมกันไม่ได้
ต้องคอยเปลี่ยน
Application.Goto Reference:="data01"
Formula1:="=$E$7/2"
Formula1:="=$E$7"
แล้วมันจะทำให้ VBA ยาวครับ
snasui
Site Admin
Posts: 30738 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#4
Post
by snasui » Sun Apr 30, 2017 3:19 pm
ช่วยอธิบายให้เข้าใจว่าเหตุใดจึงทำพร้อมกันไม่ได้
Statement Goto ไม่จำเป็นต้องใช้ค่านั้น และไม่ต้องใช้ Goto ก็ย่อมได้ครับ
ตัวอย่างการกำหนดพร้อมกันทีเดียวครับ
Code: Select all
Sub Macro16()
Application.Goto Reference:=Range("data01").Resize(, 20) 'á¡éÊèǹ¹Õé
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlLessEqual, _
Formula1:="=E$7/2" 'á¡éÊèǹ¹Õé
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Font
.Color = -16776961
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = True
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, _
Formula1:="=E$7" 'á¡éÊèǹ¹Õé
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Font
.Color = -16711681
.TintAndShade = 0
End With
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = True
End Sub
yangkodza
Bronze
Posts: 372 Joined: Tue Feb 10, 2015 10:37 am
Excel Ver: 2021
#5
Post
by yangkodza » Sun Apr 30, 2017 3:31 pm
สาเหตุที่ใช้ Goto เพราะว่า ผมตั้งชื่อไว้ (คิดว่าง่ายในการอิางอิง)
แล้วผมใช้การบันทึก VBA เอาครับ
ส่วนเรื่องที่ว่าทำพร้อมกันไม่ได้
อาจเป็นเพราะว่าผมเองยังไม่เข้าใจคำสั่งไม่ดีพอ
คะแนนเต็มด้านบนมีการแปรผัน อาจไม่ใช่ 10 คะแนนเสมอไปในแต่ละช่องของการเก็บคะแนน
ไม่งั้นผมก็หักดิบ นั่งทำทีละคอลัมน์ โดยการเปลี่ยนค่า 3 แห่ง ไล่กันไปเรื่อยๆเอาครับ
yangkodza
Bronze
Posts: 372 Joined: Tue Feb 10, 2015 10:37 am
Excel Ver: 2021
#6
Post
by yangkodza » Sun Apr 30, 2017 3:39 pm
อยากปรับให้มองค่า Formula1:="=E$7" ของแค่ละคอลัมน์
ตั้งแต่คอลัมน์ E:X ด้วยครับ
snasui
Site Admin
Posts: 30738 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#7
Post
by snasui » Sun Apr 30, 2017 3:46 pm
ลองแนบไฟล์ที่ปรับ Code ตามที่ผมตอบไปแล้ว พร้อมแสดงตัวอย่างที่มองเห็นได้เด่นชัดว่าเซลล์ใดต้องการให้แสดงผลเป็นอย่างไร ปัจจุบันแสดงค่าผิดพลาดอย่างไร จะได้สะดวกในการทำความเข้าใจครับ
yangkodza
Bronze
Posts: 372 Joined: Tue Feb 10, 2015 10:37 am
Excel Ver: 2021
#8
Post
by yangkodza » Sun Apr 30, 2017 4:00 pm
snasui wrote: ลองแนบไฟล์ที่ปรับ Code ตามที่ผมตอบไปแล้ว พร้อมแสดงตัวอย่างที่มองเห็นได้เด่นชัดว่าเซลล์ใดต้องการให้แสดงผลเป็นอย่างไร ปัจจุบันแสดงค่าผิดพลาดอย่างไร จะได้สะดวกในการทำความเข้าใจครับ
อาจารย์ครับ Code ที่อาจารย์ให้มา ทำงานได้ตามต้องการแล้วครับ (ผมหลงเอง มัวแต่มอง Formula1:="=E$7")
แต่ที่ผมแปลกใจคือ ทำไมเราอ้างอิง Formula1:="=E$7" แต่ถึงมีผลถึง X7 ครับ
รบกวนชี้แนะด้วยครับ
snasui
Site Admin
Posts: 30738 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#9
Post
by snasui » Sun Apr 30, 2017 4:02 pm
ผมกำหนดให้เลือกทีเดียวทุกคอลัมน์ที่ต้องการใช้งาน นั่นคือ
Application.Goto Reference:=Range("data01").Resize(, 20)
และสูตรที่เราเขียนคือ =E$7 เป็นการ Lock เฉพาะบรรทัด ไม่ได้ Lock คอลัมน์ จึงมีผลกับทุกคอลัมน์ที่เราเลือก ไม่ใช่เฉพาะคอลัมน์ E ครับ
yangkodza
Bronze
Posts: 372 Joined: Tue Feb 10, 2015 10:37 am
Excel Ver: 2021
#10
Post
by yangkodza » Sun Apr 30, 2017 4:08 pm
อ้อ เข้าใจแล้วครับ
ขอบคุณมากครับ