เพื่อมุ่งให้เกิดคุณภาพจากการอบรมสูงสุด Excel Expert Training ให้การอบรม Excel กลุ่มเล็กๆ ไม่เกิน 6 คนทุกคนสามารถเรียนรู้ Excel อย่างใกล้ชิด จะมาคนเดียวหรือมาเป็นกลุ่มแล้วนัดวันอบรมแบบส่วนตัวก็ได้ ผู้เข้าอบรมทุกคนสามารถติดตามเนื้อหาที่อบรมได้อย่างชัดเจนจากจอภาพด้านหน้าของตัวเอง
Results 1 to 9 of 9

Thread: ถาม-การใส่สีพื้นหลังเซลล์ตามเงื่อนไขครับ

  1. #1
    [D]arkspirit
    Guest

    ถาม-การใส่สีพื้นหลังเซลล์ตามเงื่อนไขครับ

    เงื่อนไข คือ 1.ถ้าแผนและผลไม่ตรงกันให้ใส่สีเตือนไว้ทั้งในช่องแผนและผล คือลองใช่สูตร Interior.ColorIndex แล้วแต่ไม่สำเร็จคือในเงื่อนไขเดียวมันไม่ขึ้นสีเตือนทั้งแผนและผลครับ มันขึ้นได้อันเดียว 2.ให้วน Loop ดูจากในช่อง "ลำดับที่" ถ้าไม่มีให้หยุด Loopรบกวนฝากดูด้วยครับ ขอบคุณมากครับ

  2. #2
    อรวีร์
    Guest

    Smile

    ดูเหมือนคุณจะถามแบบ VBA แต่เนื่องจากคุณไม่ได้ส่งโปรแกรมเดิมมาให้ดูด้วยว่าทดลองทำเองไปแค่ไหน อย่างไร
    อรวีร์เลยส่งมาให้เป็นแบบใช้ Conditional Format ซึ่งเป็นวิธีที่ดีกว่า เนื่องจากเมื่อเพิ่มเติม เปลี่ยนแปลงค่า จะได้ผลใหม่ตามค่านั้นๆทันที ไม่ต้องไป Run Code ใหม่

  3. #3
    อรวีร์
    Guest

    Smile

    ถ้าเป็น VBA ก็แบบนี้ค่ะ
    Code:
    Range("D3").Select
    With Columns("D:G")
        .FormatConditions.Delete
        .FormatConditions.Add Type:=xlExpression, _
            Formula1:="=IF(MOD(FLOOR(ROW()+2,5)-ROW(),2)=0," & _
            "AND(D3<>D4,COUNTA(D3:D4)=2)," & _
            "AND(D2<>D3,COUNTA(D2:D3)=2))"
        .FormatConditions(1).Interior.ColorIndex = 36
    End With

  4. #4
    [D]arkspirit
    Guest

    ขอบคุณมากครับ

    ขอบคุณมากครับคุณ อรวีร์

    แต่ขออีกสักนิดได้มั้ยครับ คือผมไม่เข้าใจสูตรเลย
    ปกติผมใช้แต่ if else เลยเอาใช้ในงานจริงผมไม่ได้

    Range("D3").Select >> อันนี้คือให้กดช่อง "D3" ใช้รึเปล่าครับ
    With Columns("D:G") >> ให้เริ่มทำตั้งแต่ D ถึง G
    .FormatConditions.Delete >> ให้ลบ FormatConditions เก่าทิ้ง
    .FormatConditions.Add Type:=xlExpression, _ >> อันนี้ไม่เข้าใจครับ
    Formula1:="=IF(MOD(FLOOR(ROW()+2,5)-ROW(),2)=0," & _ >> อันนี้งงไปเลย
    "AND(D3<>D4,COUNTA(D34)=2)," & _ >> ไม่เข้าใจอีกละครับ
    "AND(D2<>D3,COUNTA(D23)=2))" >> ไม่เข้าใจ
    .FormatConditions(1).Interior.ColorIndex = 36 >> ถ้าใช้ให้ใส่สีเหลืองอ่อน
    End With >> ปิด With
    กรุณาช่วยอธิบายเพิ่มเติมอีกสักนิดได้มั้ยครับ
    ขอบคุณมากครับ

  5. #5
    อรวีร์
    Guest

    Smile

    อธิบายไม่ไหวค่ะ เพราะไม่ทราบว่าคุณใช้ Excel ได้แล้วเท่าใด Function ภายใน Excel ที่ใช้ในสูตรเหล่านี้ คุณเคยใช้หรือไม่
    Mod( ), Floor( ), Row( ), CountA( )

    และคุณเคยกำหนด Conditional Formatting หรือไม่

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

  6. #6
    [D]arkspirit
    Guest
    ต้องขอโทษด้วยครับอาจจะถามมากไปนิด

    ผมสามารถใช้ Conditional Formatting แก้โจทย์ของผมได้ครับ
    แต่ทางหัวหน้าต้องการเป็น VB ก็เลยหัดเขียนดู
    ก็พอดีแปลกใจว่าสามารถนำ code ของ excel มาใส่ลงใน vb ได้
    FormatConditions.Add Type:=xlExpression พึ่งเคยเห็นครับ
    ส่วนคำสั่ง Mod( ), Floor( ), Row( ), CountA( )
    มีคำสั่ง Floor( ) อันเดียวที่ผมยังไม่เข้าใจ รู้มาว่าไว้ปัดเศษลงแต่ยังใช้ไม่เป็นครับ
    แต่ที่ไม่เข้าใจคือ " & _ >> มันไว้ทำอะไรครับ
    แล้วก็แปลกใจในแนวคิดในการใช้ funtion หลายๆตัวมาประยุกใช้ได้อย่างดี
    จะขอเก็บการประยุกสูตรไว้เป็นความรู้ครับ

    ขอบคุณมากครับ

  7. #7
    อรวีร์
    Guest

    Smile

    Quote Originally Posted by [D]arkspirit View Post
    ต้องขอโทษด้วยครับอาจจะถามมากไปนิด
    ถามมากนั้นดีค่ะ ผู้ตอบทุกท่านน่าจะชอบที่ผู้ถามใส่ใจในคำตอบ แสดงว่าต้องการเข้าใจอย่างแท้จริง ไม่ใช่นำไปใช้อย่างเดียว
    & _ เป็นการต่อบรรทัดใน Code ภาษา VB ค่ะ มักใช้กับบรรทัดที่ยาวๆ เช่น
    If I>J Then Msgbox "ค่า " & I & " มากกว่าค่า " & J
    อาจเขียนอีกแบบเป็น
    If I>J Then Msgbox "ค่า " & _
    I & " มากกว่าค่า " & J
    หรือ
    If I>J Then Msgbox "ค่า " & I & " มาก" & _
    "กว่าค่า " & J

    จะเห็นว่า Code บรรทัดเดียวที่ยาวๆ เราสามารถแบ่งเป็นหลายบรรทัดเพื่อให้อ่านดูง่าย แต่ VB จะถือว่าเป็นบรรทัดเดียวต่อเนื่องกันอยู่ค่ะ

  8. #8
    อรวีร์
    Guest

    Smile

    ส่วน Floor( ) กรณีนี้อรวีร์นำมาใช้เพื่อหาบรรทัดแรกของชุดข้อมูล ซึ่งคือบรรทัดที่ 3,8,13, . . .
    โดยที่ . . .
    ถ้าข้อมูลอยู่บรรทัดที่ 3-7 จะมีบรรทัดเริ่มต้นอยู่ที่บรรทัด 3
    ถ้าข้อมูลอยู่บรรทัดที่ 8-12 จะมีบรรทัดเริ่มต้นอยู่ที่บรรทัด 8
    ถ้าข้อมูลอยู่บรรทัดที่ 13-17 จะมีบรรทัดเริ่มต้นอยู่ที่บรรทัด 13

    อรวีร์ใช้สูตรแบบนี้ค่ะ
    บรรทัดเริ่มต้น = Floor( บรรทัดข้อมูล + 2 , 5 ) -2
    ลองแทนที่บรรทัดข้อมูลด้วยเลขค่าใดๆดูค่ะ ว่าได้ผลลัพธ์บรรทัดเริ่มต้นตรงตามเงื่อนไขหรือไม่

    การใช้ Floor( ) แบบนี้เป็นการใช้เพื่อ"แบ่งกลุ่ม"ตัวเลข เพื่อให้เลขช่วงหนึ่ง(หลายๆตัว หลายค่า) ถูกเปลี่ยนค่า(ได้ผลลัพธ์)เป็นเลขเดียวกัน ดังตัวอย่าง
    =Floor( X , 5 )
    จะเป็นการเปลี่ยนเลข(X) 0,1,2,3,4 ไปเป็น 0
    เปลี่ยนเลข 5,6,7,8,9 ไปเป็น 5
    เปลี่ยนเลข 10,11,12,13,14 ไปเป็น 10
    . . . . . . . . . . . .
    จะเห็นว่าจำนวนเลข(เฉพาะจำนวนเต็ม) ทีละกลุ่มๆละ 5 ตัวจะถูกเปลี่ยนไปเป็นเลขเดียวกัน
    โจทย์ของคุณก็มีลักษณะเช่นนี้ คือกลุ่มละ 5 บรรทัดจะมีบรรทัดแรกร่วมกัน(ตัวเดียวกัน)
    ฉะนั้นจะใช้สูตรคร่าวๆแบบนี้
    =Floor( หมายเลขบรรทัด , 5)
    แต่เนื่องจากหมายเลขบรรทัดไม่ได้เป็นกลุ่มแบบข้างบน 0-4,5-9,10-14, . . .
    แต่เป็น 3-7,8-12,13-17, . . .
    จึงต้องบวกหมายเลขบรรทัดด้วย 2 ค่ะ(หรือลบด้วย 3 ก็ได้)
    และผลลัพธ์ที่ต้องการก็ไม่ใช่ 5,10,15, . . . แต่เป็น 3,8,13, . . . ฉะนั้นจึงต้องลบผลหลังจาก Floor( ) แล้วด้วย 2

    จะเห็นว่าถ้าจะอธิบายทุก Function จะยาว เพราะนี่เพิ่งจะอธิบาย Floor( ) อย่างเดียวเองค่ะ

  9. #9
    [D]arkspirit
    Guest
    ขอบคุณมากครับสำหรับคำอธิบาย

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •