Replace関数について

このQ&Aのポイント
  • Replace関数についての質問です。マクロを実行する際にReplace関数が正常に動作する理由と、なぜWorksheetFunctionが必要ないのかについて説明してください。
  • マクロ1のReplaceは関数ではなく、メソッドやステートメントであるのか疑問です。マクロ2ではWorksheetFunctionを使うとエラーが発生する理由も教えてください。
  • Replace関数についての疑問です。マクロ1ではReplaceを関数として使用していますが、マクロ2ではWorksheetFunction.Replaceを使用する必要があります。この違いについて詳しく説明してください。
回答を見る
  • ベストアンサー

Replace関数について

Sub macro1() Dim str As String str = "abc" str = Replace(str, "c", "a") MsgBox str End Sub このマクロを実行した時に、問題なく動くのですが なぜReplaceは関数なのに、 WorksheetFunction.がいらないのでしょうか? しかも Sub macro2() Dim str As String str = "abc" str = WorksheetFunction.Replace(str, "c", "a") MsgBox str End Sub にすると、エラーになります。 macro1のReplaceは、関数ではないのでしょうか? メソッドやステートメントですか?

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

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

> なぜReplaceは関数なのに、 > WorksheetFunction.がいらないのでしょうか? Replaceはワークシート関数ではなく、VBA関数だからです。 str = Replace(str, "c", "a") を省略せずに記述すると、 str = VBA.Replace(str, "c", "a") となります。 ワークシート関数はExcelのセルの式で使用するための関数で、Excel専用の関数です。 VBA関数は、VBAが持っている関数で、Excel以外のOfficeアプリ(Word, Accessなど)でも使用できます。

zxc5463czx
質問者

お礼

ご回答ありがとうございました。

その他の回答 (1)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

マクロ1で利用しているのは、エクセルVBAで用意されているreplace関数です。 F1キーを押してヘルプを確認してみると(オブジェクトブラウザで確認するのもお勧め) Replace(expression, find, replace[, start[, count[, compare]]]) という構文で利用すると説明があります。 マクロ2で利用しているのは、ワークシート関数のreplacです。 エクセル画面に戻り、関数ウィザードで関数のヘルプを確認してみると REPLACE(文字列,開始位置,文字数,置換文字列) のように使うと説明があります。 ついでにVBAに戻ってworksheetfunctionのreplaceのヘルプを見てみると、関数じゃなくメソッドだと書かれています。 ワークシート関数の計算例: =REPLACE("ABCDEFG",2,3,"Z") VBAのreplace関数とは、全く構文が違いますね。 VBAからWorksheetFunctionのreplaceを利用する場合も、この書き順でこの内容で引数を与えないと、当然エラーになります。 ちなみにVBAのreplace関数に相当するワークシート関数は、REPLACE関数じゃなくてSUBSTITUTE関数になります。

zxc5463czx
質問者

お礼

ご回答ありがとうございました。

