• ベストアンサー

エクセルで複数のファイルの特定の文字の置き換え

エクセルで同じフォルダに入っている複数のファイルがあります。(数百個)その中の特定の文字を別の文字に置き換えることは可能でしょうか?

  • balto
  • お礼率64% (18/28)

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

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

こんばんは。 これは、その都度、ファイルは閉じてはいますが、メモリとか使っているような気がしますね。あまり、IE などを開いたままには、このVBAマクロはお勧めできません。 シェアウェアでは、どうしているのでしょうね。このレベルでは、お金を取れるような内容ではありません。直接、ファイルに書き込むようなことをしなければね。 それから、たぶん、Excel97 では、無理だと思います。いままで、同じようなものは、何度も作ってきて、使ってはいただいていますが、今回は、複数の文字列の置換ということが、初めてです。(そのようなリクエストはありませんでしたけれど)一対一交換のものは、成功したものが別にあります。 例: 交換条件 →交換済み 5757AAAA →5902BBB コンマ(,)で区切って指定します。 フォルダの中は、全ての場合と、そうでない場合を想定しています。ファイル・オープンダイアログは、マルチセレクト(複数選択)が可能な状態です。 最初に、量を少なくして、バックアップを取ってから行ってください。 なお、私が解明できない不明なエラーがある時は、現在のこの版は、あっさりと見送り、以前のものを公開します。 '<標準モジュール> Sub xlsReplace()   Dim objF As Object, Ret As Variant, Fnames() As Variant, Fname As Variant   Dim sWords$(), rWords$(), Words As Variant, i As Long, j As Long, OrgPath As String '============================================================   '検索語   Const sWord = "交換条件,5757AAAA"   '置換語(上記と対にする)   Const rWord = "置換済み,5902BBB"   'ここは下位フォルダでも可能です。   Const myDrive As String = "C:\"   ' '============================================================   sWords = Split(sWord, ",")   rWords = Split(rWord, ",")   ReDim Words(1, UBound(sWords))   For i = LBound(sWords) To UBound(sWords)    Words(0, i) = sWords(i)    Words(1, i) = rWords(i)   Next i   OrgPath = CurDir   Set objF = CreateObject("Shell.Application"). _   BrowseForFolder(0, "フォルダを選んでください。", 0, myDrive)   If Not objF Is Nothing Then    Ret = MsgBox(objF.items.Item.Path & "のフォルダのファイルを全て実行しますか?", _    vbYesNoCancel)    If Ret = vbYes Then      ChDir objF.items.Item.Path      Fname = Dir(objF.items.Item.Path & "\" & "*.xls")      Do       ReDim Preserve Fnames(j)       Fnames(j) = Fname       j = j + 1       Fname = Dir      Loop Until Fname = ""      Application.ScreenUpdating = False      For Each Fname In Fnames       Call ReplaceValues(CStr(Fname), Words)      Next Fname      Application.ScreenUpdating = True    ElseIf Ret = vbNo Then      ChDir objF.items.Item.Path      Fnames = Application.GetOpenFilename("xls ファイル(*.xls),*.xls,全てのファイル(*.*),*.*", , , , True)      If VarType(Fnames) = vbBoolean Then Exit Sub      Application.ScreenUpdating = False      For Each Fname In Fnames       Call ReplaceValues(CStr(Fname), Words)      Next Fname      Application.ScreenUpdating = True    End If   End If   Set objF = Nothing   MsgBox "終了" End Sub '置換のサブルーチン Private Sub ReplaceValues(Fname As String, ParamArray Words()) Dim wb As Worksheet, k As Long, arWords arWords = Words With Workbooks.Open(Fname) For Each wb In .Worksheets   On Error Resume Next For k = LBound(arWords(0), 2) To UBound(arWords(0), 2)  wb.Cells.Replace What:=arWords(0)(0, k), _           Replacement:=arWords(0)(1, k), _           LookAt:=xlWhole, _           SearchOrder:=xlByRows, _           MatchCase:=False Next k 'Replace の仕様:xlWhole=全一致   On Error GoTo 0   Err.Clear Next   .Save   .Close True End With End Sub

