Excelのセル内の部分的なテキストの色付け


13

Excelでは、値に基づいてセル全体を動的に色付けする方法がいくつかありますが、値に基づいてセルの一部のみを動的に色付けする方法はありますか?

たとえば、次のようなレポートを作成しているとします。

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

このシナリオでは、セル内にあるドル値$ 75と$ 55ではなく、パーセンテージ値(-25%)と(+ 10%)にのみ色を付けます。問題に加えて、色付けは動的でなければならず(正の値は緑、負の値は赤)、これらのセルは参照です(したがって、手動の色付けはテーブルから外れています)。

組み込みTEXT()関数を使用しようとしましたが、それも機能しませんでした。具体的には、ドル金額へのセル参照とパーセンテージデルタへのセル参照が=TEXT(A1,"$##")&" "&TEXT(A2,"[Green]0%;[Red](-0%)")どこにあるかを試しました。A1A2

イライラ[Green]0%;[Red](-0%)するのは、セル全体に(カスタム数値書式設定セクションを介して)適用された場合、カスタム書式設定はTEXT()正常に機能するが、関数を介して適用された場合、動作が停止することです。だから、セル内の部分的な値をカスタムカラーにするにはどうすればよいですか?


1
Excel関数ではできません。条件付き書式はセル全体にのみ適用され、カスタム数値形式で可能性を使い果たしたようです。ただし、VBAで実行可能かもしれません。(簡単な例では、見て、ここで私は好奇心が強い、けれどもどのようにあなたがおそらく、文字列としてそれらを構築し、一つのセルに2つの数値を取得している。。?
chuff

@chuffはい、Excelのグリッドの制限(各行の固定幅列サイズ)を回避できるように、文字列として作成していました。
モーセ

回答:


8

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

最初のアプローチは、文字列を2つの別々の列に分割することでした。その方法で、前述のカスタム書式設定のいずれかを使用して色を設定できました。この余分な列に対応するために、レポートの「ルックアンドフィール」を妥協しなければならなかったため、これは理想的なソリューションではありません。

2番目のアプローチは、VBA /マクロを使用することです。この特定のシナリオでは回避することを選択しましたが、それはタスク次第でした。作業コード全体を印刷するわけではありませんが、基本的には次のとおりです。

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

投票するのに十分な担当者がいませんが、これが私の最初でした「作業中のコード全体を印刷しませんが -なぜですか?このようなフォーラムに非常に役立ちます。
hmedia1

5

マクロを使用した例は次の場所にあります。

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

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

forループを含むExcelマクロを使用して、天気データの行をループし、セルテキストの一部に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

2
スーパーユーザーの目的は、他の場所の回答へのリンクのコレクションではなく、知識ベースを構築することです。外部リンクが破損する可能性があります。その場合、回答には価値がありません。回答に重要な情報を記載し、リンクを使用して帰属と詳細をお読みください。
fixer1234

これは良いソリューションです。私はそれを展開します。
htm11h

0

1つの実行可能なアプローチですが、Excelシートグリッド(セル幅)を文字スペースに分割する場合、MS EXCELのソリューションではありません。選択した色を使用できます。

サンプルシート


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

強調表示したいテキストの上に行を挿入し、強調するのに必要なだけ幅を広げ、テキストの色を黄色(または選択した任意の色)に変更し、好みに合わせて行の不透明度を下げます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.