セル内の指定した文字の色を変更する方法

このQ&Aのポイント
  • セル内にある指定した文字全部の色を変更する方法について教えてください。
  • マクロ初心者で、インターネットから見つけた情報を組み合わせて使っています。
  • 特定の文字がセル内に複数回出現する場合、それらすべての文字の色を変更したいです。
回答を見る
  • ベストアンサー

セル内の指定した文字だけ全部色を変更する

初めて質問せて頂ます 指定した文字だけを変更することは可能なのですが セル内にある指定した文字全部の色が変わらなくて困っています マクロ初心者なもので大体インターネットから拾ってきたものをつなぎ合わせて使う程度の能力です どなたか教えていただけませんでしょうか? ちなみに「質問No.2769123」を参考にしましたがセルに含まれる文字は1つしか色が変わりません 例)セル内に指定した文字が10個あった場合全部色を変えたいと思っています 1つのセル内の文字「ABCD、ABCD、ABCD、ABCD、ABCD、ABBA、ABCD、ABBA、ABBA、ABCD…」 上記の場合ABBAの文字を全部赤に変えたいといった感じです どうかよろしくお願いいたします 経緯としては検索した文字がヒットしたらその文字の色を変更したいと思ったからです

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

リンクなど貼ってもらえたら有難いです。 とりあえず、そのまま引用させてもらうと 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 ですよね?? Instr というのは、中に文字列が含まれているかどうかを検索するものです。 この場合だと、含まれていたら、1回だけ実行するようなプログラムになっています。 そのセルに何度も含まれている場合は、ptrの部分も含め 繰り返す必要があります。 Sub Macro1() Dim rng As Range Dim ptr As Integer Dim StartRange As Long Const tStr As String = "ABBA" 'ここに色を変える文字列を書く For Each rng In ActiveSheet.Cells.SpecialCells(xlCellTypeConstants, 23) StartRange = 1 Do ptr = InStr(StartRange, rng.Value, tStr)'StartRangeの位置から、検索文字があるかどうか判別。 StartRange = ptr'検索後、StartRangeを更新する If ptr > 0 Then rng.Characters(Start:=StartRange, Length:=Len(tStr)).Font.ColorIndex = 3 StartRange = StartRange + Len(tStr) End If Loop Until ptr <= 0 Next rng End Sub んー、こんな感じでしょうか?(上手くいくかは不安ですが) StartRangeというのは、セル内の検索位置になります。

ranrinlove
質問者

お礼

satoron666様 大変ありがとうございました おかげで全部色が付きました 自分でもなんとかさっき作成できたのですが スマートじゃなく動作も遅かったので教えて頂いたものがとても良く感謝しております 以下自分が実際に使ったものです tStr = Trim(Replace(FindWord, "*", " ")) 'ここに色を変える文字列を書く tStr = Split(tStr, " ") For Each rng In Sheets("検索結果").Cells.SpecialCells(xlCellTypeConstants, 23) StartRange = 1 Do For i = LBound(tStr) To UBound(tStr) ptr = InStr(rng.Value, tStr(i)) ptr = InStr(StartRange, rng.Value, tStr(i)) 'StartRangeの位置から、検索文字があるかどうか判別。 StartRange = ptr '検索後、StartRangeを更新する If ptr > 0 Then rng.Characters(Start:=StartRange, Length:=Len(tStr(i))).Font.ColorIndex = 3 StartRange = StartRange + Len(tStr(i)) End If Next Loop Until ptr <= 0 Next rng 私が試行錯誤した微妙なものです>w< ' Dim N As Integer ' Dim M As Integer ' tStr = Trim(Replace(FindWord, "*", " ")) 'ここに色を変える文字列を書く ' tStr = Split(tStr, " ") ' For Each rng In Sheets("検索結果").Cells.SpecialCells(xlCellTypeConstants, 23) ' For i = LBound(tStr) To UBound(tStr) ' ptr = InStr(rng.Value, tStr(i)) ' If ptr > 0 Then ' For N = 1 To Len(rng.Text) ' For A = 0 To UBound(tStr) ' If Mid(rng.Text, N, Len(tStr(i))) = tStr(A) Then ' rng.Characters(Start:=N, Length:=Len(tStr(i))).Font.ColorIndex = 3 ' End If ' Next A ' Next N ' End If ' Next i ' Next rng

その他の回答 (1)

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.2

基本的なものは以下になると思います Public Sub Samp1()   Dim r As Range   Dim sS As String, sW As String   Dim iPos As Long   sS = "ABBA"   For Each r In Range("A1:A1000")     sW = r.Value     iPos = 1     Do While (iPos < Len(sW))       iPos = InStr(iPos, sW, sS)       If (iPos = 0) Then Exit Do       r.Characters(iPos, Len(sS)).Font.ColorIndex = 3       iPos = iPos + Len(sS)     Loop   Next End Sub InStr をヘルプで見てみると、1つ目の引数は何文字目から探すか・・・ なので、1文字目から探して・・・あったらその位置が返ってくるので その位置から、検索文字数分の色を指定・・・ 次を探す時には、その位置に検索文字数を加算した所から・・・ 上記、検索文字 "ABBA" で、見つかった位置が 2 なら、次は 2 + 4 = 6 文字目から > 経緯としては検索した文字がヒットしたらその文字の色を変更したい 事をやってみると、雰囲気以下に Public Sub Samp2()   Dim r As Range   Dim sAddr As String   Dim sS As String, sW As String   Dim iPos As Long   sS = "ABBA"   Set r = Cells.Find(sS, LookAt:=xlPart)   If (Not r Is Nothing) Then     sAddr = r.Address     Do       sW = r.Value       iPos = 1       Do While (iPos < Len(sW))         iPos = InStr(iPos, sW, sS)         If (iPos = 0) Then Exit Do         r.Characters(iPos, Len(sS)).Font.ColorIndex = 3         iPos = iPos + Len(sS)       Loop       Set r = Cells.FindNext(r)     Loop While (r.Address <> sAddr)   End If End Sub 今見ているシート全体を対象に、部分一致で検索し、なければ終わり・・・ あればセルのアドレスを覚えておいて、色付け処理 次のを求めて、覚えていたアドレスと同じなら処理を抜ける