balto
質問者

お礼

ありがとうございます。 エクセルのバージョンは2000です。 残念ながらVBAはわかりません。 せっかく書いてもらったのによく理解できなくてすみません。

その他の回答 (7)

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

こんにちは。 >他のドライブ(たとえばDドライブ、ネットワーク越しのサーバー内のフォルダ等)を指定したい場合どうしたらいいでしょうか? Dドライブの時は、  D:\ でよいのですが、ネットワークの場合は、  "\\サーバー名\フォルダ" ということになります。ただし、書き換えられる状態になっていないといけませんが。

balto
質問者

お礼

すみません。やりもしないで聞くばかりで。 いま、マクロの部分を書き換えたらできました。 ありがとうございました。

balto
質問者

補足

返答が遅れてすみません。 >Dドライブの時は、 > D:\ >でよいのですが、ネットワークの場合は、 > > "\\サーバー名\フォルダ" どこを書き換えればいいですか? マクロを実行すると ”フォルダを選んでください” となって、Cドライブ以下を選択するようになっています。 ネットワーク越しに関してはもちろん書き換え可能な権限があります。

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

こんにちは。 >セルの中の一文字のみを指定していたためのようです。 >試していませんが指定フォルダの下位フォルダの中のファイルも置換されるのでしょうか? それについては、細かく触れていませんでしたが、 '置換のサブルーチン という中の ×LookAt:=xlWhole, _   ↓  LookAt:=xlPart, _ と書き換えれば、部分でも検索して置換してくれます。 今、試してみましたが、どうやら、そちらのほうがよかったですね。気が付かないですみません。 >試していませんが指定フォルダの下位フォルダの中のファイルも置換されるのでしょうか? これも、間違いやすい表現でした。 現在のバージョンでは、 #'ここは下位フォルダでも可能です。 #  Const myDrive As String = "C:\" 下位フォルダを書いてもよいです、という意味です。 もちろん、下位フォルダを調べることの出来るように作ることも出来ますが、もう少し、コードが長くなりそうです。でも、存在するExcelのブックを全て調べてしまうこともあるので、ちょっとどうなるか分りません。

balto
質問者

お礼

何度もすみません。 このマクロだとCドライブのみの指定になりますが 他のドライブ(たとえばDドライブ、ネットワーク越しのサーバー内のフォルダ等)を指定したい場合どうしたらいいでしょうか?

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

こんにちは。 #4 のWendy02 です。 >フォルダがデスクトップに置いてあるのですがそれが問題でしょうか? たぶん、それが一番、問題の核心に近いと思います。 デスクトップというのは、実際は、C:\Windowsフォルダにあるのですが、そのフォルダ自体は、ショートカットがほとんどで、デスクトップを指定しても、そこには何もないというわけです。もし、Excelファイルが、Windowsフォルダに存在するというなら、あまり、そこに置くのはお勧めできません。 デスクトップに置いてあるフォルダーを右クリックして、プロパティのリンク先を調べてみてくれますか?たぶん、別の場所にあるのではないかと思います。

balto
質問者

お礼

できました。ありがとうございます。 デスクトップフォルダはXPなので C:\Documents and Settings\****\デスクトップ にあるのですが、原因はそれではなく、 セル全体の単語を指定しないで、セルの中の一文字のみを指定していたためのようです。 試していませんが指定フォルダの下位フォルダの中のファイルも置換されるのでしょうか?

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

