Excel のセル内のテキストの一部を色付けする

Excel のセル内のテキストの一部を色付けする

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%)")どこにあるか、パーセンテージ デルタへのセル参照がどこにあるかを試しました。A1A2

困ったことに、カスタム書式設定は、[Green]0%;[Red](-0%)セル全体に適用すると(カスタム数値書式設定セクションを介して)正常に機能しますが、TEXT()関数を介して適用すると機能しなくなります。では、セル内の部分的な値にカスタム色を設定するにはどうすればよいでしょうか。

答え1

この問題を回避するために私が発見したアプローチは 2 つありましたが、どちらも実際には最適ではありませんでした。

最初のアプローチは、文字列を 2 つの別々の列に分割することでした。こうすることで、前述のカスタム書式設定の 1 つを使用して色を設定できます。この追加の列に対応するためにレポートの「外観と操作性」を妥協する必要があったため、これは理想的な解決策ではありません。

2 番目の方法は、VBA/マクロを使用する方法です。この特定のシナリオでは使用しないことにしましたが、この方法でも十分でした。動作するコード全体を印刷することはしませんが、基本的には次のようになります。

  1. 調整したいセルを検索します(スルーActiveCellまたはループのいずれか)
  2. 関数を使用してInstr、文字列内で色を変更したい場所を見つけます。
  3. テキストの長さが可変の場合は、Instr再度使用して、文字列内で色を停止する場所を見つけます。
  4. 関数を使用してCharacters(start, length)、先ほど見つけた値を渡して、変更する文字を正確に強調表示します。
  5. 色を変えるFont.Color = RGB(r,g,b)

答え2

マクロを使用した例はここにあります:

Excel のセル内のテキストの一部を色付けするマクロ

Excel マクロ - セルの一部を色分けする For ループ

for ループを含む Excel マクロを使用して、天気データの行をループし、セルのテキストの一部に「Hot」という単語が含まれている場合は赤、「Cool」という単語が含まれている場合は青で色付けします。

Instr では、Hot と Cool は大文字と小文字が区別されることに注意してください。

説明書

  1. Excelの開発タブをクリックします
  2. Visual Basicアイコンをクリックし、以下のマクロテキストをコードウィンドウにコピーします。
  3. ExcelアイコンをクリックするとExcelビューに戻ります
  4. マクロアイコンをクリックし、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

答え3

このマクロは、括弧内のテキストに「-」文字が含まれている場合は、括弧を含むテキストの選択範囲を赤色にし、含まれていない場合は緑色にします。括弧の外側のテキストはすべて変更されません。

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

関連情報