• ベストアンサー

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

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

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

  • ベストアンサー
  • 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