Mewarnai sebagian teks di dalam sel di Excel

13

Di Excel ada beberapa cara untuk secara dinamis mewarnai sel penuh berdasarkan nilainya, tetapi apakah ada cara untuk secara dinamis mewarnai hanya sebagian sel berdasarkan nilainya?

Misalnya, katakan saya sedang membuat laporan yang terlihat seperti berikut ini:

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

Dalam skenario ini saya hanya ingin mewarnai nilai persentase (-25%) dan (+ 10%), bukan nilai dolar $ 75 dan $ 55 yang juga ada dalam sel. Menambah masalah adalah pewarnaan harus dinamis (hijau untuk positif, merah untuk nilai-nilai negatif), dan sel-sel ini adalah referensi (jadi pewarnaan manual adalah off the table).

Saya telah mencoba menggunakan TEXT()fungsi bawaan, tetapi itu tidak berhasil. Secara khusus saya mencoba di =TEXT(A1,"$##")&" "&TEXT(A2,"[Green]0%;[Red](-0%)")mana A1referensi sel ke jumlah dolar dan A2referensi sel ke persentase delta.

Yang membuat frustrasi adalah bahwa pemformatan khusus [Green]0%;[Red](-0%)berfungsi dengan baik ketika diterapkan ke seluruh sel (melalui bagian pemformatan nomor khusus), tetapi ketika diterapkan melalui TEXT()fungsi itu berhenti berfungsi. Jadi, bagaimana cara mengubah warna sebagian nilai dalam sel?

Musa
sumber
1
Fungsi Excel tidak bisa melakukannya, pemformatan bersyarat hanya berlaku untuk seluruh sel, dan sepertinya Anda sudah kehabisan kemungkinan dengan format angka khusus. Mungkin bisa dilakukan di VBA. (Sebagai contoh sederhana, lihat di sini . Tapi saya penasaran. Bagaimana Anda mendapatkan dua angka dalam satu sel, membangunnya sebagai string, mungkin?
chuff
@ Chuff Ya, saya membangunnya sebagai string sehingga saya bisa mengatasi keterbatasan grid Excel (ukuran kolom lebar tetap untuk setiap baris).
Moses

Jawaban:

8

Ada dua pendekatan yang saya temukan untuk mengatasi masalah ini, dan tidak ada yang benar-benar optimal.

Pendekatan pertama adalah memecah string menjadi dua kolom terpisah, dengan cara itu saya bisa menggunakan salah satu pemformatan kustom yang dijelaskan sebelumnya untuk mengatur warnanya. Ini bukan solusi yang ideal karena saya harus berkompromi pada "tampilan dan nuansa" laporan untuk mengakomodasi kolom tambahan itu.

Pendekatan kedua adalah melalui menggunakan VBA / makro, yang meskipun saya memilih untuk menghindari dalam skenario khusus ini, akan sesuai dengan tugas. Meskipun saya tidak akan mencetak seluruh kode kerja, penting untuk ini:

  1. Temukan sel yang ingin Anda sesuaikan (baik melalui ActiveCellatau loop)
  2. Gunakan Instrfungsi untuk menemukan lokasi dalam string di mana Anda ingin mengubah warna
  3. Jika panjang teks variabel, gunakan Instrlagi untuk menemukan lokasi dalam string di mana Anda ingin menghentikan warna
  4. Gunakan Characters(start, length)fungsi ini untuk menyorot karakter persis yang ingin Anda modifikasi, dengan memasukkan nilai-nilai yang ditemukan sebelumnya.
  5. Ubah warnanya dengan Font.Color = RGB(r,g,b)
Musa
sumber
Tidak memiliki cukup perwakilan untuk downvote, tetapi ini akan menjadi yang pertama saya: "Meskipun saya tidak akan mencetak seluruh kode kerja" - mengapa tidak? Cukup membantu untuk forum seperti ini.
hmedia1
5

Contoh menggunakan makro dapat ditemukan di sini:

Makro untuk mewarnai bagian teks dalam sel di Excel

Excel Macros - Untuk Loop ke Bagian Warna Sel

Gunakan Excel makro yang berisi loop untuk loop melalui baris data cuaca dan bagian warna dari teks sel merah jika mengandung kata panas dan biru jika berisi kata keren:

Instruksi

  1. Klik pada tab Pengembang di Excel
  2. Klik ikon Visual Basic dan salin teks makro di bawah ini ke dalam 1 kode jendela
  3. Klik ikon Excel untuk beralih kembali ke tampilan Excel
  4. Klik pada ikon Macros, pilih makro yang disebut TextPartColourMacro dan klik jalankan

Makro Lengkap:

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
maverick_99
sumber
2
Tujuan Pengguna Super adalah untuk membangun basis pengetahuan daripada kumpulan tautan ke jawaban di tempat lain. Tautan eksternal dapat terputus, dalam hal ini jawaban Anda tidak memiliki nilai. Harap sertakan informasi penting dalam jawaban Anda dan gunakan tautan untuk atribusi dan bacaan lebih lanjut.
fixer1234
Ini adalah solusi yang baik, saya akan menggunakannya.
htm11h
0

Satu pendekatan yang bisa dilakukan meskipun itu bukan solusi di MS EXCEL jika Anda membagi kisi lembar excel (lebar sel) sama dengan ruang karakter maka Anda dapat menggunakannya dengan warna pilihan Anda:

Lembar Contoh

Khurrum Iqbal
sumber
0

Makro ini akan mewarnai setiap rentang teks yang dipilih yang berisi tanda kurung menjadi merah jika teks di dalam tanda kurung berisi karakter "-", jika tidak maka akan berwarna hijau. Semua teks di luar tanda kurung tetap tidak berubah.

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
tmag
sumber
-1

Sisipkan baris di atas teks yang ingin disorot, buat garis selebar yang Anda butuhkan untuk cahaya tinggi, ubah warna teks menjadi kuning (atau warna apa pun yang Anda pilih) dan kurangi opacity garis sesuai keinginan Anda.

Menandai
sumber