• 締切済み

VBAでワークシート関数を使用するときの注意点は

WindowsXPのExcel2003のVBAで作った物を、別のPCで動作させたところコンパイルエラーが出て動きません。 作成段階でのTESTまでは何の不具合もなく正常なのですが、別のPCでは構文エラー(たぶん)が出るのです。 ワークシート関数の構文らしく、関数の前に"Application.WorksheetFunction."を付けていないのが原因と思われます。 質問は2つで、 1.全てのワークシート関数には"Application.WorksheetFunction."文を付けなければならないか? 2.作成PCと動作PCが違う場合、同じモジュールでも違う動作をするのか? また、その場合の原因も。 どなたかご教示下さい。 お願いします。

みんなの回答

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

VBAでワークシート関数を利用するには-Application.WorksheetFunction http://www.relief.jp/itnote/archives/001834.php 1)つける必要はあると思ってます。 2)OSとExcelのバージョンが同じであれば動くと思ってます。 動かない場合に多いのは、何らかの参照設定が外れている・設定していない為ではないかと。 或いはオリジナルなDLLを呼び出しているが、別のPCにはそのDLLがインストされていないとか。

関連するQ&A

  • エクセルVBA ワークシート関数の使用について

    エクセル2003VBA ワークシート関数の使用についての質問です よろしくお願いします。 4桁の数字を、千の位・百の位・十の位・一の位に分解する関数ですが 例えば A1に4桁の数字があり、B1に千の位を表示する場合ですが ワークシート関数の場合 B1=MOD(INT($A$1/1000),10) となりますが VBAにてそのまま使用し Range("B1").value=Application.WorksheetFunction.MOD(INT(Range("A1")/1000),10)とするとエラーになります。 エラーになる原因は、いろいろ調べたら分かったのですが この様に、一発でB1に計算結果を入れたいのですが、どうしたらよろしいでしょうか 現在は、 Range("C1").Formula = "=MOD(INT(A1/1000),10)" Range("B1").value=Range("C1").value 一旦、C1に置き換えてから行っています。 よろしくお願いします

  • Excel ワークシート関数をVBAで使用したい

    お世話になります。 Excelでワークシート関数をVBAで使用したいのですが、うまくいきませんでした。 関数ですと「ISERROR(FIND(V$10,R$11))=FALSE」のような式をVBA上で使用したいと思い、以下のようにコードを書いてみましたが If Application.WorksheetFunction.IsError(Application.WorksheetFunction.Find(Cells(i, j), Cells(i, 18))) = False Then Cells(i, j).Select End If 「実行時エラー'1004' WorksheetFunction クラスのFindプロパティを取得できません」となります。 入れ子が問題なのでしょうか。 よろしくお願いします。

  • 「ワークシート関数」

    良くわからないのですが エクセルのワークシートで使う関数を「ワークシート関数」と言い、 VBAで使うワークシート関数を「WorksheetFunction関数」と言うのですか?

  • VBA ワークシート関数のエラー

    シートに数式を入れていたものを、VBAで値のみ入力しようと考えています。 そこで、.Cells(1,1) = WorksheetFunction.数式といった形のメソッドを試しています。 しかし、複雑な数式を記述するとエラーが出てしまいます。 成功 (iferrorというワークシート関数が1つ) Debug.Print WorksheetFunction.IfError(1 / .Cells(1, 5) + 1 / .Cells(1, 6) + 1 / .Cells(1, 7) - 1, "P") 失敗(ワークシート関数のifとcountifなど複数のものが数式に混入) Debug.Print WorksheetFunction.If(CountIf(Range("C17:D49"), Range("C29")) > 5, Range("C29"), Range("D29")) Countifの場所でエラーになります。このcountifを使えるようにするためには、どうすればよいのでしょうか? WorksheetFunction.if(WorksheetFunction.Countif(、、、、という書き方はダメでした。 数式が汚くてすみません。 宜しくお願いいたします。

  • ワークシート関数とはどのことなのですか?

    【1】エクセルのワークシート上で使う=TODAY()などの関数 【2】VBAのCountなどのWorksheetFunction 【3】VBAのLENなどの関数 どれのことを俗に言う「ワークシート関数」と言うのでしょうか? VBAで使う【2】【3】のことですか?

  • EXCELのVBAで、あるワークシートでのみ使うユーザーフォームを作り

    EXCELのVBAで、あるワークシートでのみ使うユーザーフォームを作りました。そのワークシート上での定数や、プロシージャや関数をワークシートのモジュールに置いています。そして、その定数や関数などをユーザーフォームのイニシャライズなどで使いたいと思いますが、ユーザーフォームのモジュールはワークシートのモジュールとは別なので、使えません。他への影響を考えると、標準モジュールには、置くのは不適切だと思います。 特定のワークシート上でのみ使うユーザーフォームと、そのワークシートとで、共通の定数や関数などを使う方法は、あるのでしょうか。どのようにすればよいのでしょうか。

  • VBAで使えないワークシート関数は

    エクセルVBAで、ワークシート関数を使う場合に、findやmatchなどの検索関数が使えないのですが、何か別の関数が用意されているのでしょうか? やりたいことは、セルの中の文字列を、区切りのスペース文字で分解したいのですが。区切り文字の位置を知るfindが使えません。

  • vba 自作関数

    Function zei(myRng As Range) As Double Dim c As Range Dim goukei As Double 'Volatileについて 'シート内のどこかのセルを参照しているものとする 'シートのどこかに変更があったらそのセルが自動的に再計算される Application.Volatile goukei = Application.WorksheetFunction.Sum(myRng) zei = Int(goukei * 5 / 100) End Function これを標準モジュールに貼り付けてワークシート上で関数を呼び出し、 100を入れると#VALUE!が返るのですがどうしてでしょうか? 違う値を入れても必ず#VALUE!が返ります。

  • ExcelVBA:新規ワークブックを作成し、ワークシートを3枚作る方法 

    ExcelVBAで質問があります。 設定で新規作成時ワークシート3枚としているなら問題ないのですが、それ以外の枚数に設定している場合で、新規のワークブックを作成し、ワークシートを3枚作成するコードを作りたいのですが、以下のようにするとエラーが出ます。エラーは「コンパイルエラー:名前付き引数が見つかりません。」です。 Workbooks.Add Count:=3 このエラーをなくし、新規作成でワークシート3枚(枚数は変わるかもしれません)作るにはどうしたらよいのでしょうか? 回答よろしくお願いします。

  • VBAユーザー関数を外部から制御

    ExcelのVBAで、標準モジュールにワークシートで使うユーザー関数を記述しています。 ユーザー関数は、使い勝手を組み込みのワークシート関数と同様にするため、 Application.Volatile (True) で自動再計算するようにしており、数百カ所以上のセルに使用しています。 しかし、他のVBAモジュールでユーザー関数の戻り値が変わるような操作をすると、その都度 数百か所以上が再計算されるため、非常に時間がかかります。 ユーザー関数のApplication.Volatile (False) にすると瞬間で終了する処理が、数分かかる場合も あります。 他のVBAモジュールから、一時的にユーザー関数の処理内容を変更するようなことは可能でしょうか。