• ベストアンサー

EXCEL VBAでWORKDAY関数を使用したい

こんにちは。 タイトルの通りなのですが シート関数でのWORKDAY関数はうまく使用できるのですが VBAで同じような処理をするにはどうすればいいでしょうか? 例えば、開始日→A1、日数→A2、休日→F1:F10の場合 A3にその値を表示させたい場合 Range("A3")=workday(A1,A2,F1:F10) ではうまく行きません。 [ツール]-[アドイン]の分析ツールと分析ツール-VBAの チェックは付いています。 宜しくお願いします。

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

  • ベストアンサー
  • takkunnet
  • ベストアンサー率74% (32/43)
回答No.5

始めまして。回答いたします。 今回の関数(WorkDay)は、アドインの関数であるため以下のような方法で呼び出します。 Range("A3").Value = Application.Run("ATPVBAEN.XLA!WorkDay" , Range("A1").Value , Range("A2").Value , Range("F10").Value) この方法は、VBAを実行するブック以外のブックに定義してあるマクロ(VBA)を呼び出すのと同じ方法です。 例: FileA.xls 内に Public Function Test(byref strValue as String) As String という定義の関数があったとします。 それを FileB.xls内で使用したいときには strGet = Application.Run("FileA.xls!Test","strValue に与える値") として実行すると「strGet」に関数「Test」の結果が戻ってきます。 ※注意としては、FileA.xlsが同一のExcel内に開かれている必要があります。 つまり「WorkDay関数はアドインの『分析ツール-VBA』=『ATPVBAEN.XLA』内で定義してある関数」という捕らえ方で実行してやれば問題ありません。

esk0105
質問者

お礼

takkunnetさん、ご回答ありがとうございました。 色んな方々が教えて下さいましたが、初心者の私のレベルでは 教えて頂いた意味さえ理解できないことであったりで、応用するにも、戸惑ってしまったりしてしまう有様でした。 takkunnetさんが教えて下さったご回答が、一番簡潔で しかも、私が求めていた通りの答えを得ることができました。 本当にありがとうございました。

その他の回答 (4)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 理由は良く分りませんが、"分析ツール - VBA" (ATPVBAEN.XLA) というのは、古いタイプのXll(Excel Ver 4.0)で作られたようで、やってみましたが、生きていませんね。 通常、VBE側で、参照設定すれば、その関数のメンバが出てくるはずですが、出てきません。ただし、オブジェクトブラウザでは表示されます。私の知る範囲ですが、これは、一旦、グローバル化させるために、Auto_Open が必要だという話を以前聞いたことがあります。これについては、定かではありません。私の持っているマニュアルでは、多少、ATPVBAEN.XLA の辺りが触れられていますが、今、十分に調べていないので、あやふやです。 とりあえず、難しい話は置いておいて、funcres(FUNCRES.XLA) 側からアクセスしてみました。つまり、ワークシート側で「分析ツール」にアドインしてあれば、これは、戻り値を返しますので、VBE側の "分析ツール - VBA"の参照設定は必要ありません。 Sub AddinTest1() Dim StartDate As String '開始日 Dim DateCount As String '日数 Dim Ret As Variant '戻り値 StartDate = """" & Format$(Range("A1").Value2, "yyyy/mm/dd") & """" DateCount = Range("A2").Value  'FUNCRES.XLA 側  Ret = Evaluate("WORKDAY(" & StartDate & "," & DateCount & ")")  If Not IsError(Ret) Then   Range("A3").Value = Format$(Ret, Range("A1").NumberFormatLocal)  Else   Range("A3").Value = CVErr(xlErrNA)  End If End Sub もう少し、この件は、調べてみたいと思います。

esk0105
質問者

お礼

Wendy02さん、ご回答ありがとうございます! 色々と調べて下さり、本当に感謝の言葉の言いようもありません。 私の説明が悪かったのか、休日を除外した日付の計算をしたかったので その指定をどこにどう入れればいいか悩んでいるところに No.5のtakkunnetさんが教えて下さいましたので、そちらを応用して使用させて頂くことにしました。 funcres(FUNCRES.XLA) 側って何? アドインって??? などと言うレベルの私が、こんな質問をさせて頂くのは百年早いかもしれませんね。(汗) それなのにご親切に本当にありがとうございました。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

#1補>教えて頂いた方法で実行すると、下記のエラーになってしまいます。 WorksheetFunctionのメンバの中にWorkday関数は無いです。 #1の回答は、実際に動作するかを調べないで書いているものと思います。

esk0105
質問者

お礼

そうだったんですかー。 教えて頂いてありがとうございます。 そのまま、延々と悩み続けるところでした!

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

適当なセルをワークとして使ったらどうでしょう

esk0105
質問者

お礼

BLUEPIXYさん、ご回答ありがとうございます。 すみません、おっしゃって頂いた内容が高度すぎて 私には理解できませんでした。 もう少し勉強してみます。

  • Batistuta
  • ベストアンサー率28% (24/84)
回答No.1

VBAでエクセルの関数を使いたい場合は、エクセルオブジェクトのWorksheetFunction関数を使います。 Range("A3") = Application.WorksheetFunction.Workday(A1,A2,F1:F10)

参考URL:
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_050_030.html
esk0105
質問者

補足

Batistutaさん、早速ご回答ありがとうございます! 教えて頂いた方法で実行すると、下記のエラーになってしまいます。 実行時エラー'438': オブジェクトは、このプロパティまたはメソッドをサポートしていません。 参照設定等、どこかにチェックが必要だったりするのでしょうか?

関連するQ&A