Page 1 of 1

VBA ปรับแต่งเซลล์ตามเงื่อนไขที่กำหนด

Posted: Sun Apr 30, 2017 2:42 pm
by yangkodza
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

Re: VBA ปรับแต่งเซลล์ตามเงื่อนไขที่กำหนด

Posted: Sun Apr 30, 2017 3:04 pm
by snasui
:D ลักษณะงานเป็นการกำหนด Conditional Formatting และมีลักษณะเดียวกันทุกคอลัมน์ ให้ทำทุกคอลัมน์พร้อมกันได้เลยไม่ต้อง Loop ครับ หรือติดขัดตรงไหน อย่างไร ช่วยอธิบายมาอีกรอบครับ

Re: VBA ปรับแต่งเซลล์ตามเงื่อนไขที่กำหนด

Posted: Sun Apr 30, 2017 3:10 pm
by yangkodza
ผมต้องทำทีละคอลัมน์ครับ ทำพร้อมกันไม่ได้
ต้องคอยเปลี่ยน
Application.Goto Reference:="data01"
Formula1:="=$E$7/2"
Formula1:="=$E$7"
แล้วมันจะทำให้ VBA ยาวครับ

Re: VBA ปรับแต่งเซลล์ตามเงื่อนไขที่กำหนด

Posted: Sun Apr 30, 2017 3:19 pm
by snasui
:D ช่วยอธิบายให้เข้าใจว่าเหตุใดจึงทำพร้อมกันไม่ได้

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

Re: VBA ปรับแต่งเซลล์ตามเงื่อนไขที่กำหนด

Posted: Sun Apr 30, 2017 3:31 pm
by yangkodza
สาเหตุที่ใช้ Goto เพราะว่า ผมตั้งชื่อไว้ (คิดว่าง่ายในการอิางอิง)
แล้วผมใช้การบันทึก VBA เอาครับ

ส่วนเรื่องที่ว่าทำพร้อมกันไม่ได้
อาจเป็นเพราะว่าผมเองยังไม่เข้าใจคำสั่งไม่ดีพอ
คะแนนเต็มด้านบนมีการแปรผัน อาจไม่ใช่ 10 คะแนนเสมอไปในแต่ละช่องของการเก็บคะแนน

ไม่งั้นผมก็หักดิบ นั่งทำทีละคอลัมน์ โดยการเปลี่ยนค่า 3 แห่ง ไล่กันไปเรื่อยๆเอาครับ :)

Re: VBA ปรับแต่งเซลล์ตามเงื่อนไขที่กำหนด

Posted: Sun Apr 30, 2017 3:39 pm
by yangkodza
อยากปรับให้มองค่า Formula1:="=E$7" ของแค่ละคอลัมน์
ตั้งแต่คอลัมน์ E:X ด้วยครับ

Re: VBA ปรับแต่งเซลล์ตามเงื่อนไขที่กำหนด

Posted: Sun Apr 30, 2017 3:46 pm
by snasui
:D ลองแนบไฟล์ที่ปรับ Code ตามที่ผมตอบไปแล้ว พร้อมแสดงตัวอย่างที่มองเห็นได้เด่นชัดว่าเซลล์ใดต้องการให้แสดงผลเป็นอย่างไร ปัจจุบันแสดงค่าผิดพลาดอย่างไร จะได้สะดวกในการทำความเข้าใจครับ

Re: VBA ปรับแต่งเซลล์ตามเงื่อนไขที่กำหนด

Posted: Sun Apr 30, 2017 4:00 pm
by yangkodza
snasui wrote::D ลองแนบไฟล์ที่ปรับ Code ตามที่ผมตอบไปแล้ว พร้อมแสดงตัวอย่างที่มองเห็นได้เด่นชัดว่าเซลล์ใดต้องการให้แสดงผลเป็นอย่างไร ปัจจุบันแสดงค่าผิดพลาดอย่างไร จะได้สะดวกในการทำความเข้าใจครับ
อาจารย์ครับ Code ที่อาจารย์ให้มา ทำงานได้ตามต้องการแล้วครับ (ผมหลงเอง มัวแต่มอง Formula1:="=E$7")
แต่ที่ผมแปลกใจคือ ทำไมเราอ้างอิง Formula1:="=E$7" แต่ถึงมีผลถึง X7 ครับ
รบกวนชี้แนะด้วยครับ

Re: VBA ปรับแต่งเซลล์ตามเงื่อนไขที่กำหนด

Posted: Sun Apr 30, 2017 4:02 pm
by snasui
:D ผมกำหนดให้เลือกทีเดียวทุกคอลัมน์ที่ต้องการใช้งาน นั่นคือ Application.Goto Reference:=Range("data01").Resize(, 20) และสูตรที่เราเขียนคือ =E$7 เป็นการ Lock เฉพาะบรรทัด ไม่ได้ Lock คอลัมน์ จึงมีผลกับทุกคอลัมน์ที่เราเลือก ไม่ใช่เฉพาะคอลัมน์ E ครับ

Re: VBA ปรับแต่งเซลล์ตามเงื่อนไขที่กำหนด

Posted: Sun Apr 30, 2017 4:08 pm
by yangkodza
อ้อ เข้าใจแล้วครับ
ขอบคุณมากครับ