#4 の Wendy02です。 最初に、ミスがありました。 xlsReplaceのコードの中の最後の部分   .Save  '←は不要です。同じことを二度していました。   .Close True End With End Sub baltoさんへ >残念ながらVBAはわかりません。 一応、設定の仕方だけは書いておきます。 今回に関しては、Alt +  F11 (Altを押しながらF11)を押すと、Visual Basic Editor 画面が出てきます。次に、メニューの[挿入]-[標準モジュール]と開けて、クリックすると、画面が現れますので、コードを貼り付けて、再び、Alt + F11 で、画面を閉じます。 実行は、Alt + F8 で、「xlsReplace」を選んで、実行。 または、ボタンをつけるというわけです。 記録マクロでもしていたら、ある程度お分りになるかと思います。なお、Versionに関しては十分です。 後は、#1で、g_nekoruさんがご紹介してくださった、外部ツール(Excelを起動させないで動く)のシェアウェアのほうがよろしいかもしれません。

balto
質問者

お礼

試してみました。 でも置換されません。 マクロ登録し、置換したい文字、置換後の文字を指定して実行したのですが変化がありません。 フォルダがデスクトップに置いてあるのですがそれが問題でしょうか? 具体的な内容ですがあるファイルで文字の書き間違えがあり(替→換)また、このファイルが数百個あるためそれを書き換えするのが大変なのでこの質問をしているのです。 下のフリーウェアは使い方がいまいちよくわかりませんでした。 シェアウエアを使うほどでもないのですが・・・。

回答No.3

#2です。 書いた後で完全に質問の意図を読み間違えている事に気づきました; 無視してください、スミマセン!

回答No.2

どうしてもExcelでやらないといけないんでしょうか? フリーのリネームソフトを使用したほうが簡単だと思うのですが。 的はずれでしたらゴメンナサイ;

参考URL:
http://www.vector.co.jp/soft/win95/util/se156290.html
  • g_nekoru
  • ベストアンサー率34% (30/88)
回答No.1

マクロを作成すればできると思いますがVBAはわかりますか? あとはフリーソフトなどであるかもしれません。 Excel対応のものはほとんどシェアウェアになるかもしれませんが。 http://download.goo.ne.jp/software/search.php?MT=%92u%8A%B7+EXCEL

balto
質問者

お礼

ありがとうございます。 元のファイルのコピーをとってから試してみます。

