• 締切
  • 困ってます

ExcelVBA テキストファイルの文字列置換え

  • 質問No.7391648
  • 閲覧数239
  • ありがとう数3
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 66% (2/3)

VBA初心者のものです。
複数のフォルダの中にある同名テキストファイル(INIファイル)の中の特定の文字列
を置換えるマクロを作成していますが、うまくいかずエラーになります。
フォルダは毎回名前が変わるのでこれを変数にしてパスの中に入れて、その下の
階層のINIファイルを文字列置換えするというものです。

文字列置換えはReplace関数を使って、テキストファイルの読み込みと別ファイルとして書き出して、元ファイルを削除、新ファイルの名前を元ファイルの名前に変更するというもので、
置換える文字列はエクセルシートのB2・B3セルを読み取ってます。
テキストを開く際にパスを変数でなくフォルダ名を指定して作ると文字列置換えは出来るので、パスへの変数の組み込み方か条件設定がおかしいのかなと思うんですが、エラーはパスが不明といった内容のものが出ます。

エクセルファイルはデスクトップにあるNew Projectフォルダの中に置いて、同階層にresultフォルダがありその中に複数のフォルダ(このフォルダ名を変数にしようとしています)、それぞれの中の2つ下層に同名テキスト(INI)ファイルがあります。

もしくは違う良い方法があるのか、浅学で稚拙なコードですがどうかご教示をお願いします。



Sub MyMacro1()

Dim a As String
Dim z As String
Dim MyF As String
Dim DirName As String
Dim MyIniNo As Integer
Dim YourIniNo As Integer

MyIniNo = FreeFile
YourIniNo = FreeFile

DirName = "C:¥Documents and Settings¥AAA¥デスクトップ¥NewProject¥result¥"
MyF = Dir(DirName, 16)

If MyF <> "" Then
Do Until MyF = ""

Open "C:¥Documents and Settings¥AAA¥デスクトップ¥NewProject¥result¥" & MyF & "¥EzInst¥SETUP.INI" For Input As MyIniNo
Open "C:¥Documents and Settings¥AAA¥デスクトップ¥NewProject¥result¥" & MyF & "¥EzInst¥SETUP2.INI" For Input As YourIniNo

b = Range("B2")
c = Range("B3")

While Not EOF(1)
Line Input #MyIniNo, a
z = Replace(a, b, c)
Print #YourIniNo, z
Wend

Close MyIniNo
Close YourIniNo
Kill "C:¥Documents and Settings¥AAA¥デスクトップ¥NewProject¥result¥" & MyF & "¥EzInst¥SETUP.INI"
Name "C:¥Documents and Settings¥AAA¥デスクトップ¥NewProject¥result¥" & MyF & "¥EzInst¥SETUP2.INI" As "C:¥Documents and Settings¥AAA¥デスクトップ¥NewProject¥result¥" & MyF & "¥EzInst¥SETUP.INI"

Loop

End If
End Sub

回答 (全3件)

  • 回答No.3

ベストアンサー率 53% (349/647)

ちゃんと検証してないですが、以下で一度お試しください。

Sub MyMacro1()
Dim a As String
Dim z As String
Dim MyF As String
Dim DirName As String
Dim MyIniNo As Integer
Dim YourIniNo As Integer
MyIniNo = FreeFile
DirName = "C:\Documents and Settings\AAA\デスクトップ\NewProject\result\"
MyF = Dir(DirName, 16)
If MyF <> "" Then
Do Until MyF = ""
If MyF <> "." And MyF <> ".." Then ’★サブフォルダと親フォルダを無視
Open "C:\Documents and Settings\AAA\デスクトップ\NewProject\result\" & MyF & "\EzInst\SETUP.INI" For Input As MyIniNo
YourIniNo = FreeFile ’★これの位置変更
Open "C:\Documents and Settings\AAA\デスクトップ\NewProject\result\" & MyF & "\EzInst\SETUP2.INI" For Input As YourIniNo
b = Range("B2")
c = Range("B3")
While Not EOF(MyIniNo)
Line Input #MyIniNo, a
z = Replace(a, b, c)
Print #YourIniNo, z
Wend
Close MyIniNo
Close YourIniNo
Kill "C:\Documents and Settings\AAA\デスクトップ\NewProject\result\" & MyF & "\EzInst\SETUP.INI"
Name "C:\Documents and Settings\AAA\デスクトップ\NewProject\result\" & MyF & "\EzInst\SETUP2.INI" As "C:\Documents and Settings\AAA\デスクトップ\NewProject\result\" & MyF & "\EzInst\SETUP.INI"
End If
MyF = Dir ’次のフォルダへ
Loop
End If
End Sub
  • 回答No.2
ステップイン実行をご存知でしょうか?
実行するプロシージャにカーソルを置いてF8キーです。

一行ずつ実行するので、どの行でどんなエラーになるのか分かります。
お礼コメント
benaonana

お礼率 66% (2/3)

ご返答ありがとうございます。
遅くなり申し訳ありません。

ステップイン試しました。
テキストファイルを開けるところでパスが不明と出ます。
このパスに変数を入れ込んでるんですが、
変数でなく直接指定したパスにするとうまくいくのです。
なんでやはり変数の設定のところがおかしいんでしょうか。
投稿日時:2012/04/05 07:56
  • 回答No.1

ベストアンサー率 53% (349/647)

動作確認はしていませんが、★の行を追加してみてはどうでしょうか?

Do Until MyF = ""
If MyF <> "." And MyF <> ".." Then ’★サブフォルダと親フォルダを無視する



MyF = Dir ’★次のフォルダを取得
Loop
お礼コメント
benaonana

お礼率 66% (2/3)

ご返答ありがとうございます。
遅くなり申し訳ありません。

入力してみましたが同じくエラーが出てしまいます。
パスが不明というものです。
投稿日時:2012/04/05 07:50
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