ranrinlove
質問者

お礼

30246kiku 様 ありがとうございます 解決しましたが参考にさせて頂きます

関連するQ&A

  • エクセルでセル色の指定

    下のセルに数値が入っているか空白かで分けて上のセルも同じ色に指定するようにしたい。条件付き書式でできますが件数が多いため、まとめて処理したいと思っています。(個別でも構いませんが要は下のセル色を指定すると上のセルも連動して同じ色になるようにしたい。) #1 #2・・・・・・・・#10 赤 白       赤 というデータがあって、下のセルが空白なら赤、数値なら何もしない(白)という風にしたいのです。 関数を考えましたが、わからないのですがマクロにしないとだめでしょうか。どちらの方法でも出来ればいいのです。よろしくご教授下さい。

  • 条件付きでセルと文字の色を変えたいです。

    隣り合うセルの値を比較して、その条件によってセルと文字の色を変えたいと思ってます。   A B 1 5 3 2 4 8 1行目の場合は左のセルを赤、文字色を黒 2行目の場合は左のセルを青、文字色を黄 と変更させたいのですが、回答宜しくお願いします。

  • 関数を使って文字列の色変更

    関数の結果で文字列の色を変更する方法はないでしょうか。 たとえば、セルA1に"A"となる場合は赤色、"B"となる場合は青色としたいのですが、これは関数を使えるでしょうか。 (セル内の一部分だけを変えるのではなく、そのセル内全ての文字列の色変更です)

  • excelでのセルの塗りつぶし色を数値で指定

    excelでセルの塗りつぶし設定をおこなう場合に その色を数値で指定することはできないでしょうか? 例えば セルA1は”10”の赤、A2は11”の赤 A3は”12”の赤 といった感じで少しずつ濃い又わ薄い色指定ができればありがたいです。 使用しているofficeはoffice365です。

  • Excelのセル内の文字列の文字色変更について

    申し訳ございません、どなたか教えていただけないでしょうか。 エクセルのセル内の文字列を、ある特定の文字列の時に文字色を変えたい。 例えば、赤、青、黄、桃、緑という文字列をセルの中に入れた時、 その文字の色がそれぞれ、 「赤」の時:赤色の文字色 「青」の時:青色の文字色 「黄」の時:黄色の文字色 「桃」の時:桃色の文字色 「緑」の時:緑色の文字色 というように自動的に設定をしたいのです。 条件付き書式では、3種類までならできますが、4種類以上だとダメですよね。 できればマクロではなく、セルの書式設定「ユーザー定義」で設定したいのですが、 公式はございますでしょうか。 数値によって色を変更する方法は、いろいろなサイトで確認しましたが、 文字列で色を変えるという方法がなかったもので質問をいたしました。 よろしくお願いいたします。

  • DataGridViewで特定の文字の色を変更するには

    DataGridViewで、特定のセルのうち、特定の文字の色を変更する方法はありますでしょうか? 例えば、 2行目2列目のセルに「あいう」と入っていた場合、 「う」のみを赤色にしたいのです。 過去の情報を色々とあさってみましたが、特定の文字のみを変更する方法は見つけられず、 もし可能でしたら、教えていただけると助かります。

  • Excel2003でセル内の文字色を変更しても表示が変わらない

    DELL Dimension 8300でExcel2003を使っていますが、あるセルに書かれた文字色を通常の黒色から赤色に変更しても表示は変化しません。しかし、そのセルをアクティブにすると変更されています。又、それを印刷すれば、変更後の赤色で印刷されます。表示が変更した色になる様にするには、どのようにすれば良いのか教えて下さい。

  • excelで、セルの値によって文字の色を変える方法

    execlで、セルの値によって文字の色を変える方法はありますか? 例えば、1~5なら赤色、6以上なら青色ということです。 マクロを使わない方法でありますか? また、文字色以外にもセルの色や字体・字の大きさとかもありますか? よろしくお願いします。

  • Excelのセル内で、指定の文字だけ色をつけるには?

    Excelのセル内で、指定文字だけ色をつけたいのですが、そのようなことは可能なのでしょうか? また、その文字をロックして削除できないようにしたいのですが…ご教授願います。 指定の文字は数種類あります。 【例】↓セル内とすると…(黒記号を指定文字とする) ○○●○○○◆○○▲○○○○●●○○○○○○ 上記のような文字列になっています。指定文字の並びは不規則です。 OS→Windows2000 アプリケーション→office2000professionalのExcel です。どなたかご返答お待ちしております。

  • エクセルの文字の色について

    エクセルで質問があります。 ・A1のセルに(1)と打って文字の色を赤にします。 ・B1のセルに(2)と打ちます。 (質問) ・A1の文字が赤色の場合、B1のセルに文字を打った時、自動でA1のセルと同じ色になるようにしたいのですが、 やり方ありますか?教えて頂けませんか。

専門家に質問してみよう