• ベストアンサー
  • 困ってます

マクロで書式ごと置換

マクロで書式ごと置換 いつもお世話になります。 今回は標記の件についてお伺いしたく質問を投稿させていただきました。 現在、[D5:CN93]に配置している文字列データを記号に置換する作業をおこなっています。置換マクロに関してはreplaceを使用し、今のところ問題なく動いています。作業工程としては、上記の範囲にあるデータの一覧を作成し、どのデータをどのような記号に置き換えたいかの一覧を附します。 例)  [A1](置換したい記号)   [B1](置換したい文字列)      ○          イチゴ      ◆          バナナ    [D5:CN93]置換対象の文字列例    イチゴ,バナナ マクロでは置換したい文字列、置換したい記号の値をreplace関数に与えて、上記の範囲にあるセル1つ1つに置換をかけていく、というものです。 今までは、文字列の書式は問題ではなかったのですが(置換後に一括変換)、上のほうから「イチゴを赤い○、バナナを黄色い◆のように、色をつけられないか」といわれました。 置換ウィザードを試してみたのですが、セル全体の文字列の色が変わってしまいうまくいきませんでした。 またreplaceで色情報も置換する方法もわかりません(無いのかもしれませんが)・・・ そこで「色情報を持たせたまま、文字列の一部を置換」する方法を教えてください。 これまでのデータを使用したいので、データは以下のように並んでいます。  [A1](置換したい記号)   [B1](置換したい文字列)     赤色の○         イチゴ     黄色の◆         バナナ    [D5:CN93]置換対象の文字列   イチゴ,バナナ

共感・応援の気持ちを伝えよう!

  • 回答数3
  • 閲覧数413
  • ありがとう数3

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

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

No.1・2です! 何度もごめんなさい。 No.2のコードで不必要なものまでコピー&ペーストしていました。 (こちらで遊んでいてそのままコードを削除せずに貼り付けてしまいました。) 変数の宣言で M は削除 そして、Mが絡んでいる行がありますので、その行も削除です。 M = Cells(Rows.Count, 3).End(xlUp).Row の行が必要ありません。 どうも何度も失礼しました。m(__)m

共感・感謝の気持ちを伝えよう!

その他の回答 (2)

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

No.1です! たびたびごめんなさい。 もう一度質問文を読み返してみますと >色情報を持たせたまま、文字列の一部を置換・・・ とありましたので前回の方法は的外れだと思います。 ↓の画像のようにA・B列に記号と置換対象文字列があるとして、 データ内にB列の文字列があった場合、そのA列の記号と色に置換したい!ということでしょうか? もしそうであればコードを↓のように訂正してみてください。 Sub test2() Dim i, j, k As Long For i = 5 To 93 For j = 4 To 92 For k = 1 To Cells(Rows.Count, 2).End(xlUp).Row If Cells(i, j) Like "*" & Cells(k, 2) & "*" Then Cells(i, j) = Replace(Cells(i, j), Cells(k, 2), _ WorksheetFunction.Index(Range("A:A"), _ WorksheetFunction.Match(Cells(k, 2), Range("B:B"), 0))) End If Next k Next j Next i Dim L, M As Long Dim str As String For i = 5 To 93 For j = 4 To 92 For L = 1 To Len(Cells(i, j)) For k = 1 To Cells(Rows.Count, 1).End(xlUp).Row M = Cells(Rows.Count, 3).End(xlUp).Row str = Mid(Cells(i, j), L, 1) If str = Cells(k, 1) Then Cells(i, j).Characters(Start:=L, Length:=1).Font.ColorIndex = _ Cells(k, 1).Font.ColorIndex End If Next k Next L Next j Next i End Sub 尚、「黄色」は画面で判りづらいので敢えて「青」の◆にしています。 今回も前回同様別シートでマクロを試してみてください。 参考になればよいのですが、 今回も外していたらごめんなさいね。m(__)m

共感・感謝の気持ちを伝えよう!

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

