プロが教えるわが家の防犯対策術!

Excel2000(Win-XP)使用者です。
エクセルで作った一覧表があります。重要な言葉を赤くしているのですが最近、この赤を茶色に変更することになりました。
修正箇所が少なければいいのですが文字数とセル数が膨大なため、普通にやったらまる一日かかりそうです。
何かいい方法はないものでしょうか。

*赤文字はセル単位ではなく文字単位です。
*赤文字は太文字になっているものがほとんどです。
*シートの数は少ないのでシート単位での処理でいいです。
*友人がExcel2003を持っているので一時的にそちらを使うこともできます。

お詳しい方、よろしくお願いいたします。

A 回答 (3件)

>*赤文字はセル単位ではなく文字単位です。


ということなら置換ウィザードで文字色を変える方法は使えませんね。
するとどうしてもマクロが必要になります。「マクロはちょっと…」というならあきらめて地道に手作業で行うしかありません。

以下のマクロをALT+F11でVBE画面を開き、左上のVBA Projectでシート名を右クリックし「挿入」→「標準モジュール」で表示される画面に貼り付けて下さい。マクロの実行はワークシート画面に戻ってALT+F8でマクロ一覧を開き、マクロ名を選択して「実行」ボタンです。

Sub Macro2()
Dim r As Range
Dim ptr As Integer
Const RedColor As Integer = 3 '赤色
Const BrownColor As Integer = 53 '茶色
 Application.ScreenUpdating = False
 ActiveSheet.Copy after:=ActiveSheet
 For Each r In Cells.SpecialCells(xlCellTypeConstants, 3)
  For ptr = 1 To Len(r.Value)
   If r.Characters(Start:=ptr, Length:=1).Font.ColorIndex = RedColor Then
    r.Characters(Start:=ptr, Length:=1).Font.ColorIndex = BrownColor
   End If
  Next ptr
 Next r
 Application.ScreenUpdating = True
End Sub

ただしこの処理は一文字ずつ色を調べなければならないので、処理時間はとんでもなくかかるかもしれませんがご承知おきください。途中で心配になったらESCキーを何回か押下してください。マクロの実行を止めることができます

なおこのマクロは元のシートをコピーしてから処理するので元のシートは残るようにしています。2003では動作確認していますが2000ではテストしていません。
    • good
    • 0
この回答へのお礼

親切丁寧なご回答ありがとうございます。
感動しました。
No.1さんとの違いはシートを上書きしない点でしょうか。
変換に何時間もかかりますが、ほっとけばいいので助かります。
Excelは内部がWebの<table>構造と同じになっていると聞いていたのでCSSに該当する部分をさっと置換しておしまいかと思っていましたが1文字単位で置換するんですね…

お礼日時:2008/10/17 00:57

はじめまして



>赤を茶色に変更
エクセルのみで行うには、mitarashiさんの回答(#1)にある1案か2案かと思います。

ちょっと回り道をして、WORD2000を使えば可能です。
手順としては、
1.EXCELからWORDにコピー&ペースト
2.WORDで色を変換(WORD2000には色を置換する機能があります)
3.WORDからEXCEにLコピー&ペースト
となります。
ただし、2回のコピー&ペーストが思い通りに行ってくれるかが最大の難関です。
    • good
    • 0
この回答へのお礼

ありがとうございます。
ExcelをWordに貼り付けて文字色変換…
速い!速すぎる!!
しかし再びExcelに貼り付けてもセルの縦横がめちゃめちゃ…
画像も貼り付けてあるため厄介なことに。

でも何か工夫すれば何とかなるのでは?
Wordはどしろうとなのでちょっと研究してみます。

お礼日時:2008/10/17 01:03

1案 ツール/オプション/色で標準の色の赤→茶色に変更する。


たぶん、お気に召さないと思うので、
2案 マクロでやる(アクティブシートに対する処理です)
Sub test()
Dim myCell As Range
Dim i As Long

For Each myCell In ActiveSheet.UsedRange
For i = 1 To myCell.Characters.Count
If myCell.Characters(Start:=i, Length:=1).Font.ColorIndex = 3 Then
myCell.Characters(Start:=i, Length:=1).Font.ColorIndex = 9
End If
Next i
Next myCell
End Sub
    • good
    • 0
この回答へのお礼

できました!ありがとうございます。
これはすごい。プログラムってすごいですねえ。
時間がかかるのが難点ですが・・

お礼日時:2008/10/17 00:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!