関連するQ&A

  • REPLACE関数が使えません

    ACCESS2000を使っているのですが、REPLACE関数が使えなくて困っています。 Private Sub 置換_Click()   MSG = Replace("ABC", "A", "B")   MsgBox MSG End Sub こういう単純なもので試してもうまくいきません。 「プロシージャの呼び出し、または引数が不正です」 とのエラーが出てしまいます。 どんな原因が考えられますか?

  • ダブルコーテーションを全角に置換するには

    InputBoxで入力した"を、Replace関数で”にしたいのですが、 Replace(str, """", "”")をすると、コンパイルエラーになります。 Sub macro() Dim str As String str = InputBox("文字を入れてください") Debug.Print Replace(str, """", "") End Sub というマクロを作りました。 画像のように、半角のダブルコーテーション「"」を入れたら、 Replace関数で全角のダブルコーテーション「”」に変えるにはどうすればいいでしょうか? 「最初からInputBoxに全角入れればいいやん!」 は、なしにしてください。 ファイル名を作っていて、ダブルコーテーションは全角でないとつけられないのです。

  • ifステートメント 大文字も小文字も区別なく

    Sub test() Dim moji As String moji = "a" If moji = "A" Then MsgBox "Aかaです" End If End Sub これだと、変数が小文字のaだからmsgboxが表示されません。 小文字も大文字も区別なく認識させるにはどうすればいいでしょうか? バイナリモードになってるようです。 Replace関数の場合は、vbTextCompareを付ければ Sub Sample() Dim moji As String moji = "a" Debug.Print Replace(moji, "A", "b", , , vbTextCompare) End Sub このように大文字小文字区別なく置換できますが このような事をifステートメントでやる方法を教えてください。

  • 関数の引数

    こんにちわ。 ご存知の方、ご教授してもらえないでしょうか? VB.net2005を使っているのですが 関数の引数に変数をセットして、別関数で 引数に対してデータをセットすることは可能でしょうか? C言語でいうところのポインタを引数に渡し ポインタアドレスに書き込むような処理はVB.netでは 可能なんでしょうか? 下記のような事は試したのですが、うまく出来ませんでした(。。; public sub test1() dim mojiretu as string test2( mojiretu ) msgbox(mojiretu) end sub public sub test2( str as string) str = "文字列" end sub

  • Replace関数ですか?Replaceメソッドで

    VBAの基本的な質問なのですが ************************************* Sub test() Cells.Replace What:="あああ", Replacement:="いいい" End Sub ************************************* の「Replace」は、 Replace関数ですか? Replaceメソッドですか? オブジェクトブラウザで確認すると ************************************* Excel.Range のメンバ VBA.Strings のメンバ Office.TextRange2 のメンバ Excel.WorksheetFunction のメンバ ************************************* のReplaceがあるのですが 例のReplaceはどれに該当するか教えてください。 ご回答よろしくお願いします。

  • IFステートメントで半角でも全角でもtrueとさせ

    IFステートメントで半角でも全角でもtrueとさせるには? Sub test1() Dim str As String str = "ABC"’←全角のA If str Like "*A*" Then ’←半角のA MsgBox "Aがあります" End If End Sub これで、半角Aもメッセージを表示させたいのですが、 マッチバイトみたいなのってありますか?

  • Replace関数は文字数の制限あるのでしょうか?

    アクセス2003のVBAでReplace関数で置換元のデータが大きい場合以下のエラーになります。アクセスのVBAはVB6と同じ?だと思いますが サイズの制限が存在するのでしょうか? 対策もあれば教えて欲しいです。 dim str_express as string <-- ここにアクセスのTEXT型のデータを入れている modori = Replace(str_express, str_find, str_replace) 実行時エラー'-2147352567(80020009)' 指定されたデータ量がフィールドサイズを超えています。 データ量を減らし、挿入または貼り付けを行ってください。

  • VBA関数の使い方がわからないです

    A1にはハイパーリンクとしてhttp://www.yahoo.co.jp/ が入っていて、標準モジュールで Sub Macro1() MsgBox HyperlinkAddress End Sub Function HyperlinkAddress(target As Range) As String HyperlinkAddress = target.Hyperlinks(1).Address End Function としたら、引数は省略できません。になるのですが、 どうすればいいですか? Sub Macro1() MsgBox Selection.Hyperlinks(1).Address End Sub これと同じような事を、関数を使って表現したいです。

  • グローバル変数などについて

    Option Explicit Dim str1 As String '・・・(1) Sub テスト() Dim str2 As String '・・・(2) str1 = "テスト1" str2 = "テスト2" MsgBox str1 MsgBox str2 End Sub (1)はグローバル変数と言うとの事ですが (2)は何変数と言うのでしょうか? ローカル変数ですか? また、(1)がdimではなく、 Public str1 As String となった場合でも、 プロシージャーの外にあれば、グローバル変数と言うのでしょうか?

  • 「ゞ」のみ置換するにはどうすればいいでしょう?

    「ゞ」を置換したいのに、 「ゞ」の次の文字まで置換されてしまう。 Sub test() Dim str会社名 As String str会社名 = "いすゞ自動車" Debug.Print Replace(str会社名, "ゞ", "ず") End Sub を実行すると 「ゞ自」が対象になってしまうのですが、 どうしてでしょうか? 「ゞ」は一文字ですよね? Replaceで「ゞ」のみ置換するにはどうすればいいでしょう?

専門家に質問してみよう