• ベストアンサー

エクセルのオートシェイプ内のテキスト置換

エクセル2007を使用しています。 オートシェイプ内のテキストを一括して置換したいと考えております。 便利なソフトやVBAを試してみたのですが、元の文字色が変わってしまいます。 オートシェイプ内の文字色は2,3色使用しており、その色を保持したまま、一部の文字だけ置換したいのです。そういったことは可能でしょうか。ちなみに置換したい文字色は1色です。 よろしくお願いいたします。

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

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

#1です。 すみません。未完のものをあげてしまっていました。 以下、差し替えてください。 失礼しました。 ' ' /// 実行マクロ /// ReplaceTextFrameCharCaption の使用例 Sub Re8980222w() ' アクテイブシートを指定   ReplaceTextFrameCharCaption ActiveSheet, "検索する文字列", "置換する文字列" End Sub Sub Re8980222w2() ' シート名を指定   ReplaceTextFrameCharCaption Sheets("Sheet1"), "検索する文字列", "置換する文字列" End Sub ' ' /// TextFrameのChractersについてCaptionのみ置換し、Formatは変更しない ' ' 引数 Sh : シート(Worksheet、Chart)オブジェクトを指定します。 ' ' 引数 sWhat : 検索する文字列を指定します。 ' ' 引数 sReplace : 置換する文字列を指定します。 ' ' 引数 ShapeType : 省略可能です。MsoShapeType(シェイプ)のType(種類)を指定します。 ' '           この引数を省略した場合の既定値はmsoAutoShape(オートシェイプ)です。 ' ' /// Sub ReplaceTextFrameCharCaption(ByVal Sh As Object, _           ByVal sWhat As String, ByVal sReplace As String, _           Optional ByVal ShapeType As MsoShapeType = msoAutoShape) Dim shp As Shape Dim sBuf As String Dim nLen As Long Dim nPos As Long   Select Case TypeName(Sh)   Case "Worksheet", "Chart"   Case Else:  MsgBox "引数の型が違います。":  Exit Sub   End Select   nLen = Len(sWhat)   For Each shp In Sh.Shapes     If shp.Type = ShapeType Then       With shp.TextFrame         Do           nPos = InStr(nPos + 1, .Characters.Text, sWhat)           If nPos Then             .Characters(nPos, nLen).Caption = sReplace           End If         Loop While nPos       End With     End If   Next End Sub ' ' /// ところで、 > オートシェイプ内のテキストを一括して置換したいと考えております。 この一文の「一括して置換したい」の意味が、一意ではないような気がしてきました。 最近見かけた類似の質問 http://okwave.jp/qa/q8978930.html の例に倣って、 「複数のオートシェイプに対してテキスト置換を一括で実現したい」 という解釈でお応えしています。 或いは、 「ひとつのオートシェイプに対してテキストに含まる検索文字列を  すべて他の置換文字列に置換したい」 という意味だった場合は、詳しく、使い方を補足説明して貰えれば、 改めて対応します。 例えば、「選択中のオートシェイプに対して」とか、 「"Rectangle 1"という名前のオートシェイプに対して」とか、 使い方の条件によって対応が大きく異なりますので、、、。 取り急ぎ、以上です。

その他の回答 (2)

  • m_and_dmp
  • ベストアンサー率54% (974/1797)
回答No.2

VBA でやるなら、初めに変更前の文字のプロパティ(フォント、色、サイズ)を取得しておいて、文字を変更した後、文字のプロパティを取得したプロパティに設定すると良いと思います。 簡単な方法(VBAではありません)は、セルに記入された文字をオートシェイブに表示する方法です。どこか邪魔にならない場所にオートシェイブに表示する文字を記述しておいて、それをオートシェイブにリンクさせて表示します。セルに記述した文字を変更するとオートシェイブの文字が変更されますが、文字のフォント、色、サイズ、は変わりません。

dawnandromeda
質問者

お礼

回答いただき、ありがとうございます! でもどのように行うのかイメージできず、申し訳ありません。 今回はVBAで行おうと思います。

回答No.1

こんにちは。 こんな感じで如何でしょう? 不足があれば、補足欄に書いてみて下さい。 ' ' /// 実行マクロ /// ReplaceTextFrameCharCaption の使用例 Sub Re8980222w()   ReplaceTextFrameCharCaption Sheets("Sheet1"), "検索する文字列", "置換する文字列" End Sub ' ' /// TextFrameのChractersについてCaptionのみ置換し、Formatは変更しない ' ' 引数 Sh : シート(Worksheet、Chart)オブジェクトを指定します。 ' ' 引数 sWhat : 検索する文字列を指定します。 ' ' 引数 sReplace : 置換する文字列を指定します。 ' ' 引数 ShapeType : 省略可能です。MsoShapeType(シェイプ)のType(種類)を指定します。 ' '           この引数を省略した場合の初期値はmsoAutoShape(オートシェイプ)です。 ' ' /// Sub ReplaceTextFrameCharCaption(ByVal Sh As Object, _           ByVal sWhat As String, ByVal sReplace As String, _           Optional ByVal ShapeType As MsoShapeType = msoAutoShape) Dim shp As Shape Dim sBuf As String Dim nLen As Long Dim nPos As Long   Select Case TypeName(Sh)   Case "Worksheet", "Chart"   Case Else:  MsgBox "引数の型が違います":  Exit Sub   End Select   nLen = Len(sWhat)   For Each shp In Sh.Shapes     If shp.Type = ShapeType Then       sBuf = shp.TextFrame2.TextRange.Characters.Text       nPos = 0       Do         nPos = InStr(nPos + 1, sBuf, sWhat)         If nPos Then           shp.TextFrame.Characters(nPos, nLen).Caption = sReplace         End If       Loop While nPos     End If   Next End Sub

