Excel VBAで複数の置換を行う方法

このQ&Aのポイント
  • Excel VBAを使用して、複数の文字列の置換を行いたい場合、以下の手順を実行します。
  • 1. 置換したい文字列をAセルに、置換後の文字列をBセルに入力します。
  • 2. マクロを実行すると、全シート上でAセルに入力された文字列を検索し、Bセルに入力してある文字列に置換します。
回答を見る
  • ベストアンサー

セルに入力した文字を別のシートで置換する方法

複数置換を行いたいと思い、以下のマクロを作成しました。 If Range("B18") <> "" Then Cells.Replace what:=Range("B18"), replacement:=Range("D18") end if B18のセルが空欄ではない場合、 そのセルに入った文字を検索し、別の文字に変換するというものです。 1つや2つほどであれば、ショートカットキーを使って 置換をしていけば良いと思うのですが、 10項目以上、置換しなくてはならず同時処理を行いたいと思っています。 ただし、その10項目については対象ファイルごとにバラバラで、 統一性がないため、VBAの中に組み込むよりかは、 置換したい文字を各セルに入れていき、置換できればと思い、 マクロの作成を行いました。 ただ、上のマクロでは同じファイルではないと処理ができません。 ActiveSheetを使って処理を行うとは思うのですが、どのように記述してよいか分かりません。 お力添えを頂ければと思います。 上記内容で分かり辛いかもしれませんので、以下に箇条書きします。 1)複数置換を行いたい。 2)Aセルに置換対象の文字を入れ、Bセルに置換したい文字を入れる。 3)実行すると全シート上でA1セルに入力された文字を検索し、B1セルに入力してある文字に置き換わる。 4)これらの処理は同一ファイルで行うのではなく、それぞれ別ファイルで管理をする。 ※対象ファイルと実行データが別々のもの 以上です。 説明が分かりにくく、申し訳ありません。 もしVBAで以上のような処理が可能な場合、ご教授頂けますと幸いです。 (使用しているバージョンは、2003です。)

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

アナタの説明はすべて正確だとして、あなたが書きそびれたことをてきとーに補って、次のように設計します。 1)マクロを登録したブックのシート1のA列に検索する文字、B列に置換後の文字をそれぞれ列記する 2)マクロを実行した時点のアクティブブックの「全シート」に対して置換を行う 3)置換は部分一致で行う sub macro1()  dim r as long  dim w as worksheet  on error resume next  for each w in activeworkbook.worksheets   with thisworkbook.worksheets("Sheet1")   for r = 1 to .range("A65536").end(xlup).row    if .cells(r, "A") <> "" then     w.cells.replace what:=.cells(r, "A"), replacement:=.cells(r, "B"), lookat:=xlpart    end if   next r   end with  next end sub

hayane_bc
質問者

お礼

分かり辛い説明だったにも関わらず、 読み解いてくださり、また希望通りの処理をご提示いただき、 本当にありがとうございます!! ActiveWorkbookを使用して処理を行うなど、 勉強になりました。 また、かなり早いレスポンスでお答え頂きましたので、 ベストアンサーとさせて頂きます。 本当にありがとうございました。

その他の回答 (1)

回答No.2

'ブック内のシートを検索&置換リストに従って検索&置換 'Sheet1(シート名固定:変更可)に検索(A列)&置換(B列)リスト '指定された内容の合理性は一切関知しない '上から順序よく処理される '検索語が空の場合、そのエントリは無効 '検索(LookAt)のオプション:全文一致「xlWhole」、部分一致「xlPart」 Sub MatchReplace() Const xSheet = "Sheet1" Dim sh As Worksheet Dim xList As Long Dim xRow As Long For Each sh In Worksheets If sh.Name = xSheet Then xList = sh.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row End If Next For Each sh In Worksheets If sh.Name <> xSheet Then With ThisWorkbook.Worksheets(xSheet) For xRow = 1 To xList If .Cells(xRow, "A") <> "" Then sh.Cells.Replace what:=.Cells(xRow, "A"), replacement:=.Cells(xRow, "B"), lookat:=xlPart End If Next xRow End With End If Next End Sub

hayane_bc
質問者

お礼

