: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

รบกวนสอบถาม code vba formatting

ฟอรัมถาม-ตอบปัญหาการใช้งาน 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
natthaporn
Member
Member
Posts: 187
Joined: Sun Jul 15, 2012 10:54 pm

รบกวนสอบถาม code vba formatting

#1

Post by natthaporn »

เรียน ทุกท่าน
ดิฉันได้นำ code vba เกี่ยวกับการเปลี่ยน formatting จาก web แห่งหนึ่งมาประยุกต์ใช้เพื่อเปลี่ยนสีตัวอักษร โดยมีเงื่อนไขว่า
ถ้าข้อมูลของ cell ตั้งแต่ B2:B3133 มีคำที่ตรงกันกับ cell A1 ให้เปลียนข้อมูลของ cell ตั้งแต่ B2:B3133 เป็นสีแดง
ถ้าข้อมูลของ cell ตั้งแต่ B2:B3133 มีคำที่ตรงกันกับ cell A2 ให้เปลียนข้อมูลของ cell ตั้งแต่ B2:B3133 เป็นสีเขียว

Code: Select all


Dim strString1, x&
For i = 0 To 3133
strString1 = Range("A1")
With Range("B2").Offset(0, i)
.Font.ColorIndex = 1
For x = 1 To Len(.Text) Step 1
If Mid(.Text, x, Len(strString1)) = strString1 Then .Characters(x, Len(strString1)).Font.ColorIndex = 3
Next x
End With
Next i

Dim strString2, y&
For t = 0 To 3133
strString2 = Range("A2")
With Range("B2").Offset(0, t)
.Font.ColorIndex = 1
For y = 1 To Len(.Text) Step 1
If Mid(.Text, y, Len(strString2)) = strString2 Then .Characters(y, Len(strString2)).Font.ColorIndex = 4
Next y
End With
Next t

ตอนแรกดิฉันลองแยก code ออกเป็น 2 module แล้วลอง run ทีละ module แต่พอ run module ที่1 ก็จะได้เฉพาะสีแดง " Font.ColorIndex = 3" ,run module ที่2 ก็จะได้เฉพาะสีเขียว " Font.ColorIndex = 4" แต่พอเอา code มารวมกันแล้วลอง run ดูก็จะได้ เฉพาะสีเขียวเท่านั้น
ดิฉันลองเอาทั้ง 2 module มารวมกันแล้วใช้สุตร if....then ก็เกิด error (code นี้ทดลองเขียนมา 5 ชั่วโมงแล้วคะ)

ดิฉันจึงขอรบกวนท่านผู้รู้แนะนำด้วยคะ ขอขอบคุณล่วงหน้าคะ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31159
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: รบกวนสอบถาม code vba formatting

#2

Post by snasui »

natthaporn wrote:ถ้าข้อมูลของ cell ตั้งแต่ B2:B3133 มีคำที่ตรงกันกับ cell A1 ให้เปลียนข้อมูลของ cell ตั้งแต่ B2:B3133 เป็นสีแดง
ถ้าข้อมูลของ cell ตั้งแต่ B2:B3133 มีคำที่ตรงกันกับ cell A2 ให้เปลียนข้อมูลของ cell ตั้งแต่ B2:B3133 เป็นสีเขียว
:D ข้อมูลตัวอย่างใน Sheet1 ไม่สอดคล้องกับที่กำลังอธิบาย ช่วยยกตัวอย่างและแสดงคำตอบที่ถูกต้องมาให้ตรงกับคำอธิบายนี้เพื่อจะได้เข้าใจตรงกันครับ
natthaporn
Member
Member
Posts: 187
Joined: Sun Jul 15, 2012 10:54 pm

Re: รบกวนสอบถาม code vba formatting

#3

Post by natthaporn »

ต้องขอโทษอาจาร์ย์ด้วยคะที่่ยกตัวอย่างผิดไป ดิฉันขออธิบายใหม่ดังนี้คะ

ถ้ามีคำในช่วงข้อมูลตั้งแต่ B2 เป็นต้นไปเหมือนกับคำที่ A1 ให้เปลี่ยนคำนั้นเป็นสีแดง
เช่น ที่ B2 และ C2 มีคำว่า "Excel" ซึ่งตรงกับ A1 ดังนั้นให้คำว่า "Excel" ที่ B2 และ C2 เปลี่ยนเป็นสีแดง

