การระบายสีข้อความบางส่วนภายในเซลล์ใน Excel


13

ใน Excel มีหลายวิธีในการทำสีเซลล์แบบเต็มโดยยึดตามมูลค่าของมัน แต่มีวิธีใดในการทำสีแบบไดนามิกเพียงส่วนเดียวของเซลล์ตามค่าของมัน

ตัวอย่างเช่นสมมติว่าฉันกำลังสร้างรายงานที่มีลักษณะดังนี้:

 _________________________
|       |    Dec    | Nov |
|_______|___________|_____|
|Gross R| $75 (-25%)| $100|
|_______|___________|_____|
|Net Inc| $55 (+10%)| $50 |
|_______|___________|_____|

ในสถานการณ์นี้ฉันเพียงต้องการระบายสีค่าเปอร์เซ็นต์ (-25%) และ (+ 10%) ไม่ใช่ค่าเงินดอลลาร์ $ 75 และ $ 55 ซึ่งอยู่ในเซลล์ด้วย การเพิ่มปัญหาคือการระบายสีควรเป็นแบบไดนามิก (สีเขียวสำหรับบวก, สีแดงสำหรับค่าลบ) และเซลล์เหล่านี้เป็นข้อมูลอ้างอิง (ดังนั้นการกำหนดสีด้วยตนเองจึงอยู่นอกตาราง)

ฉันลองใช้TEXT()ฟังก์ชั่นบิวท์อิน แต่มันก็ไม่ได้ผลเหมือนกัน โดยเฉพาะฉันพยายาม=TEXT(A1,"$##")&" "&TEXT(A2,"[Green]0%;[Red](-0%)")ที่A1จะอ้างอิงเซลล์จำนวนเงินดอลลาร์และA2การอ้างอิงเซลล์ไปยังเดลต้าเปอร์เซ็นต์

สิ่งที่น่าผิดหวังก็คือการจัดรูปแบบที่กำหนดเอง[Green]0%;[Red](-0%)ทำงานได้ดีเมื่อนำไปใช้กับเซลล์ทั้งหมด (ผ่านส่วนการจัดรูปแบบตัวเลขแบบกำหนดเอง) แต่เมื่อนำไปใช้ผ่านTEXT()ฟังก์ชั่นมันจะหยุดทำงาน ดังนั้นฉันจะกำหนดสีเองให้เป็นค่าบางส่วนภายในเซลล์ได้อย่างไร