「全文一致」と「部分一致」に関して、 丁寧に説明していただき、ありがとうございます。 実際に処理を行ってみたのですが、 sh.Cells.Replace what:=.Cells(xRow, "A"), replacement:=.Cells(xRow, "B"), の部分に入らずに処理が終わってしまうようです・・・。 私の力不足で上手く動かすごとができず、 本当に申し訳ないです。 今回ご提示いただいたVBAをじっくりと研究し、 別の処理に生かしたいと思います。 この度は、ありがとうございました!

関連するQ&A

  • VBA(Excel)でファイル内の文字を置換したいのですが

    いつも拝見させていただいております。 初めて質問させていただきます。 現在VBAに興味を持ち始めて独学で学んでおり、 VBAでテキストファイルの文字を置換できないかと思っております。 事例としては以下のような例を考えています。 ・エクセルマクロ実行時に置換する/したい文字を入力 ・対象ファイルを指定 ・対象ファイル内(テキスト)にて文字を検索し、ヒットしたら置換 まだVBAを熟知していないので、出来るのかどうかもわかりませんが 可能であれば、教えて頂きたいと思います。宜しくお願いします

  • エクセル(マクロ)置換 結合されたセルに対しての置換

    こんばんは、 今置換用のマクロをこちらで検索して使ってましたが 使用するエクセルのフォーマットが 1セルに入力されてるのではなく、3つのセルを結合されている物に入力されているもので 下記のマクロだと、正しく置換されておりません。 置換変換用のシートと、置換したいシートがある状態で、 下記のマクロだとなぜ結合されたセル内の文字は置換えできないのでしょうか? 結合されてないセルですと、置換はちゃんとされております。 Sub 置換() With ThisWorkbook If ActiveSheet Is .Worksheets(1) Then Exit Sub For i = 1 To .Worksheets(1).Range("A65536").End(xlUp).Row ActiveSheet.Cells.Replace _ What:=.Worksheets(1).Range("A" & i).Value, _ Replacement:=.Worksheets(1).Range("B" & i).Value, _ LookAt:=xlPart, SearchOrder:=xlByColumns Next End With End Sub 明日の昼までに5000個のファイルを置換えするので これが出来ればなぁと思っております。 大変お手数ですが教えて頂けると助かります では、よろしくお願いいたします。

  • 別ファイルで用意されたデータを元に文字を一括置換するには?

    エクセル内の全シート、全セルにある文字をマクロで一括置換したいと思います。 置換したい文字は複数あり、その内容は別ファイル「置換.xls」に次のように記述されています。    A列   B列 1  等   など 2  有り  あり 3  無し  なし ※A列をB列に置換します。 ※置換の項目数は、実際には3つではなく、100近くあります。 どのようなマクロを書けばよいのかお教えいただけませんでしょうか? 具体的なコードでなくても、方向性だけを示していただいても助かります。 よろしくお願いいたします。 Excel2003を利用しています。

  • 【EXCEL VBA】定数で与えられたセルを使いセル範囲を選択する方法

    【EXCEL VBA】定数で与えられたセルを使いセル範囲を選択する方法 VBA初心者です。よろしくお願いします。 実行したい処理は決めたのですが、Excelのレイアウトが未定です。 そこで、レイアウト変更を考慮し、処理対象セルを定数で与えています。 例えば、 Range("B2:B8").Select は、 Const IchI As String = "B2" Range(Range(IchI), Range(IchI).Offset(6, 0)).Select ・・・(1) としています。(これ自体おかしいのかもしれません。。。) しかし複数のセル範囲 例えば、 Range("B2:B8,F2:F8").Select の場合、どうしたらいいのかわかりません。 (1)自体おかしいのかもしれません。   良い方法があれば教えてください。 よろしくお願いします。

  • 文字列の置換

    AファイルのA1セルからBファイルのC1セルにデータを反映させたとします。 その際に以下のように文字列を複数置換させたいのです。 A1セル   C1セル りんご → みかん みかん → ぶどう なし  → 空欄 空欄  → 空欄 上記のようにセルのデータを複数置換することはできるのでしょうか? 又、置換できるならどの関数を使えばよいのでしょうか?

  • エクセルで置換リストを別ブックにおいたマクロを作りたい

    以下は同一ブック内の「置換」のワークシートに A列に検索文字 B列に置換文字 を書き、置換するマクロなのですが、これですと同一ブック内でしか作業できません。 このリストを別ファイル(例えば"Book2.xls"の"sheet1")に書き、別のファイル(例えば"Book1.xls")で実行するにはどうしたらよいでしょうか。 Sub 置換() For i = 1 To Worksheets("置換").Range("A65536").End(xlUp).Row Cells.Replace What:=Worksheets("置換").Range("A" & i).Value, _ Replacement:=Worksheets("置換").Range("B" & i).Value, _ LookAt:=xlPart, SearchOrder:=xlByColumns Next End Sub

  • マクロ【シート名に対応した文字を挿入・置換】

    マクロ【シート名に対応した文字を挿入・置換】 御世話になります。 【D:\test】内に2つのエクセルファイル(Excel2003)があります。 ※1つ目のファイル名は【季節別表.xls】。 中には一番左端のシート名は【起動シート】で、その横は【spring】【summer】【autumn】【winter】という名前のシートが あり、すべてのシートにはサンプルの表がある。 ※2つ目のファイル名は【データシート.xls】。 中にはシート名【2008】のみが存在。 シート内には下記のような文字を入力している。 セルB2:シート名 セルC2:季節名 セルD2:気候 セルB3:spring セルC3:春 セルD3:暖かい セルB4:summer セルC4:夏 セルD4:熱い セルB5:autumn セルC5:秋 セルD5:涼しい セルB6:winter セルC6:冬 セルD6:寒い B2・C2・D2はシートの列が何の項目であるかがわかるために入力。 B3~6は【季節別表.xls】に存在するシート名を縦に入力。 悩んでいるのは【季節別表.xls】のシート名【起動シート】内にあるマクロボタンに入れるマクロです。 理想の処理の流れですが、 【データシート.xls】のセルB3のspringというシート名が【季節別表.xls】にあればそのシートに セルB3の右隣であるセルC3の文字列【春】を取得し、【季節別表.xls】のシート名【spring】のセルD35の文字列である 【今年の季節名は入学シーズンである。】の【季節名】と置換。 また、セルC3の右隣であるセルD3の文字列【暖かい】を取得し、 【季節別表.xls】のシート名【spring】のセルF70の文字列である【気候は気候状況。】の文字列【気候状況】と置換。 この処理が終わったら、今度は次の行を同じような処理を続け、最終的にはB列が空行になるまで続けられるマクロは 可能でしょうか? 何か簡単なサンプルコードがあれば助かります。 宜しくお願い致します。

  • セルの頭の'を認識する方法について

    数字を文字として入れたい場合など、頭にクォーテーションマークを付けて'001と入れますが、VBAでこのクォーテーションマークが入っていることを知るにはどのようにしたら良いでしょうか? '001の入っているセルを選択して下記VBAマクロを実行した場合、 Selection.Value Selection.Formula このどちらでも1しか返ってきません。 (数字でなくて文字列の場合も同様に'は無視されます) IsNumeric(Selection) でも数値として判定されます。 マクロの用途としては(1つ又は複数の)セルを選択し、ショートカットで+1したり-1する物を作ろうと思っています。 セルに'が入っていた場合、処理後も'が入ったままにします。 対象セルは色々なタイプでも可能にしようと思っています。 '0001 → '0002 '3/7 → '3/8 1 → 2 K-0005 → K-0006 よろしくお願い申し上げます。

  • セルに自動で文字を入力するには(オフィス2000)

    セルへの文字入力について質問があります。 セルに、入力規則のリストで入力を行っています。 リストが参照しているセルは、IF関数を使用して、○か空欄の表示判定を行っています。(セルは隠している) 入力項目が大量にあるため、ドロップダウンリストでは効率が あまりよろしくありません。   A   B  C 1 アイス    ○ 2 かき 3 なし     ○ ↓ 100         B列はあくまでチェックを行いたいので、手動で選択しなければ なりません。(○がある場合は空欄のときは入力不可を示しています。) マクロでの、ダブルクリックで文字が入力できる項目などもみたのですが、マクロのイメージに合うような物が見つけられませんでした。 (マクロも記録をつなげるぐらいなのですが・・・) このような処理をしている場合は、やはりドロップダウンリストを 使用するしかないのでしょうか? よろしくお願いいたします。

  • エクセルで別セルに文字が入ってたら置換・・・

    エクセルで別のセルに文字が入ってたら置換、空白だったらすでに表示されている文字のままにしたいです。どうすればいいでしょうか? 以下のやり方だとA5が空白の場合、falseと表示されてしまいます。 =IF(A5<>"",A5)

専門家に質問してみよう