VBアプリでExcelファイル内の文字が置換された事を確認する方法

このQ&Aのポイント
  • VBアプリを使用してExcelファイル内の文字を置換する方法について質問です。置換したファイルの一覧を作成するためにはどのような方法が適切でしょうか?また、動作結果におけるエラーの理由や検索・置換・一覧作成の流れについても教えてください。
  • VBアプリでExcelファイル内の文字が置換された事を確認する方法について質問です。置換したファイルの一覧を作成するためにはどのような方法が適切でしょうか?また、エラーが発生した理由や検索・置換・一覧作成の流れについても教えてください。
  • VBアプリでExcelファイル内の文字が置換された事を確認する方法について質問です。置換したファイルの一覧を作成するためにはどのような方法が適切でしょうか?また、エラーの原因や検索・置換・一覧作成の流れについて詳しく教えてください。
回答を見る
  • ベストアンサー

VBアプリでExcelファイル内の文字が置換された事を確認する方法

環境:OS.Win2000、Excel2000VBA VBアプリでフォルダ、検索文字列、置換文字列を入力するとExcelファイ ルを探し出し、順に置換していく処理をしようと思っています。置換した ファイルの名前をリストにするため置換されたかどうか必要があります。 しかし.Replaceメソッドは置換に成功しても失敗してもTrueを返すとなっ ています。 そこで検索にヒットしたファイルを置換すればいいのではと思い以下のよ うにテストしてみました(この様な使い方をして良いのか解りませんが) Dim ChkVal As Boolean Dim a '検索 Set ret = xlBook.Application.Cells.Find(What:=Text1.Text, _ After:=xlApp.ActiveCell, _ LookIn:=xlFormulas, LookAt:=xlPart, _ SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, MatchByte:=False) a = ret.Value '!!!エラー発生ポイント 'Emptyかチェックする ChkVal = IsEmpty(a) If ChkVal <> True Then MsgBox "見つけた" Else MsgBox "なし" End If 動作結果 (1)テキストボックスに何も入力せず実行 ⇒ 正常に動作 (2)ファイル内に存在する文字列を入力して実行 ⇒ 正常に動作 (3)ファイル内に存在しない文字列を入力して実行 ⇒ 異常終了 (3)では「オブジェクト変数または With ブロック変数が設定されていませ ん(Error 91)」とでます。 そこで質問です。 1.置換されたか確認するには、どのような方法が適当か 2.動作結果の(2)ではエラーにならないのに(3)ではなぜエラーになるのか 3.検索⇒置換⇒置換されたファイルの一覧作成という流れを皆さんだったら どのような組み立てをするか 質問が複数になってしまいましたがよろしくお願いします。

  • ta55
  • お礼率57% (8/14)

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

  • ベストアンサー
回答No.3

>しかしExcelのVBAでNothingを比較できても、VB6ではNothingを式で >使う事はできないので困ってしまっています。 そうですか? Set ret = xlBook.Application.Cells.Find(What:=Text1.Text, _ After:=xlApp.ActiveCell, _ LookIn:=xlFormulas, LookAt:=xlPart, _ SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, MatchByte:=False) If ret Is Nothing Then MsgBox "なし" Else MsgBox "見つけた" End If としてみてください。正しく判定できると思うのですが・・・。(一応、VB6で確認しました。)

ta55
質問者

お礼

まさに今そこの部分を調べていたところです。おっしゃる通り目的の動作 をしてくれました。tsukasa-12rさん最後まで丁寧に教えて下さって有り 難うございます。

その他の回答 (2)

回答No.2

失礼しました。勘違いしていたのは私の方でした。m(_ _)m 以前、開いている全てのワークブックの全てのワークシートに対して Replace 処理を行うマクロを作ったことがあったのですが、今、見てみたら、 (1) Find で検索 (2) 戻り値が Nothing かどうかをチェック   戻り値が Nothing でなければ Replace という処理をしていました。

ta55
質問者

補足

いえいえ、とんでもありません。やはりNothingを見てますよね。 しかしExcelのVBAでNothingを比較できても、VB6ではNothingを式で 使う事はできないので困ってしまっています。この辺を詳しくご存知でした ら教えてください。

