Tô màu một phần văn bản trong ô trong Excel


13

Trong Excel, có một số cách để tự động tô màu một ô đầy đủ dựa trên giá trị của nó, nhưng có cách nào để tự động tô màu một phần của ô dựa trên giá trị của nó không?

Ví dụ: giả sử tôi đang xây dựng một báo cáo trông giống như sau:

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

Trong kịch bản này, tôi chỉ muốn tô màu các giá trị phần trăm (-25%) và (+ 10%), không phải giá trị đô la là 75 đô la và 55 đô la cũng có trong ô. Thêm vào vấn đề là màu nên là động (màu xanh lá cây cho dương, màu đỏ cho giá trị âm) và các ô này là tham chiếu (vì vậy tô màu thủ công thì khỏi bảng).

Tôi đã thử sử dụng TEXT()chức năng tích hợp, nhưng nó cũng không hoạt động. Cụ thể tôi đã cố gắng =TEXT(A1,"$##")&" "&TEXT(A2,"[Green]0%;[Red](-0%)")A1là tham chiếu ô với số tiền và A2là tài liệu tham khảo tế bào đến đồng bằng tỷ lệ phần trăm.

Điều khó chịu là định dạng tùy chỉnh [Green]0%;[Red](-0%)chỉ hoạt động tốt khi được áp dụng cho toàn bộ ô (thông qua phần định dạng số tùy chỉnh), nhưng khi được áp dụng qua TEXT()chức năng, nó sẽ ngừng hoạt động. Vì vậy, làm thế nào tôi có thể tùy chỉnh màu một giá trị một phần trong một ô?


1
Các hàm Excel không thể thực hiện được, định dạng có điều kiện chỉ áp dụng cho toàn bộ các ô và có vẻ như bạn đã sử dụng hết các khả năng với các định dạng số tùy chỉnh. Nó có thể được thực hiện trong VBA, mặc dù. (Đối với một ví dụ đơn giản, hãy xem đây tôi tò mò, mặc dù How are you nhận được hai con số trong một tế bào, xây dựng chúng lên như dây đàn, có lẽ..?
chuff

@chuff Có, tôi đã xây dựng chúng thành các chuỗi để tôi có thể khắc phục các giới hạn lưới của Excel (kích thước cột chiều rộng cố định cho mỗi hàng).
Moses

Câu trả lời:


8

Có hai cách tiếp cận tôi đã khám phá để giải quyết vấn đề này, và không phải nơi nào thực sự tối ưu.

Cách tiếp cận đầu tiên là chia các chuỗi thành hai cột riêng biệt, theo cách đó tôi có thể sử dụng một trong các định dạng tùy chỉnh được mô tả trước đó để đặt màu của nó. Đây không phải là một giải pháp lý tưởng vì tôi đã phải thỏa hiệp về "giao diện" của báo cáo để phù hợp với cột bổ sung đó.

Cách tiếp cận thứ hai là thông qua việc sử dụng VBA / macro, mặc dù tôi đã chọn để tránh trong kịch bản cụ thể này, sẽ tùy thuộc vào nhiệm vụ. Mặc dù tôi sẽ không in ra toàn bộ mã làm việc, nhưng điều cốt yếu là giải quyết vấn đề này:

  1. Tìm ô bạn muốn điều chỉnh (thông qua ActiveCellhoặc một vòng lặp)
  2. Sử dụng Instrchức năng để tìm vị trí trong chuỗi nơi bạn muốn sửa đổi màu sắc
  3. Nếu độ dài văn bản có thể thay đổi, hãy sử dụng Instrlại để tìm vị trí trong chuỗi nơi bạn muốn dừng màu
  4. Sử dụng Characters(start, length)chức năng để làm nổi bật các ký tự chính xác mà bạn muốn sửa đổi, chuyển vào các giá trị được tìm thấy trước đó.
  5. Thay đổi màu sắc với Font.Color = RGB(r,g,b)

Không có đủ đại diện để downvote, nhưng đây sẽ là lần đầu tiên của tôi: "Trong khi tôi sẽ không in ra toàn bộ mã làm việc" - tại sao không? Khá hữu ích cho một diễn đàn như thế này.
hmedia1

5

Một ví dụ sử dụng macro có thể được tìm thấy ở đây:

Macro để tô màu một phần của văn bản trong các ô trong Excel

Macro Macros - Để lặp lại một phần màu của các ô

Sử dụng macro Excel có chứa vòng lặp for để lặp qua các hàng dữ liệu thời tiết và phần màu của văn bản ô màu đỏ nếu nó chứa từ nóng và xanh nếu nó chứa từ mát:

Hướng dẫn

  1. Nhấp vào tab Nhà phát triển trong Excel
  2. Nhấp vào biểu tượng Visual Basic và sao chép văn bản macro bên dưới vào 1 cửa sổ mã
  3. Nhấp vào biểu tượng Excel để chuyển về chế độ xem Excel
  4. Nhấp vào biểu tượng Macro, chọn macro có tên TextPartColourMacro và nhấp chạy

Macro đã hoàn thành:

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
Mục đích của Super User là xây dựng một kiến ​​thức chứ không phải là một tập hợp các liên kết đến câu trả lời ở nơi khác. Liên kết bên ngoài có thể bị phá vỡ, trong trường hợp câu trả lời của bạn sẽ không có giá trị. Vui lòng bao gồm các thông tin cần thiết trong câu trả lời của bạn và sử dụng liên kết để ghi nhận và đọc thêm.
fixer1234

Đây là một giải pháp tốt, tôi sẽ triển khai nó.
htm11h

0

Một cách tiếp cận có thể thực hiện được mặc dù đó không phải là một giải pháp trong MS EXCEL nếu bạn chia lưới bảng excel (chiều rộng ô) bằng một không gian ký tự thì bạn có thể sử dụng màu đó theo lựa chọn của mình:

Ví dụ


0

Macro này sẽ tô màu bất kỳ phạm vi văn bản đã chọn nào chứa dấu ngoặc thành màu đỏ nếu văn bản trong ngoặc chứa ký tự "-", nếu không, nó sẽ tô màu xanh lá cây. Tất cả văn bản bên ngoài dấu ngoặc vẫn không thay đổi.

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

Chèn dòng trên văn bản muốn được tô sáng, làm cho dòng rộng như bạn cần để ánh sáng cao, thay đổi màu văn bản thành màu vàng (hoặc bất kỳ màu nào bạn chọn) và giảm độ mờ của dòng theo ý thích của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.