• 締切済み

IF関数で表示される特定の文字の色を変えたい

IF関数で表示される特定の文字の色を変えたい Excelです。 例えば、 =if(a1=0,"abc012","def345") という関数を作って、このabcの色だけ赤に変えたいです。 マクロで Sub Macro1() Dim rng As Range Dim ptr As Integer Const tStr As String = "abc"  For Each rng In ActiveSheet.Cells.SpecialCells(xlCellTypeConstants, 23)   ptr = InStr(rng.Value, tStr)   If ptr > 0 Then    rng.Characters(Start:=ptr, Length:=Len(tStr)).Font.ColorIndex = 3   End If  Next rng End Sub と組んだのですが、普通にabcと打つと赤に変わるのですが、IF関数で表示されるabcは赤に変わりません。 どうすればいいか教えてください。

みんなの回答

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

数式内の任意文字のフォント変更はできないと思いますので、関数箇所をVBAに変更しては如何でしょうか。 >IF関数で表示されるabcは赤に変わりません  ⇒ご例示のSpecialCells(xlCellTypeConstants, 23)は数式セルを選択しません。   仮に数式セル選択(xlCellTypeFormulas)に変更してもフォント変更がセル全体に及び期待通りになりません。 因みに現コードで実施するならば、変更対象のセルを選択コピー→形式を選択して貼り付け→値を選択→OKとして全て定数にする必要がありますが、駄目ですよね。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

まず、ActiveSheet.Cells.SpecialCells(xlCellTypeConstants, 23)の段階で定数をせんたくしたわけで、数式セルは除外されています。 それにたとえ除外してなくとも、数式で表示される文字列の一部だけ色などの書式を変えたりすることはできないと思います。 マクロがおできになるようなので、そのワークシート関数の働きをマクロにさせたらいかがでしょう? もしA1セルに入力があった場合に作動させるならシートのチェンジイベントでできますが。 Private Sub Worksheet_Change(ByVal Target As Range)   If Target.Address(0, 0) <> "A1" Then Exit Sub   Range("B1").Value = IIf(Target.Value = 0, "abc012", "def345")   '色を変えるマクロ(略) End Sub

