• ベストアンサー

エクセルでセル内の一部分だけ書式ごと置換したい

エクセルの置換でオプションを使えば、書式も置換できますが、置換したい文字だけでなく、セル全体の書式が置換されてしまいます。 例えば「ロシアとアメリカ」とあるセルの、「アメリカ」を「中国」に置換して、「中国」の部分だけフォントをゴシックから明朝に変えたくても、セル全体が明朝になってしまいます。 今は、とりあえず「アメリカ」を「中国」に、オプションなしで一括変換して、ひとつずつ手動でフォントを変更していますが、大変な手間が掛かり、フォントの選択ミスなども起こります。 なにかいい方法はないでしょうか。 よろしくお願いします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんにちは。Wendy02です。 >あとから「文字列一括置換」をやると、セルごとフォントが元に戻っちゃうのは、エクセルの仕様でしかたないですね。^^; 例えば、「アメリカ」を「中国」に換える場合を考えると、まず、「アメリカ」を「中国」に変更してから、「中国」セルの中の書式を換えるという仕組みになるわけです。それ自体の仕組みは、容易に想像できるかとは思います。つまり、このようにすれば可能です。 Sub ReplaceFormatInCells() 'セルの書式の一部を変更するマクロ  Dim mWhat As String  Dim mFadd As String  Dim c As Range  Dim mFind As String   mFind = Application.InputBox("検索する単語を入れてください。", Type:=2)   If mFind = "False" Or mFind = "" Then Exit Sub   mWhat = Application.InputBox("置換する単語を入れてください。", Type:=2)   If mWhat = "False" Or mWhat = "" Then Exit Sub     ActiveSheet.UsedRange.Replace _    What:=mFind, Replacement:=mWhat, _    SearchOrder:=xlByRows, MatchCase:=True 'Sub ReplaceFromatInCells() ~ Set c = の7行分をこのように置き換えれば出来ます。

cs-megami
質問者

お礼

ありがとうございます。 こうすれば一度に文字列もフォントも変えられますね。 ひとつのセルに変えたい文字列が複数ある場合でも対応できるように、がんばってみたいと思います。

その他の回答 (4)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんばんは。 もし、もう解決済みでしたら、以下は無視してくださって結構です。 '標準モジュールです。 Private Const の後にところに、それぞれ、選んで書き入れてください。 '------------------------------------------------- 'Option Explicit 'フォントの種類 Private Const FNAME As String = "MS 明朝" 'MS ゴシック '文字のスタイル Private Const FSTYLE As String = "標準" '太字, イタリック '文字の大きさ Private Const FSIZE As Single = 11 '文字の色 Private Const FCOLT As Integer = xlAutomatic  '色は以下から数字を選ぶ '黒(1),白(2),赤(3),黄緑(4),青(5),黄色(6),ピンク(7), '水色 (8), 茶(9), 緑(10), 藍(11), 黄土色(12), 紫(13), 濃緑(14) '灰色 (15), xlAutomatic のみ「自動」(ColorIndexを調べると分かります) Sub ReplaceFormatInCells() 'セルの書式の一部を変更するマクロ  Dim mWhat As String  Dim mFadd As String  Dim c As Range    mWhat = Application.InputBox("検索する単語を入れてください。", Type:=2)    If mWhat = "False" Or mWhat = "" Then Exit Sub  Set c = ActiveSheet.UsedRange.Find( _   What:=mWhat, _   LookIn:=xlValues, _   LookAt:=xlPart, _   SearchDirection:=xlNext, _   MatchCase:=True, _   MatchByte:=True)       If Not c Is Nothing Then       mFadd = c.Address       ReplaceFont c, mWhat       Do       Set c = ActiveSheet.UsedRange.FindNext(c)       If c.Address = mFadd Then Exit Sub        ReplaceFont c, mWhat       Loop Until c Is Nothing      End If End Sub Private Sub ReplaceFont(rng As Range, strSearch As String) Dim i As Integer Dim Ln As Integer       Ln = Len(strSearch)       i = InStr(rng.Value, strSearch)       With rng.Characters(i, Ln).Font        .Name = FNAME        .FontStyle = FSTYLE        .Size = FSIZE        .ColorIndex = FCOLT       End With End Sub

cs-megami
質問者

お礼

ありがとうございます。 「文字列一括置換」→「フォント変更」なら、これでできそうです。 あとから「文字列一括置換」をやると、セルごとフォントが元に戻っちゃうのは、エクセルの仕様でしかたないですね。^^;

  • hirorin00
  • ベストアンサー率50% (446/884)
回答No.3

2番です。 下記のページの紹介にはフォントの変更はありませんが、ちょっと手を加えるとフォントの設定も可能になります。 .ColorIndex = tmpColorIndex 'カラー の他に .Name = tmpFont 'フォント を付け足します。 そしてtmpFontの値は tmpFont = "MS 明朝" tmpFont = "MS P明朝" tmpFont = "MS ゴシック" tmpFont = "MS Pゴシック" などとします。 私はフォント設定も追加してユーザーフォームを作っております。

cs-megami
質問者

お礼

私も自分用のユーザーフォームを作ってみようと思います。何度もありがとうございました。

  • hirorin00
  • ベストアンサー率50% (446/884)
回答No.2

はじめまして ココは参考になると思うのですが、いかがでしょうか? http://www.excel7.com/personal/personal1-4.htm

参考URL:
http://www.excel7.com/personal/personal1-4.htm
cs-megami
質問者

お礼

そうです。 私が悩んでいたのはまさにこれです。 ありがとうございました。

  • koko88okok
  • ベストアンサー率58% (3839/6543)
回答No.1

置換したいセル範囲だけ選択しておいて、置換すればよいのでは? 多分、飛び飛びに離れたセル範囲でもOKだと思いますよ。 フォントの書式は、置換直後、選択された状態のまま変更すればよかったと思います。

cs-megami
質問者

補足

質問が下手ですみません。 例で言えば「ロシアとアメリカ」というのがひとつのセルの中に入っているのです。A1とかに。 で、その中の「アメリカ」の部分だけを置換したいのですが、置換オプションでフォントを変えると、A1セル全体、つまり「ロシアとアメリカ」すべてのフォントが変わってしまうんです。 こうしたセルが膨大な数あるので、一つ一つ手作業では大変なので、一度にできないかと思っています。 >フォントの書式は、置換直後、選択された状態のまま変更すればよかったと思います。 やってみましたが、置換するとすぐ次の該当セルへ飛びます。 置換した部分だけフォントを変えたいのですが、また検索しなおして、一つ一つやるしかないのでしょうか。

関連するQ&A