dawnandromeda
質問者

お礼

ありがとうございます!! 無事色が変わらず置換することができました。 いろんなサイトを見たのですがわからず、本当に助かりました。

関連するQ&A

  • オートシェイプ内のテキスト置換

    エクセルのオートシェイプ内のテキストを一括置換したいと考えております。 フリーソフトやVBAを使用し、置換したところ、色まで変わってしまいます。 色は元のまま文字だけを置換したいのですが、そのようなことは可能でしょうか。

  • excel VBA オートシェイプのテキスト段落

    おはようございます。 【オートシェイプ内のテキスト行間を指定するプロパティ】 オートシェイプ内のテキスト行間を指定するプロパティはありますでしょうか? excel 2007で オートシェイプにテキストをいれた場合、 右クリックすると「段落」という項目がでてきて、 オートシェイプ内のテキストの行間を指定できたのですが、 オートシェイプ内のテキストの行間をVBAで指定することはできるのでしょか? (マクロを登録してもなにも記述されていないので、困っています。) 最終的にはアクティブブックの全シートのオートシェイプの行間を変更する VBAにしたいと思っています。 参考URL等あれば教えていただけませんでしょうか? よろしくお願いいたします。

  • エクセル オートシェイプ

    こんばんは! エクセルのオートシェイプについての質問です。 会社の稟議書を作成していて、上のほうに、オートシェイプで部長や課長のハンコを押す欄を作ろうと思ったのですが、うまくいきません・・・ エクセルで罫線を引いて、セル内に文字を入れるのは簡単なのですが、オートシェイプで作成する場合は、どのようにしたらよいでしょうか・・・ 四角形を挿入して、縦に二本オートシェイプで直線を引いて、横にも一本オートシェイプで直線を引いて、それをグループ化したまではよかったのですが、テキストをどのように入れたらよいのか分かりません・・・ 右クリックしても、テキスト追加できず、悩んでいます・・・ どなたかお分かりでしたら、お願いいたします。

  • EXCELのオートシェイプについて

    基本的なことをお聞きします・・・ WORDなどは、文字の上にオートシェイプを重ねたとき テキストとの関係の設定(背面・前面)ができますよね。 EXCELの場合は、セルに入ってるデータの上に オートシェイプを置いた時、テキストがオートシェイプの前に来るという概念はありませんよね? それはやはり「セル」というものが特殊なものだからですか? オートシェイプの塗りつぶしをなしにするか、 透明度を高くして、セルの文字が見えるようにする しか方法はないんですよね? 「なぜ??」と理由を聞かれたら どう説明してあげるのが適当ですか?

  • エクセルでの オートシェイプの中のテキストの回転

    エクセルで オートシェイプの中にテキストを挿入し、回転すると文字はそのまま回転せずに残ります。  文字がオートシェイプの回転と 同調して回転するようにするには どうしたらよいのでしょうか??  オフィス2000 エクセル2000を使っています。

  • オートシェイプの文字列の置換

    エクセル2003を使用している者ですが、オートシェイプの文字列の置換ができなくて困っています。マクロ初心者ですが、量が多いためマクロで解決できればと思っています。 このようなマクロをご存知の方がいましたら、コードを教えていただけますでしょうか。 宜しくお願いします。

  • エクセル置換・検索

    エクセル(バージョン2000)で オブジェクト(オートシェイプ)内の テキスト文章(文字列)を 検索及び置換したいのですが、方法があれば ご教示いただけますでしょうか? すみません、宜しくお願いいたします。

  • EXCELのオートシェイプのテキスト編集のフォントの初期設定は、できますか?

     EXCELで使用する。通常の文字の初期設定は、ツール→オプション→全般 で出来ると思うのですが、オートシェイプで使用するテキスト文字のフォントの初期設定は、出来ないでしょうか?教えてください。お願いします。(初期設定で、明朝体にしても、オートシェイプで使用するフォントは、ゴシック体になってしまうのですが?)

  • Excelのオートシェイプについて

    Excel2003を使用しています。 Excelで作表するときに使用する線は、線の太さが細かく設定できる オートシェイプを使うことが多いのですが、表にある全ての オートシェイプを一発で削除する方法ってあるのでしょうか? (今は右クリック→切り取りで削除しています。) あと、オートシェイプ(直線)に文字が重なった場合は、文字の方を 上に表示させたいのですが… 罫線だと文字がある部分は線が表示されませんが、それと同じような 設定は可能でしょうか? 以上2点、よろしくお願いします。

  • Office2000でオートシェイプ内の文字列置換

    Office2000でオートシェイプ内の文字列を置換する事は可能でしょうか? できれば、複数のオートシェイプを選択矢印マークで選択するところまではできるのですが検索や置換のところがグレーで選択できません(T_T)

専門家に質問してみよう