EXCEL VBA文字色を変える方法

このQ&Aのポイント
  • EXCEL VBAを使用してセルの文字色を変更する方法について質問があります。
  • 現在、赤い文字色を持つセルの文字を黒に変えるVBAコードを作成しましたが、エクセルファイルを開くとエラーが発生します。
  • エラーの原因や他の方法について教えていただけますか?
回答を見る
  • ベストアンサー

EXCEL VBA 文字色を変える

よろしくお願いします。 【条件】 セルの文字列を一文字ずつ読み込み、 文字色が赤だったら黒にするというVBAを作成したいです。 例) セルA(1、1)の「あいうえお」 の”い”が青、”う”が赤だった場合、”う”を黒にする。 【状況】 以下のようなVBAを作成しました。 実行するとVBAは正常終了するのですが、VBAで上記変換をかけたEXCELファイルを開くと エラーが発生します。 デバッグモードで一行ずつ実行すると下記※2部分で文字化け?しているようです。 VBA) Do Until i = c  If Range("xx").Characters(i ,c-1).Font.color = RGB(255,0,0) then    Range("xx").Characters(i, c-1).Font.color = RGB(0,0,0)  ・・・※2    i = i +1  End if Loop 【エラー】 『"ファイル名"には読み取れない内容が含まれています。このブックの内容を回復しますか? ブックの発信元が信頼できる場合は「はい」をクリックして下さい。』 『"ファイル名”の修復 読み取れなかった内容を修復または削除することにより、ファイルを開くことが出来ました。 修復されたレコード./xl/worksheets/sheet1.xmlパーツ内のビュー』 上記エラーが表示される+エクセルの内容の大部分が消えます。 【質問】 上記VBAは本物を持ち出せないのでイメージです。 (もしかしたら細かい間違いがあるかもしれませんが実物は構文エラーはありません。) 質問したいのはロジックではなく以下になるのでイメージで汲み取っていただけるとありがたく。。 (1)Fontの書き換えを行った際、上記【エラー】が発生するのはどのような理由があるか  わかりますでしょうか。 (2)エラーの理由の詳細はわからないが「こんなやりかたではどうか」という  【条件】を満たす他のロジックは何かないでしょうか。 他にもオートメーションエラーが発生したり正直お手上げ状態でわらをもすがる思いです。 思いつきでもよいので何かありましたら回答のほどよろしくお願いいたします。 

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! 質問内にある(2)に当てはまりますが・・・ エラーの原因が何であるかは判りませんが、↓のようなコードではどうでしょうか? (対象セルはA1としています) Sub test() Dim k As Long For k = 1 To Len(Cells(1, 1)) If Cells(1, 1).Characters(Start:=k, Length:=1).Font.Color = RGB(255, 0, 0) Then Cells(1, 1).Characters(Start:=k, Length:=1).Font.Color = RGB(0, 0, 0) End If Next k End Sub お役に立たなかったらごめんなさいね。m(_ _)m

uchida-3333
質問者

お礼

やはりエラーにはなってしまいます。。 回答ありがとうございました!

uchida-3333
質問者

補足

回答ありがとうございます。 RangeのプロパティでなくCellを使用してみる・・ ということですね。 試してみます!結果はお礼で報告させていただきます。

