• ベストアンサー

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

Wendy02の回答

  • ベストアンサー
  • 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はわかりません。 せっかく書いてもらったのによく理解できなくてすみません。

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