こんばんは! セル内の「イチゴ」を赤の「○」に、「バナナ」を黄色の「◆」にすれば良いわけですよね? そういうことだとして・・・ 一旦、文字列を記号に置換し、もう一度一文字ずつ舐めるように探して、○と◆の色を変えるようにしてみました。 尚、一旦マクロを実行すると元に戻せませんので 別シートにコピー&ペーストしてマクロを実行してみてください。 一例です。 Sub test() Dim i, j As Long For i = 5 To 93 For j = 4 To 92 If Cells(i, j) Like "*イチゴ*" Then Cells(i, j) = Replace(Cells(i, j), "イチゴ", "○") ElseIf Cells(i, j) Like "*バナナ*" Then Cells(i, j) = Replace(Cells(i, j), "バナナ", "◆") End If Next j Next i Dim k As Long Dim str As String For i = 5 To 93 For j = 4 To 92 For k = 1 To Len(Cells(i, j)) str = Mid(Cells(i, j), k, 1) If str = "○" Then Cells(i, j).Characters(Start:=k, Length:=1).Font.ColorIndex = 3 ElseIf str = "◆" Then Cells(i, j).Characters(Start:=k, Length:=1).Font.ColorIndex = 6 End If Next k Next j Next i End Sub 尚、前半部分の文字列の置換は大丈夫のようなので、後半部分の色変更だけ別のマクロをしてもOKだと思います。 参考になればよいのですが・・・m(__)m

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • WORDで書式などを利用して置換するマクロをつくりたいです

     WORD2000で書式などをキーにして置換するマクロをつくりたいです。  例)太字の文字列すべてを『♂』『♀』で囲む  これをVBAで表記するにはどう書いたらよいでしょうか?

  • ワードの置換機能で、書式を置換しましたら、一点わからないことがあります

    ワードの置換機能で、書式を置換しましたら、一点わからないことがあります。 文書全体の、「太字」を全て「斜体」に変えようとして、 置換を使って、検索する文字列の書式を「太字」、置換後の文字列の書式は「斜体」を 設定したところまでは良いのですが、 結果が、全て太字の文字が斜体に変わっているのです。 置換を使って、文字色を変えると、前の色が残ることなく変わるのですが、 太字の場合は、なぜ残ってしまうのでしょうか。 他のやり方でかえることもできるのはわかりますが、 置換機能を使って変えたいので、 その理由がわかる方、 どうか教えてください。

  • Word2003 置換 書式が設定されている文字列すべてを書式無し(標準スタイル)に置換するのは?

    練習で、書式の条件をつけた文字列に置換えた単語があったとします。 それらをまた書式をつけていない文字列に置き換えを使って戻すのは どうすればいいのでしょうか? (例)  太陽という文字列に対して、  赤い色と太字を条件にし置き換えたとする。  ↓  赤い色と太字を解除して本来の文字列にもどしたい。  この条件は、どうればいいいのか???  置換をつかって、できそうなんですが、  どうすればいいのでしょう。。  教えてくださいませ。。。。。。。。。。。。

  • Excelの置換がうまく出来ません。

     Excelである文字列を検索しようとすると、ちゃんと検索できるのですが、それを別の文字列に「置換」しようとすると「一致するデータが見つかりません」のメッセージが出て置換できません。「一致するデータ」がちゃんと存在するにもかかわらずにです。  ところが「すべて置換」にするとちゃんとすべてその文字列が指定の文字列に置換出来てしまいます。  即ち、ちゃんと置換すべき文字列が存在するにもかかわらず「置換」だけが実行されないのです。  これってどうゆうわけでしょうか?  私としては、「すべて置換」ではなく、一つ一つ確認しながら文字列の置換を行いたいのですが・・・私のやり方が悪いのでしょうか?  尚、ここで言う「文字列」とは狭い意味のそれではなく、数値・記号を含む全ての文字と言う意味です。

  • Exce置換lマクロについて教えてください。

    Exce置換lマクロについて教えてください。 置換画面を表示して、任意の文字を入力しすべて置換したいのですが可能でしょうか? (1)置換画面表示 (2)検索する文字列(初期値:aaa_111) (3)置換後の文字列(bbb_222) (4)すべて置換 教えてください。

  • Excelの置換で書式が変わる現象の回避策

    下記のようなマクロで複数の置換をしています。 Cells.Replace What:="★", Replacement:="☆", MatchCase:=True Cells.Replace What:="◆", Replacement:="◇", MatchCase:=True Cells.Replace What:="■", Replacement:="□", MatchCase:=True ・ ・ ・ セル内で改行して文字サイズや色を変えている箇所では置換後1行目の書式に変わってしまいます。 文字だけを置換をしたいのですがこれを回避する方法はあるのでしょうか教えてください。

  • ヒットする初回のみ置換する方法

    あいうえおかきくけこあいうえおあいうえお という文字列があった時、 初回の「あいうえお」のみ空に置換して かきくけこあいうえおあいうえお としたいのですが、str_replace()だと全部置換されてしまいますし、 preg_replace()やmb_ereg_replace()ではうまく置換されません。 対象とする文字列は、実際はHTMLタグやマルチバイトが混じっています。 置換するべき文字列は、全く同様のものが対象文字列内にも必ず含まれています。 preg_replace()やmb_ereg_replace()でも可能なのかもしれませんが、 どうやればいいのか分かりませんでした。 どなたかご教示下さい。

    • ベストアンサー
    • PHP
  • Excel 検索・置換マクロ

    検索する文字列は、AH4のセルにかいている数値とし 置換後の文字列を“無し”にしたいです。 これを実行するマクロを教えてください。 何卒よろしくお願いしますm--m Excel2003

  • マクロでセルの中の一部の書式を選び出したり出来ますでしょうか?

    マクロでセルの中の一部の書式を選び出したり出来ますでしょうか? エクセルにウェブの文字列を貼り付けたのですけど 文字列の中の書式で太字や赤字のあるセルだけをマクロで選んだり出来るのでしょうか? たとえばエクセルに貼り付けた結果が下のようになった場合(セルA1~A5) 1番・東京23区 2番・大阪府大阪市 3番・愛知県名古屋市 4番・福岡県福岡市 5番・北海道札幌市 1~5という数字は太字で書かれてある 「東京23区」という文字は赤字で書かれてある 「大阪市」という文字は太字で書かれてある(「大阪府」は普通の書式) その他の文字は普通の書式 これをマクロで何とかすると セルB1に「赤」 セルB2に「太」 セルB3~B5は何も無し って感じに、最初の数字の書式は無視して、文の一部にだけ書式が設定されているのを選び出して、表示できるように出来ますか?

  • テーブルを使った置換

    Access2002 Accessでクエリ実行時に特定の文字列を置換したいと思っています。 今までは置換する文字列が1つだけだったので、replace関数を使って直接置換する文字列を書いていたのですが、置換する文字列が今後増えてきそうなのでテーブルで管理したいと思っています。 置換用テーブル 元 ,置換後 000022,002078 000218,002403 000447,002703 クエリは単純な選択クエリなのですが、上記のようなテーブルを使ってクエリ実行時に文字を置換する方法がわかりません。 よろしくお願いします。