1
ฟังก์ชั่นของ Excel ไม่สามารถทำได้การจัดรูปแบบตามเงื่อนไขใช้ได้กับเซลล์ทั้งหมดเท่านั้นและดูเหมือนว่าคุณหมดความเป็นไปได้ด้วยรูปแบบตัวเลขแบบกำหนดเอง แม้ว่ามันอาจจะเป็นไปได้ใน VBA (สำหรับตัวอย่างง่ายๆลองดูที่นี่ฉันอยากรู้อยากเห็นคุณจะได้รับตัวเลขสองตัวในเซลล์เดียวได้อย่างไรสร้างพวกมันเป็นสายอักขระได้หรือไม่
chuff

@chuff ใช่ฉันสร้างมันขึ้นมาเป็นสายอักขระเพื่อที่ฉันจะได้เข้าใจถึงข้อ จำกัด ด้านกริดของ Excel (ขนาดคอลัมน์ความกว้างคงที่สำหรับแต่ละแถว)
โมเสส

คำตอบ:


8

มีสองวิธีที่ฉันค้นพบเพื่อแก้ไขปัญหานี้และไม่เหมาะสมที่สุดจริงๆ

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

วิธีที่สองคือการใช้ VBA / macros ซึ่งถึงแม้ว่าฉันเลือกที่จะหลีกเลี่ยงในสถานการณ์เฉพาะนี้จะขึ้นอยู่กับภารกิจ แม้ว่าฉันจะไม่พิมพ์รหัสการทำงานทั้งหมด แต่ก็จำเป็นอย่างยิ่งที่จะต้องดำเนินการดังนี้

  1. ค้นหาเซลล์ที่คุณต้องการปรับ (ผ่านActiveCellหรือวนซ้ำ)
  2. ใช้Instrฟังก์ชั่นเพื่อค้นหาตำแหน่งในสตริงที่คุณต้องการแก้ไขสี
  3. หากความยาวข้อความเป็นตัวแปรใช้Instrอีกครั้งเพื่อค้นหาตำแหน่งในสตริงที่คุณต้องการหยุดสี
  4. ใช้Characters(start, length)ฟังก์ชั่นเพื่อเน้นอักขระที่คุณต้องการแก้ไขโดยส่งผ่านค่าที่พบก่อนหน้านี้
  5. เปลี่ยนสีด้วย Font.Color = RGB(r,g,b)

1
ไม่มีตัวแทนเพียงพอที่จะลงคะแนน แต่นี่เป็นครั้งแรกของฉัน: "ในขณะที่ฉันจะไม่พิมพ์รหัสการทำงานทั้งหมด" - ทำไมล่ะ ค่อนข้างเป็นประโยชน์สำหรับฟอรัมเช่นนี้
hmedia1

5

ตัวอย่างการใช้มาโครสามารถพบได้ที่นี่:

แมโครเป็นสีส่วนหนึ่งของข้อความในเซลล์ใน Excel

Excel Macros - สำหรับวนรอบไปยังส่วนสีของเซลล์

ใช้แมโคร Excel ที่มีการวนลูปเพื่อวนรอบข้อมูลสภาพอากาศและส่วนสีของข้อความเซลล์สีแดงหากมีคำว่าร้อนและสีน้ำเงินหากมีคำว่า cool:

คำแนะนำ

  1. คลิกที่แท็บนักพัฒนาซอฟต์แวร์ใน Excel
  2. คลิกที่ไอคอน Visual Basic และคัดลอกข้อความแมโครด้านล่างลงในหน้าต่างรหัส 1
  3. คลิกที่ไอคอน Excel เพื่อเปลี่ยนกลับไปเป็นมุมมอง Excel
  4. คลิกที่ไอคอน Macros เลือกแมโครที่ชื่อว่า TextPartColourMacro แล้วคลิกเรียกใช้

แมโครที่เสร็จสมบูรณ์:

Sub TextPartColourMacro()

' Declarations and Initialisation
Dim Row As Integer, Col As Integer
Dim CurrentCellText As String
Col = 1

' Loop Through Rows 2 to 5
For Row = 2 To 5

    ' Get Text in Current Cell
    CurrentCellText = ActiveSheet.Cells(Row, Col).Value

    ' Get the Position of the Text Hot and Cool
    HotStartPosition = InStr(1, CurrentCellText, "Hot")
    CoolStartPosition = InStr(1, CurrentCellText, "Cool")

    ' Colour the Word Hot Red
    If HotStartPosition > 0 Then
        ActiveSheet.Cells(Row, Col).Characters(HotStartPosition, 3).Font.Color = RGB(255, 0, 0)
    End If

    ' Colour the Word Cool Blue
    If CoolStartPosition > 0 Then
        ActiveSheet.Cells(Row, Col).Characters(CoolStartPosition, 4).Font.Color = RGB(0, 0, 255)
    End If

Next Row
End Sub

2
วัตถุประสงค์ของผู้ใช้ขั้นสูงคือการสร้างฐานความรู้แทนที่จะรวบรวมลิงก์เพื่อตอบคำถามจากที่อื่น ลิงก์ภายนอกอาจเสียหายได้ซึ่งในกรณีนี้คำตอบของคุณจะไม่มีค่า โปรดระบุข้อมูลที่จำเป็นในคำตอบของคุณและใช้ลิงก์สำหรับการระบุแหล่งที่มาและการอ่านเพิ่มเติม
fixer1234

นี่เป็นทางออกที่ดีฉันจะปรับใช้
htm11h

0

มาโครนี้จะใช้สีช่วงของข้อความที่เลือกซึ่งมีเครื่องหมายวงเล็บเป็นสีแดงหากข้อความในวงเล็บประกอบด้วยอักขระ "-" มิฉะนั้นจะเป็นสีเขียว ข้อความทั้งหมดที่อยู่นอกวงเล็บยังคงไม่เปลี่ยนแปลง

Dim rngCell As Range
Dim CharCount As Integer
Dim BracketBegin As Integer
Dim BracketEnd As Integer
Dim strToColour As String

For Each rngCell In Selection
    CharCount = Len(rngCell)
    BracketBegin = InStr(1, rngCell, "(")
    BracketEnd = InStr(1, rngCell, ")")
    With rngCell.Characters(BracketBegin, CharCount - BracketEnd)
        ' Pull out string to check for +/-
        strToColour = rngCell.Characters(BracketBegin, CharCount - BracketEnd).Text
        ' If negative, colour red, otherwise green
        If InStr(strToColour, "-") Then
            .Font.Color = vbRed
        Else
            .Font.Color = vbGreen
        End If
  End With
Next rngCell
End Sub

[Example][1]


  [1]: https://i.stack.imgur.com/4lyN4.png

-1

แทรกบรรทัดบนข้อความที่ต้องการให้ไฮไลต์สร้างบรรทัดให้กว้างที่สุดเท่าที่คุณต้องการแสงสูงเปลี่ยนสีข้อความเป็นสีเหลือง (หรือสีใดก็ได้ที่คุณเลือก) และลดความทึบของเส้นตามที่คุณต้องการ


-1

วิธีการหนึ่งที่ทำได้แม้ว่าจะไม่ใช่วิธีแก้ปัญหาใน MS EXCEL ถ้าคุณแบ่งตาราง excel sheet (ความกว้างของเซลล์) เท่ากับพื้นที่อักขระจากนั้นคุณสามารถใช้สีที่คุณเลือกได้:

แผ่นตัวอย่าง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.