ถ้ามีคำในช่วงข้อมูลตั้งแต่ B2 เป็นต้นไปเหมือนกับคำที่ A2 ให้เปลี่ยนคำนั้นเป็นสีเขียว
เช่น ที่ D2 และ E2 มีคำว่า "VBA" ซึ่งตรงกับ A2 ดังนั้นให้คำว่า "VBA" ที่ D2 และ E2 เปลี่ยนเป็นสีเขียว

ดิฉันได้แนบ file มาใหม่มาด้วยคะ
ขอบคุณคะ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31159
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: รบกวนสอบถาม code vba formatting

#4

Post by snasui »

:D ตัวอย่างการปรับ Code ตามด้านล่างครับ

Code: Select all

Sub test()
    Dim rAll As Range, r As Range, i%, j%
    With Sheets(1)
        Set rAll = .Range("b2", .Range("b2").End(xlToRight))
    End With
    For Each r In rAll
        If InStr(r.Value, Range("a1").Value) <> 0 Then
            i = InStr(r.Value, Range("a1").Value)
            j = Len(Range("a1").Value)
            r.Characters(Start:=i, Length:=j).Font.Color = vbRed
        End If
        If InStr(r.Value, Range("a2").Value) <> 0 Then
            i = InStr(r.Value, Range("a2").Value)
            j = Len(Range("a2").Value)
            r.Characters(Start:=i, Length:=j).Font.Color = vbGreen
        End If
    Next r
End Sub
natthaporn
Member
Member
Posts: 187
Joined: Sun Jul 15, 2012 10:54 pm

Re: รบกวนสอบถาม code vba formatting

#5

Post by natthaporn »

ได้ผลลัพธ์ตามที่ต้องการแล้วคะ ขอขอบคุณอาจารย์มากคะ ทำให้ดิฉันได้ความรู้เพิ่มเติมอีกว่าจะต้องนำ code 2 ส่วนมาปรับอย่างไรถึงจะใช้ร่วมกันได้
ขอขอบคุณอีกครั้งคะ
natthaporn
Member
Member
Posts: 187
Joined: Sun Jul 15, 2012 10:54 pm

Re: รบกวนสอบถาม code vba formatting

#6

Post by natthaporn »

อาจารย์คะ ดิฉันขอรบกวนถามเป็นความรู้เพิ่มเติมได้ไหมคะว่า

Code: Select all

Dim rAll As Range, r As Range, i%, j%
ทำไมตรง i%, j% ตรงใส่ % ด้วยคะ สามารถตั้งเป็น i,J เฉย ๆ ได้ไหมคะ
User avatar
snasui
Site Admin
Site Admin
Posts: 31159
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: รบกวนสอบถาม code vba formatting

#7

Post by snasui »

:D Code นั้นมีค่าเท่ากับ Dim rAll As Range, r As Range, i As Integer, j As Interger

ถ้าไม่ใส่จะเป็นการประกาศตัวแปร i, j เป็น Variant ซึ่งจะกิน Memory มากกว่าเป็น Integer ครับ
natthaporn
Member
Member
Posts: 187
Joined: Sun Jul 15, 2012 10:54 pm

Re: รบกวนสอบถาม code vba formatting

#8

Post by natthaporn »

ขอบคุณมาก ๆ คะ สำหรับความรู้เพิ่มเติม ช่วงหลังมานี้ดิฉันมีเวลาเข้ามาศึกษาข้อมูลใน web น้อยมาก หรือแทบจะไม่ได้เข้ามาเลย เพราะบริษัทได้นำ program ใหม่เข้ามา ทำให้ต้องใช้เวลาทั้งหมดไปกับการศึกษา program ใหม่
อย่างไรก็ตามต่อไปนี้ช่วงวันหยุด ดิฉันจะพยายามเข้ามาศึกษาหาความรู้ให้บ่อยมากขึ้น เพราะ web นี้มีแต่ความรู้ที่ดี ๆ ทั้งนั้น

ขอบคุณคะ
Post Reply