関連するQ&A

  • エクセルで特定の文字のフォントサイズ・色を変更したい。

    質問番号:1822805を参考にエクセルで特定の文字に色付けする作業をしています。 このときに、色を変えると同時にフォントサイズとフォントスタイルを 太字にしたいのですがエラーでうまくいきません。 どなたかご教授いただければと思います。 エラー内容は『オブジェクトはこのプロパティまたはメソッドをサポートしていません』です。 ちなみに下記のような構文を書いています。 『日本』と言う文字列に色をつける場合となっています。 Sub test() Dim rng As Range, r As Range, i As Long, colInd As Integer With ActiveSheet Set rng = .Range("a1:z100") '範囲の設定 txt = "日本" '文字の設定 colInd = 3 '色の設定 For Each r In rng If InStr(r, txt) > 0 Then _ r.Characters(InStr(r, txt), Len(txt)) _ .Font.ColorIndex = colInd .Font.Size = 12 .Font.Fontstyle = "太字" Next End With End Sub

  • VBA? 色のついた文字のセルを数えたい

    色のついた文字の記載があるセルをカウントしたく 色々調べました。結局VBAで設定する方法にしたのですが 設定しテストをするとどうしてもカウント数が合いません。 全くの初心者の為何が間違っているのか全く分かりません。 どなたか教えて下さい。 VBAも全く知らない者でしたので 調べて以下のものをそのまま貼り付けました。 Function CCount(Rng As Range, idx) Dim R As Range Dim Cnt As Long Application.Volatile For Each R In Rng   If R.Font.ColorIndex = idx Then Cnt = Cnt + 1 Next R CCount = Cnt End Function Function GetIndx(Rng As Range) If Rng.Count > 1 Then   GetIndx = vbNullString   Exit Function End If GetIndx = Rng.Font.ColorIndex End Function 何が間違っているのでしょうか?

  • ifステートメント 大文字も小文字も区別なく

    Sub test() Dim moji As String moji = "a" If moji = "A" Then MsgBox "Aかaです" End If End Sub これだと、変数が小文字のaだからmsgboxが表示されません。 小文字も大文字も区別なく認識させるにはどうすればいいでしょうか? バイナリモードになってるようです。 Replace関数の場合は、vbTextCompareを付ければ Sub Sample() Dim moji As String moji = "a" Debug.Print Replace(moji, "A", "b", , , vbTextCompare) End Sub このように大文字小文字区別なく置換できますが このような事をifステートメントでやる方法を教えてください。

  • VBAで特定の文字以降の文字列の色の変更をしたい

    エクセルで特定の複数の特定の文字の色を変更したいです。 複数の文字列の色の変更の仕方については調べたのですが 変更したい文字列が複数でそれぞれ色指定が異なります。 内、ひとつは 『セル内の"→"以降の文字列』 を指定して 文字色を赤に変更したいのです。 変更したい文字列 『★とYY』を青に変えるのは下記で できました。 (1) 『セル内の"→"以降の文字列』 を指定して文字色を赤に変更 (2) 範囲指定を開いているシート全体にする という部分を加えたいです。 よろしくお願いいたします。 Sub Sumple() Dim myReg As Object Dim Match As Variant Dim r As Range Dim st As String Set myReg = CreateObject("VBScript.Regexp") myReg.Pattern = "★|YY" myReg.Global = True For Each r In Range("A1:C10")    ' ←範囲はActiveSheetにしたい st = r.Value If myReg.Test(st) Then For Each Match In myReg.Execute(st) r.Characters(Start:=Match.Firstindex + 1, Length:=Match.Length).Font.ColorIndex = -3394816 ' フォントカラーを青 Next End If Next Set myReg = Nothing End Sub

  • エクセル VBA セルの色をSheet1とSheet2の両方を変えたいのですが・・・

    最近困っているところが表題の通りなのですが Sheet1のB2を右クリックするとB2のセルの色を変えて Sheet2のB2のセルも色を変えたいというものです。 現状で Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) Dim Rng As Range, myRng As Range Dim RngA As Range, myRngA As Range Set Rng = Range("B3:W3,b7:w8,b12:w12,d13:w13,d17:w18,d22:w23") Set myRng = Intersect(Target, Rng) If myRng.Interior.ColorIndex = xlColorIndexNone Then myRng.Interior.ColorIndex = 37 Else If myRng.Interior.ColorIndex = 37 Then myRng.Interior.ColorIndex = 45 Else myRng.Interior.ColorIndex = xlColorIndexNone End If End If Cancel = True End Sub とここまではあるのですが、これをどう改造すればSheet2の同じセルの色もかわるのでしょうか? 宜しくお願いいたします

  • Replace関数について

    Sub macro1() Dim str As String str = "abc" str = Replace(str, "c", "a") MsgBox str End Sub このマクロを実行した時に、問題なく動くのですが なぜReplaceは関数なのに、 WorksheetFunction.がいらないのでしょうか? しかも Sub macro2() Dim str As String str = "abc" str = WorksheetFunction.Replace(str, "c", "a") MsgBox str End Sub にすると、エラーになります。 macro1のReplaceは、関数ではないのでしょうか? メソッドやステートメントですか?

  • マクロ 入力する文字に色を付けたい

    Sub CountUp(ByVal mCol1 As String, mCol2 As String) Dim LastRow1 As Long Dim LastRow2 As Long Dim mRow As Long With Sheets("プレーヤー") LastRow1 = .Cells(Rows.Count, mCol1).End(xlUp).Row LastRow2 = .Cells(Rows.Count, mCol2).End(xlUp).Row If LastRow1 > LastRow2 Then mRow = LastRow1 Else mRow = LastRow2 End If If LastRow1 = 1 Then LastRow1 = 2 End If .Cells(mRow + 1, mCol1).Value = .Cells(LastRow1, mCol1) + 1 End With End Sub このコードに文字の色の指定をしたいです Selection.Font.ColorIndex = 3を入れたら赤色文字で入力できるかなと思ったのですがうまくいきませんでした(エラーにはならないのですが、色が付かなかったです)

  • ☆文字列を抜き取る★

    テキストファイルに GetPoint = ErrMsg("おはよう",target) の行があるとします。 ダブルクオートでくくられた文字列だけを出力させたい場合 下記コードでどこが間違っているでしょうか?? 今のままだと全てのコードが出力になるんですよ。。。 アドバイスをいただけると幸いです。 Sub Main() Dim iFileNumber As Integer iFileNumber = FileSystem.FreeFile() Open "C:temp\sample.txt" For Input As #iFileNumber Dim stResult As String Dim stSerch As String Dim point As Long Do While (Not FileSystem.EOF(iFileNumber)) Dim stBuffer As String Line Input #iFileNumber, stBuffer stResult = stResult & stBuffer & vbNewLine If Instr(stResult,Chr(34)) > 0 Then If Instr(stResult,Chr(34)) > 0 Then v = stResult End If End If Loop Close #iFileNumber End Sub

  • ユーザー定義関数の再計算

    ユーザー定義関数を作りました。 ところが、この関数が自動再計算をしてくれません。 どうしたら自動再計算するようになるのでしょうか? よろしくお願いします。 ちなにこの関数は、自分のシートのB2とsheet1~sheet4のB9を比較して、正しければB9の4つ右のセルの値を合計して返すものです。 =SheetLook($B$2,"sheet1,sheet2,sheet3,sheet4",B9,4) コードです。 Function SheetLook(参照元 As Variant, 比較対象シート As String, 比較対象セル As Range, 参照セル位置 As Integer) As Variant   Dim i As Integer   Dim rng As Range   Dim sss As Variant   Dim kei As Variant   Dim cnt As Integer   sss = Split(比較対象シート, ",")   kei = 0   cnt = 0   For i = 0 To UBound(sss)     Set rng = Sheets(sss(i)).Range(比較対象セル.Address)     If 参照元 = rng Then       kei = kei + rng.Offset(0, 参照セル位置)       cnt = cnt + 1     End If   Next   If cnt <> 0 Then     SheetLook = kei   Else     SheetLook = ""   End If End Function

  • 色のついたセルと文字を両方数えられるVBA

    VBAの初心者です。 エクセルで文字の色でカウントする為に以下のVBAをこちらで教えていただきました。 順調に快適にエクセルを使えていたたのですが今回同じエクセル内で 文字ではなくセルに色付けしたものもカウントしなければならなくなりました。 以下のVBAがあるからかよく言われている4.0マクロ関数ではうまくいきません。 以下のVBAに何かを足せば一方では文字色をカウントし 一方ではセル色をカウントすると言う事は可能でしょうか? どなたか力を貸してください Function CCount(Rng As Range, idx) Dim R As Range Dim Cnt As Long Application.Volatile For Each R In Rng     If R.Font.ColorIndex = idx Then Cnt = Cnt + 1 Next R CCount = Cnt End Function

専門家に質問してみよう