回答No.1

>しかし.Replaceメソッドは置換に成功しても失敗してもTrueを返すとなっています。 何か勘違いされているような気がします。 Excel 2002 ですが、ヘルプで調べてみたら >Replace 関数の戻り値は次のとおりです。 > >条件              Replace の戻り値 >expression is zero-length  長さ 0 の文字列 ("") >expression is Null       エラー >find is zero-length      expression のコピー >replace is zero-length    find がすべて削除された >expression のコピー >start > Len(expression)    長さ 0 の文字列 ("") >count is 0           expression のコピー となっていました。たしか、Excel 2000 でも同じだったと思います。 >2.動作結果の(2)ではエラーにならないのに(3)ではなぜエラーになるのか 2. では、何も入力されていないセル(空白のセル)がヒットして ret に空白のセルが返ってくるが、3. だと ret は Nothing になってるので、Nothing の ret に対して .Value を参照しようとしてもできなくてエラーになるんですね。

ta55
質問者

お礼

Replace関数の方では確かに戻り値が複数設定されていますが、この場合は Replaceメソッドです。 ""で空白の行が見つかったという事になるんですか・・・しっくり来ました 有り難うございます。

関連するQ&A

  • VBで作成したアプリからExcelを開き文字列を検索・置換したい

    環境:OS.Win2000、Excel2000、VB6 VBで作成したアプリからExcelを開き文字列を検索・置換し保存して閉じる という流れの処理をしたいのですがエラーが発生してしまいます。 Private Sub Command1_Click() Dim xlApp As Object Dim xlBook As Object Dim ret As Object 'OPEN Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open("c:\aaa.xls") xlApp.Application.Visible = True '置換 xlApp.ActiveCell.Replace what:=TextBox1.Value, _ replacement:=TextBox2.Value, LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, MatchByte:=False '検索 Set ret = xlBook.Application.Cells.Find(what:=TextBox1.Value, _ After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, _ SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, _ MatchByte:=False) ret.Activate '終了 xlApp.Quit '開放 Set xlBook = Nothing Set xlApp = Nothing End Sub 上記の状態だと ”指定された文字列に置換” の所で ”オブジェクトが必 要です”とエラーが出てしまいます。エラーNOは424です。ちなみに検索 では”Rangeクラスのfindプロパティを取得できません”(1004)となりま す。どうすればエラーが出ないように出来るのか分かりません。また、外部 のアプリでオートメーションを利用する際に気おつけなければいけない事が あれば教えてください。ちなみにExcelのVBA上で実行すると置換までは動作 します。検索の所でエラー1004が発生します。さっぱり理解できません。で きればこの違いも教えてください。続けての質問ですがよろしくお願いします。

  • エクセル 置換後の文字列について

    エクセル2003です 置換後の文字列について質問させてください 特定のセルに文字を入力し 例 C100に(9月)等 検索と置換にて 置換後の文字列を C100のテキストに 置換したいのですが 入力時にC100を選択する方法がわかりません  よろしくお願い致します

  • Excelで置換した文字に色をつけたい

    よろしくお願いします Excelで、「対象シート」のB列を参照して、 「置換リスト」シートの一覧のC列の文字列をE列の文字列に置換するようにしています。 「対象シート」のA列には置換前のデータも入っているので、 「対象シート」のA列、B列それぞれの置換前、置換後の文字列に色をつけたいと思っています。 どの文字がどの文字に置換されたかを比較するためです。 置換後のB列のみ下記式で色をつけられたのですが、 該当文字が含まれる、セル内全部の文字の色が変わってしまいました。 該当文字だけの色を変えるにはどうすればよいでしょうか。 また、「置換リスト」シートのC列にある場は「対象シート」のA列の該当文字のみを赤くする方法も教えていただけないでしょうか。 Sub list置換_Click() Dim list_sheet As Worksheet Dim chg_sheet As Worksheet 'こっちは置換する元の文字と置換文字のリスト Set list_sheet = Worksheets("置換リスト") 'こっちは一括置換したい対象のシート Set chg_sheet = Worksheets("対象シート") cnt = list_sheet.Range("c4").CurrentRegion.Rows.Count For i = 4 To cnt srcword = list_sheet.Cells(i, "C").Value repword = list_sheet.Cells(i, "E").Value With Application.ReplaceFormat.Font .Subscript = False .Color = 255 .TintAndShade = 0 End With Columns("B:B").Replace What:=srcword, Replacement:=repword, LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=True Next i End Sub よろしくお願いいたします。

  • PHPソースファイルの文字列置換をしてから、

    PHPソースファイルの文字列置換をしてから、 そのスクリプトを実行する方法を実行しようとしている のですが、うまくいきません。 似たような質問(http://oshiete.nikkeibp.co.jp/qa5496696.html) を参考にして、文字列置換自体はうまくいったのですが、 phpファイル実行時にまったく関係の無いはずの DBアクセスでエラーが発生してしまいました。 変換前前のphpファイルに置換後の文字列を手で入れて、 データベース実行するとうまくいきます。 しかしながら、phpファイルの文字列置換をstr_replaceで実行し、別名保存した後 includeしても、うまくいかないといった状況です。 ちなみに置換後のphpファイル内で $置換後文字列 = "test"; echo $置換前文字列; とすると、置換前文字列が置換後文字列に きちんと変わっているようで、 "test"と出力されます。 もしかすると、原因は違う所に潜んでいるのかもしれませんが、 どこを調べれば良いのか検討がつかず困っております。 どなたか解決手段の分かる方がいらっしゃれば教えて頂けませんでしょうか? -------------------------------------------------------------- 尚、ファイル構成は top |-change (1.php) |-database (2.php) |-search (検索画面[データベース検索の入り口。form action ="./3.php"],3.php) |-base (4.php,5.php[tempファイル]) となっており、 それぞれの中身は 1.文字列置換実行用のphpファイル(1.php):  1-1.file_get_contentsで4のphpファイルを取得  1-2.str_replaceを用いて文字列置換  1-3.文字列置換したファイルをfwriteで4.phpと同じディレクトリに保存(5.php)  1-4.5.phpをincludeする。  1-5.5.phpをunlinkする。 2.データベースアクセス(mysql)用関数を含むphpファイル(2.php):  ↓エラーの原因と思われる関数  function connect() { global $host,$user_id,$passwd,$con; $con = mysql_connect($host,$user_id,$passwd); } 置換前phpファイルを手動で文字列置換した場合には  同ファイル内で設定したglobal変数の値がきちんと格納されており、  データベース実行がうまくいきます。  置換後phpファイルでは$host等に値が格納されていないため、  データベース実行がうまくいきません。  グローバル変数の中身は同ファイル内で定義しています。 3.検索を実行した時に呼び出されるphpファイル(3.php):  3-1.include("../change/1.php"); 3-2.1.phpの関数の実行 4.文字列置換前のphpファイル(4.php): /*呼び出し元のディレクトリ位置でないとincludeに失敗する*/ 4-1.include("../database/2.php");  4-2.2.phpのデータベースアクセス関数を実行する。 5.文字列置換後のphpファイル(5.php): 3-2の1.php関数の実行により、一時的に生成される。

    • ベストアンサー
    • PHP
  • VBA(Excel)でファイル内の文字を置換したいのですが

    いつも拝見させていただいております。 初めて質問させていただきます。 現在VBAに興味を持ち始めて独学で学んでおり、 VBAでテキストファイルの文字を置換できないかと思っております。 事例としては以下のような例を考えています。 ・エクセルマクロ実行時に置換する/したい文字を入力 ・対象ファイルを指定 ・対象ファイル内(テキスト)にて文字を検索し、ヒットしたら置換 まだVBAを熟知していないので、出来るのかどうかもわかりませんが 可能であれば、教えて頂きたいと思います。宜しくお願いします

  • テキストファイルを直接置換する方法

    VBAに関する質問です。 複数のテキストファイルを読み込んで 指定した文字列を別の文字列に検索・置換してくれるプログラムを作りたいと考えています。 これをするためには一度 Set MyTxt = FSO.OpenTextFile(StrPath, 1) Do While MyTxt.AtEndOfStream = False hairetu(xxx) = MyTxt.ReadLine loop のようにしてテキストデータを全て配列に読み込み、 Replace関数で一つずつ検索・置換した後に Open StrPath For Output As #1 Print #1, hairetu(xxx) のようにしてファイルを出力し直すしかないですか? 配列に読み込まずに 既存のファイルを直接編集する方法を教えてください。

  • VB2008を使ってWordやExcelを制御したいです。

    現在VB2008を勉強中の初心者です。例えば、VB2008からWordを開いてマクロを使った場合と同等の処理を行うことは可能でしょうか。 以下はWord2003で作成したマクロの一部を抜粋したものですが、例えば以下のように特定の文字を検索したり、置換したりといったドキュメント内の細かな制御はできるのでしょうか。 マクロを使えば?と言われればそれまでですが、勉強がてら大変興味があり、投稿しました。 ご存知の方、何卒よろしくお願いします。 Selection.Find.Replacement.Font.ColorIndex = wdRed With Selection.Find '置換前文字列を段落記号に設定 .Text = "^p" '置換後文字列を段落記号に設定 .Replacement.Text = "^p" .Forward = True .Wrap = wdFindContinue .Format = True .MatchCase = False .MatchWholeWord = False .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False .MatchByte = False .MatchFuzzy = False End With

  • Excelの置換がうまく出来ません。

     Excelである文字列を検索しようとすると、ちゃんと検索できるのですが、それを別の文字列に「置換」しようとすると「一致するデータが見つかりません」のメッセージが出て置換できません。「一致するデータ」がちゃんと存在するにもかかわらずにです。  ところが「すべて置換」にするとちゃんとすべてその文字列が指定の文字列に置換出来てしまいます。  即ち、ちゃんと置換すべき文字列が存在するにもかかわらず「置換」だけが実行されないのです。  これってどうゆうわけでしょうか?  私としては、「すべて置換」ではなく、一つ一つ確認しながら文字列の置換を行いたいのですが・・・私のやり方が悪いのでしょうか?  尚、ここで言う「文字列」とは狭い意味のそれではなく、数値・記号を含む全ての文字と言う意味です。

  • エクセルのマクロでファイルを開く

    エクセルの「ファイルを開く」ダイアログボックスを使用してファイルを開き、その開いたファイルに対してとあるマクロを実行させたいと思っています。 エクセルの「ファイルを開く」ダイアログボックスでパス取得までは理解出来たのですが、その先の処理が分かりません。 「ファイルを開く」と言うのは、「現在アクティブになっているシートにデータを貼り付けて」の処理でも構いません。 Dim Ret As Variant Ret = Application.GetOpenFilename("Excel ブック (*.xls), *.xls, テキストファイル(*.txt),*.txt") If Ret = False Then MsgBox "キャンセルが選択されました。" Exit Sub Else       'ここにRetで取得しているパスのファイルを開いて、sub_WAITのマクロを実行させたいです。 sub_WAIT.Show End If End Sub

  • テキストファイルの中身を自動で置換したい

    VBA初心者なので説明不足な部分があると思いますがよろしくお願い致します 現在テキストファイルを開いてCtrl+Hで検索する文字列を検索 置換後の文字列を入力し置換しているのですが ファイル数が多く1つ1つ開いて置換するのがとても面倒です Excelで開けば良いのでは?と前にご意見をいただいたのですが Excelで開いてそこからの操作がよくわからず…。 できればボタン一つで自動的に置き換えられるようにしたいのですが どのようにコードを書けば良いのかまったくわかりません。 ・指定フォルダー内にある(1つまたは複数の)テキストファイル内の文字列をすべてセルに書き出す ・セルから特定の文字(例→【 ,F1 】)を検索し、特定の文字(例→【 ,A2 】)に置換する ・上書きして保存 という感じにしたいのですができますでしょうか? 無理そうでしたら大丈夫です 閲覧いただきありがとうございました

専門家に質問してみよう