Sub ReplaceText()
fc = MsgBox("ファイルのデータを置換しますか?", vbQuestion + vbYesNo, "確認")
If fc = vbNo Then Exit Sub
'書換あり
Call SearchSubFolder(ThisWorkbook.Path)
MsgBox ("置換しました")
End Sub
'サブフォルダも含めたフォルダ内のhtmlファイルを探索します。
'入力
'Path・・・探索するフォルダパス
Sub SearchSubFolder(ByVal Path As Variant)
'参照設定します
Dim FSO As Object, Folder As Variant, File As Variant
Set FSO = CreateObject("Scripting.FileSystemObject")
'サブフォルダ内も探索します
For Each Folder In FSO.GetFolder(Path).SubFolders
Call SearchSubFolder(Folder.Path)
Next Folder
'フォルダ内の.htmlファイルを探索します
Dim FilePath As Variant
ReDim FilePath(1 To 100, 1 To 1) As Variant
i = 0
For Each File In FSO.GetFolder(Path).Files
If InStr(File.Name, ".html") > 0 Then
i = i + 1
FilePath(i, 1) = File.Path
End If
Next
'フォルダ内のファイルを任意のデータに置換します
Call Func_Replace(FilePath)
End Sub
フォルダ一つ一つを探索してフォルダ内にある.htmlファイルのフルパスをすべて取得します。
取得した.htmlファイルのフルパスのすべてを次の『Func_Replace』のマクロへ渡します。
VBAコード:テキストデータを任意のデータに置換するコード
'全ファイル内のテキストを任意のデータに置換します
'入力
'FilePath・・・置換するファイルのフルパス(配列)
Sub Func_Replace(ByVal FilePath As Variant)
'置換の始めと終わりのターゲットを格納
Dim RepalceStart, ReplaceLast
With Worksheets("置換")
ReplaceStart = .Cells(1, "B")
ReplaceLast = .Cells(2, "B")
End With
'置換するデータを格納
Dim ReplaceData, LastRow
With Worksheets("置換")
LastRow = .Cells(Rows.Count, "A").End(xlUp).Row
ReplaceData = .Range(.Cells(6, "A"), .Cells(LastRow, "A"))
End With
Dim Hozon As Variant
Dim flag
Dim buf As String, Target As String
For k = 1 To UBound(FilePath, 1)
If IsEmpty(FilePath(k, 1)) = False Then
'ファイルの全データを取得(UTF-8形式で取得します)
Target = FilePath(k, 1)
With CreateObject("ADODB.Stream")
.Charset = "UTF-8"
.Open
.LoadFromFile Target
buf = .ReadText
.Close
End With
'改行区切りで1行ごとに分けて配列として保存します
Hozon = Split(buf, vbLf)
'ここで任意のデータに置換していきます
buf = ""
flag = 0
'1行ずつのデータを一つのデータにまとめます
For i = 0 To UBound(Hozon, 1)
'最終行より前(改行をつけて保存します)
If i < UBound(Hozon, 1) Then
'置換終了のターゲットの場合
If InStr(Hozon(i), ReplaceLast) > 0 Then
flag = 0 '置換フラグをオフ(元のデータを保存していきます)
End If
'置換フラグがオフの場合
If flag = 0 Then
buf = buf & Hozon(i) & vbLf '元のデータを保存します(改行をつけます)
End If
'置換開始のターゲットの場合
If InStr(Hozon(i), ReplaceStart) > 0 Then
flag = 1 '置換フラグをオン(元のデータを保存しないようにします)
'置換するデータを挿入
For j = 1 To UBound(ReplaceData, 1)
buf = buf & ReplaceData(j, 1) & vbLf
Next
End If
'最終行(改行しないで保存します)
ElseIf i = UBound(Hozon, 1) Then
buf = buf & Hozon(i) '元データを保存します(最後なので改行はしません)
End If
Next
'ファイルにデータを格納(UTF-8形式で入力します)
With CreateObject("ADODB.Stream")
.Charset = "UTF-8"
.Open
.WriteText buf, 0
.SaveToFile Target, 2
.Close
End With
End If
Next
End Sub