関連するQ&A

  • 複数のエクセルファイルの文字色を一括で黒にしたい

    こんにちは 下記のように、複数のフォルダの配下にある複数のエクセルファイルA~Fの 中の全ての文字色を一括で黒に変更したいと思っているのですが、 なにか良い方法があったらご教示頂けないでしょうか。 (ちなみに全シートが対象です。) フォルダ1   ┣フォルダ2   ┃  ┗エクセルファイルA   ┣フォルダ3   ┃  ┣エクセルファイルB   ┃  ┣エクセルファイルC   ┃  ┗エクセルファイルD   ┗フォルダ4      ┣エクセルファイルE      ┗エクセルファイルF 実現方法はシェアウェア以外であればソフトでもマクロでも何でも構いません。 よろしくお願い致します。

  • エクセル名称に特定の文字列が含まれたファイルの抽出

    フォルダ内にある多数のエクセルファイルの中で、特定の文字列(例えば”統計”という文字列)が名称の中に含まれているエクセルファイルを抽出したい。 抽出したいエクセルファイルの例      札幌の気温の変化に関する統計資料      統計調査分析(3) よろしくお願いいたします。  

  • Excel、(複数)特定の文字の入替

    いつも大変参考にさせて頂いております。 Excelにて A列の文字をB列に記載するのですが、 その時に特定の文字を別の文字に置き換えたいのです。SUBSTITUTE関数で複数置き換えの方法もみたのですが、 置き換えをしたい対象文字が複数あり 別シートに語群が作られています。(別シートの A列に文字が書いてあり,B列に置き換えたい文字が書いてある) その場合、上手く解決させることができず、どなたか分かる方ご教示頂けますと助かります。 よろしくお願いいたします。

  • 複数のエクセルファイル間の文字検索

    複数のエクセルファイル間で特定の複数の文字検索の方法を教えてください。 エクセルファイルが(1)~(6)まであり、(1)のファイル内の複数の型番が (2)~(6)のエクセルファイルに存在するのかを知りたいのです。 複数の型番を一括で検索できる方法はあるのでしょうか。 会社のPCのため、検索ソフトは使用できません。 また機能拡張などもダウンロードできない環境です。 win10です。 宜しくお願い致します。

  • エクセル マクロで特定ファイル名だけを開く

    エクセルのマクロで 特定のファイル名だけをフォルダの中から探して 開くというものを作りたいのですが うまくできません。 フォルダを指定して 「060927.xls」というエクセルファイルだけを 開きたいのですが この日付のところが毎日変わるので 「06XXXX.xls」というような 最初が06であと4つの文字が入ってるファイル名だけを 流動的に指定できるようにするには どのようなVBAマクロにすればよいのでしょうか? とても困っています。 是非教えてください!宜しくお願いします。

  • フォルダー内の特定excelファイルを開く方法

    フォルダー内の特定excelファイルを開く方法 フォルダー内にたくさんエクセルファイルがありますがACCESSのフォームから特定excelファイルを開きたいです。したいことはフォームの中にテキストボックスを配置し、中にエクセルファイルの名前に記入し、実行ボタンを押すと一致するファイル名前を開くようになってほしいです。 どうせればよいかわかりません。ACCESSの初心者ですので助けください!

  • 複数のEXCELファイルより一部の行を自動でマージするマクロ

    「(1)複数のEXCELファイル」より、「(2)特定のシート」の中のさらに「(3)特定の行」をコピーし、あるEXCELファイルの1シートに挿入していくマクロ(VBA)か、ソフトが掲載されているサイト、もしくは、やりかたを教えてください。 1.EXCELは、2003 2.「(1)複数のEXCELファイル」は、一つのフォルダにあり、データ形式は一緒。  そのフォルダにはEXCELファイルしか置きません。 3.「(2)特定のシート」について、シート名はどれも一部のみ一致します。  または位置(順番)は一緒です。 4.「(3)特定の行」はどのファイルも作りが一緒です。 VBA初心者ですが、ヒントをいただければ頑張りたいと考えています。

  • 複数ファイルから特定シートのコピー

    同じフォルダ内に、エクセルファイルがいくつかあります。 そのフォルダ内のファイルから、特定のシート名(例:シートA)のシートをコピーしシートAだけの新しいファイルとして作成しようと思います。 シートAを含むファイルは複数あります。 何か方法がありましたらご教授お願いいたします。

  • VBA 特定の文字を含む、複数ファイルから抽出

    はじめまして。 必要なデータが複数のファイルにまたがってバラバラに管理されており、必要なデータを取り出すために毎日苦労しています🥲ファイル毎に別担当が更新されているため統合される予定がなく途方にくれています。どなたかコード教えて下さい。切実。 【前提】 特定のフォルダ(階層はバラバラ) Excelファイルが30個前後 ファイルによっては複数のシートがある OSはWindows10 Office365 Excelです。 【検索方法】 メッセージボックスに検索したい文字列(例えば”AA-123“)と入力 できればワイルドカード文字も使いたいです。 【結果の表示】 第1希望 リンクとして表示 第2希望 ファイル名と行ごとコピー 第3希望 ファイル名とセル番地を表示 【複数のファイルがHITした場合の表示】 1件目をA1セルとA2セル 2件目を1行あけたA3セルとA4セル 3件目以降同様に、、、といった具合に全件を表示させたいです。 想定では多くて10件以下の見込です。 以上 難しいかもしれないのですが、どなたかお助けください。

  • Excelで特定文字を数える

    Excelを使っています。 かなりのデータ(行・列ともに)があるのですが、 それぞれのセルの文字列の中にある”・”の数を数えて 別のセルに表示させたいのです。 文字列操作の関数に、文字列の中から特定文字を探し出し その位置を知らせる、というものは見つかったのですが、 上記のような条件に当てはまるものはみつかりませんでした。 どういった方法があるでしょうか。 よろしくお願いします。

専門家に質問してみよう