関連するQ&A

  • EXCEL VBA 文中の書式ごと複写するには

    EXCEL VBAのプログラミングについて教えてください。 セルA1とセルB1が結合されており、セルには「あいうえお」と入力されています。 入力された「あいうえお」の内、「いうえ」は赤文字+太字を設定したと仮定します。 その結合されたセルの文章と文字色+太字を、結合されていないA3というセルに複写する場合、 下記の様なコードを考えてみましたが、長文になると処理が遅いので知恵を貸してください。 Range("A3").Value = Range("A1").Text For i = 1 To Len(Range("A1").Text)   Range("A3").Characters(i, 1).Font.Color = Range("A1").Characters(i, 1).Font.Color   Range("A3").Characters(i, 1).Font.Bold = Range("A1").Characters(i, 1).Font.Bold Next i よろしくお願いします。

  • excel vba

    VBAに不慣れなので教えてください。 今下記のプログラム(A1セルで青色以外の文字を消去する)はA1セルのみを対象にしているのですが、 (1)セルをA1からA3までにする。 (2)処理対象をA1のある列を対象とするようにしたい。 各々どう手直しすればいいか。 プログラムtest Public Sub test() Dim r As Range Dim i, wk As String Set r = Range("A1") wk = "" For i = 1 To Len(r.Value) Debug.Print r.Characters(i, 1).Font.ColorIndex If r.Characters(i, 1).Font.Color = vbBlue Then wk = wk + r.Characters(i, 1).Text End If Next r.Value = wk r.Characters.Font.Color = vbBlue End Sub

  • エクセルVBAでテキストボックスに文字

    Excel2016です。 ワークシート上に配置した、図形の「テキストボックス」に文字を入れるVBAについての質問です。 下記のTEST01では期待通り文字が入りますが、これはテキストボックスをSelectしなければなりません。 TEST02ならSelectせずにOKかと思ったら実行時エラーとなりました。 どのように修正したらよろしいのでしょうか? Sub TEST01()   Sheets(“Sheet1”).Shapes.Range(Array("TextBox 3")).Select   Selection.ShapeRange.TextFrame2.TextRange.Characters.Text = "TEST/TEST/2020"   Selection.ShapeRange.TextFrame2.TextRange.Font.Name = "Meiryo UI"   Selection.ShapeRange.TextFrame2.TextRange.Font.Bold = msoTrue End Sub Sub TEST02()   With Sheets(“Sheet1”).Shapes.Range(Array("TextBox 3"))     .ShapeRange.TextFrame2.TextRange.Characters.Text = "TEST/TEST/2020"     .ShapeRange.TextFrame2.TextRange.Font.Name = "Meiryo UI"     .ShapeRange.TextFrame2.TextRange.Font.Bold = msoTrue   End With End Sub

  • エクセル同一セル内の指定文字数のみアンダーラインをひく

    例えばエクセル同一セル内で頭10文字のみアンダーラインをひいて、残りは引かないというようなものをASPより処理したいのですが、うまくいきません。。。 xlsSheetWrk.Range("A3").Characters(Start:=1, Length:=8).Font.Underline = xlUnderlineStyleSingle 上記のように記述しているのですが、エラーになります。 どうすればよいでしょうか?? よろしくお願いします。

  • VBA For Eachでセル内の文字列を一個ずつ取り出すには

    エクセル2000です。 たとえばA1セル内の文字列を一個ずつ取り出す場合、 Sub test01() For i = 1 To Len(Range("A1").Value) Cells(i, "B").Value = Range("A1").Characters(i, 1).Text Next End Sub このように最初から最後の文字まで何番目で指定することはわかるのですが、これをFor Each で回すにはどうしたらよいでしょうか? (⌒o⌒)? お教えください。 Sub test02() For Each ch In Range("A1").Characters i = i + 1 Cells(i, "B").Value = ch Next End Sub ではエラーになります。

  • エクセルVBAで文字配置と文字制御について

    エクセル97のVBAで、下記の様にセル"A1"と"B1"を結合し、文字配置を 均等割り付けにしたセルの文字配置に"前後にスペースを入れる"を くわえたいのですが?又、文字制御に"折り返して全体を表示する"も 行いたいのですが?教えてください。 Range("A1:A2").Merge Range("A1:A2").HorizontalAlignment = xlHAlignDistributed Range("A1:A2").VerticalAlignment = xlVAlignCenter Cells(1, 1).Value = "テスト123456789" Cells(1, 1).Font.Name = "MS 明朝" Cells(1, 1).Font.Size = 10

  • エクセル2002のVBAで太文字を検索したいのですが、

    エクセル2002のVBAで太文字を検索したいのですが、 <状況> B列にチェックしたい文字が入力されています <やりたいこと> B列に入力されている文字の中から、太文字のみを抜き出して、 太字の見つかった行のG列に太文字のみを抜き出して複写したい <自作マクロの現状> セル全体の太文字検索は下記のマクロ「太字検索チェック1」で完成しましたが、 セルに記載してある文字の中で「一部は普通文字、のこり一部は太文字」と混在 しているセルの中身から太文字部分のみを別のセルに抜き出したいのですが、 そのマクロを「太字検索チェック2」のように書きました。 しかし「太字検索チェック2」の「 If dat.Font.Bold = True Then」の部分で 「型が違う・・・」のエラーで先に進みません。 どなたか、セルの中身の太文字のみを抜き出すマクロを教えてください よろしくお願いします   Sub 太字検索チェック1() i = 3 Worksheets("テスト").Activate For Each myRng In Range("B:B") セル = "b" & i If Range(セル).Font.Bold = True Then Cells(i, 7) = Cells(i, 2) ’太字のCells(i, 2)を Cells(i, 7) にコピー End If i = i + 1 If i = 1703 Then ’1703番地で終了 Exit For End If Next End Sub Sub 太字検索チェック2() i = 3 Worksheets("テスト").Activate For Each myRng In Range("B:B") 内容 = Cells(i, 2) 文字数 = Len(内容) For p = 1 To 文字数 dat = Mid(内容, p, 1)       X=8+P If dat.Font.Bold = True Then  ’1文字づつ太字を検索 Cells(i, X) = dat        ’太字なら→Cells(i, X) にコピー End If Next i = i + 1 If i = 1703 Then Exit For End If Next End Sub

  • Excelセル内文字列のフォント属性

    Excel 2016 VBAでセル内文字列の1文字ずつの属性を取り出していきたいのですが、文字数が多いと(1000文字とか)下記コードで数分の時間が掛かってしまいます。高速化の手段はありませんか? For i=1 to nChar Set ChrFont = objExcelCell.Characters(i, 1).Font ' この行の実行が遅い ' ちょっとした処理がここに来る Next i

  • excel2010条件付き書式後にVBAにて処理

    VBAビギナーのmaruです Excel2010のワークシート上の範囲(Range(”E12:K120“))内の 各セルに条件付き書式(複数あり)にてフォント色を赤く(RGB 255,0,0) 変更したセル内のデータ(数字)のみ削除(””)するVBAを行いたいのですが 以下のコードでは、「セルの書式」で設定したフォント色で削除されてしまい 条件付き書式で変更された赤文字に反映されません ご教授お願い致します Private Sub CommandButton4_Click() 'データ入力セル内の赤文字の削除 Dim rd As Range For Each rd In Range("E12:K120") For i = 1 To rd.FormatConditions.Count If rd.FormatConditions(i).Font.Color = RGB(255, 0, 0) Then rd.Value = "" End If Next Next End Sub 以上、宜しくお願い致します

  • VBAで、セルの一部の文字色を変更するプログラムで困っています

    ループ処理で、1つのセルに次のように1行ずつ追記するプログラムを作成しようとしています。 ■文字列1 ■文字列2 ■文字列3   : セル内で改行したいので、2行目以降はChr(10)でつないでいます。 「文字列」の箇所は黒字でいいのですが、「文字列」の内容によって、「■」の文字色を5色で色分けしたいです。 色は「文字列」の内容によって決まるので、あるときは、1行目の「■」は緑、2行目の「■」はピンク、…であっても、 またあるときは、1行目の「■」はピンク、2行目の「■」は青、…というように、可変です。 そこで、次のようなソースを書いたのですが、うまくいきません。  For i = 1 to 10   out_str = "■" & mojiretsu(i)   Cells(i, j).Select   outchar_start = Len(ActiveCell.Value)   If outchar_start = 0 Then     ActiveCell.Value = out_str   Else     ActiveCell.Value = ActiveCell.Value + Chr(10) + out_str   End If   ActiveCell.Characters(Start:=outchar_start + 1, Length:=1).Font.color _     = RGB(ReturnColor(mojiretsu(i), RR), _        ReturnColor(mojiretsu(i), GG), _        ReturnColor(mojiretsu(i), BB))   ActiveCell.Characters(Start:=outchar_start + 2).Font.color = RGB(0, 0, 0)  Next   ※ ReturnColor関数は、文字列の内容に応じて、RGBのコードを返す自作の関数です。 1回目のループ終了後は、「■」のみ色がつき、「文字列」は黒字という状態なのですが、 2回目以降のループが実行されると、セルのすべての文字に色が付いてしまいます。 (ActiveCell.Value = ActiveCell.Value + Chr(10) + out_str で上書きしているので、その時点で文字のプロパティが無効になってしまうのでしょうか??) ちなみに、上のソースでは、説明の便宜上、For文で10回ループさせていますが、 実際はテキストファイルを読込み、そのファイルの行数によって、1セルに書きだす行数が決まりますので、 何行出力させるかは、固定ではありません。 また、追記させるセルも1セルだけではなく、50セルくらいあるうちのどのセルに追記するかをその他の条件により判定しています。 セルの何文字目を何色にするかという情報を別に記憶しておいて、 最後に文字のプロパティを変更させることも考えたのですが、 上記のことを考慮すると、あまりスマートなやり方ではないのかなと思いました。 不慣れなためプロパティの考え方が間違っているだけかもしれませんが、 何かいい方法がありましたら、ご教示お願いします。

専門家に質問してみよう