Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


13397 / 13644 ツリー ←次へ | 前へ→

【5577】文字列置換 olive 03/5/20(火) 22:48 質問
【5583】Re:文字列置換 りん 03/5/21(水) 3:50 発言
【5585】Re:文字列置換 ポンタ 03/5/21(水) 8:30 回答
【5587】Re:文字列置換 りん 03/5/21(水) 9:00 発言
【5603】Re:文字列置換 olive 03/5/21(水) 21:48 質問
【5604】Re:文字列置換 ポンタ 03/5/21(水) 22:15 回答

【5577】文字列置換
質問  olive  - 03/5/20(火) 22:48 -

引用なし
パスワード
   ファイルを開かずに、テキストファイル(←とりあえず限定としてます)内の文字列を
置換えさせるマクロを作りたいのですが、
単純に、(GetOpenFilename)から置換したい対象のファイルを選択させ、
それを(Replace)文でできるかと思うのですが・・・
オブジェクトが必要とのエラーが出ました。
("1"を"2"に置換えする↓)

Dim okikae As File(?)
okikae=Application.GetOpenFile
okikae.Replace what:="1", Replacement:="2", LookAt:=xlwhole

まだこれしか自力では出来てません(×_×;)

【5583】Re:文字列置換
発言  りん E-MAIL  - 03/5/21(水) 3:50 -

引用なし
パスワード
   olive さん:

>単純に、(GetOpenFilename)から置換したい対象のファイルを選択させ、
>それを(Replace)文でできるかと思うのですが・・・
 できないとおもいますけど。

【5585】Re:文字列置換
回答  ポンタ  - 03/5/21(水) 8:30 -

引用なし
パスワード
   「開かずに」、というのが「シート上に呼び出さずに」、という意味なら
以下のコードでできると思います。

ただし、テキストファイルのサイズが大きすぎるとメモリが不足する可能性があります。

Sub test()
  Dim FileName As String
  Dim objText As Object
  Dim MyStr As String
  FileName = Application.GetOpenFilename
  If FileName = "False" Then Exit Sub
  Set objText = CreateObject("Scripting.FileSystemObject").OpenTextFile(FileName, 1)
  MyStr = objText.ReadAll
  objText.Close
  MyStr = Replace(MyStr, "1", "2")
  Set objText = CreateObject("Scripting.FileSystemObject").OpenTextFile(FileName, 2)
  objText.Write (MyStr)
  objText.Close
End Sub

【5587】Re:文字列置換
発言  りん  - 03/5/21(水) 9:00 -

引用なし
パスワード
   ポンタ さん、おはようございます。

>「開かずに」、というのが「シート上に呼び出さずに」、という意味なら
 ああ、そういう意味でしたか。
 それならば、OpenステートメントとWorksheetFunctionのSubstituteを組み合わせてもいけそうですね。Randomアクセスはかえって面倒かな?

【5603】Re:文字列置換
質問  olive  - 03/5/21(水) 21:48 -

引用なし
パスワード
   皆様アドバイスありがとうございます。
> 「開かずに」、というのが「シート上に呼び出さずに」、という意味なら
そういう意味で書きました。m(_ _)m

置換マクロでひと工夫したいと思いまして、置換させたい文字列と、置換える文字列
を入力させる形式にしたいと思いまして・・・

インプットボックスで置換元と置換え先(?)文字列を入力させ、その置換元を
その文字列が選択したファイル内にあるかどうか検索してリプレイスしたいのですが、
はじめのほうの(読み込み)ファイル選択、参照設定の後に

okikae1 = InputBox("置換元?")
okikae2 = InputBox("何と置換?")
MyStr = Replace(MyStr,okikae1,okikae2)
If okikae1 <> True Then
 MsgBox "置換元文字列はありません"
 Exit Sub
End If

というような感じで追加したいのですが、判定文のあたりがよくわからなくて
すみません・・・(^^;
これで実行するとエラーとはならないのですが、「ありません」で抜けてしまいます。

【5604】Re:文字列置換
回答  ポンタ  - 03/5/21(水) 22:15 -

引用なし
パスワード
   MyStr2 = Replace(MyStr,okikae1,okikae2)
If MyStr = MyStr2 Then
 MsgBox "置換元文字列はありません"
 Exit Sub
End If

として

objText.Write (MyStr)

objText.Write (MyStr2)

で良いと思います。

13397 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free