dポイントプレゼントキャンペーン実施中!

こんにちは。

タイトルの通りなのですが
シート関数でのWORKDAY関数はうまく使用できるのですが
VBAで同じような処理をするにはどうすればいいでしょうか?

例えば、開始日→A1、日数→A2、休日→F1:F10の場合
A3にその値を表示させたい場合

Range("A3")=workday(A1,A2,F1:F10)

ではうまく行きません。


[ツール]-[アドイン]の分析ツールと分析ツール-VBAの
チェックは付いています。


宜しくお願いします。

A 回答 (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』内で定義してある関数」という捕らえ方で実行してやれば問題ありません。
    • good
    • 3
この回答へのお礼

takkunnetさん、ご回答ありがとうございました。

色んな方々が教えて下さいましたが、初心者の私のレベルでは
教えて頂いた意味さえ理解できないことであったりで、応用するにも、戸惑ってしまったりしてしまう有様でした。

takkunnetさんが教えて下さったご回答が、一番簡潔で
しかも、私が求めていた通りの答えを得ることができました。

本当にありがとうございました。

お礼日時:2005/11/30 13:53

こんにちは。



理由は良く分りませんが、"分析ツール - 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

もう少し、この件は、調べてみたいと思います。
    • good
    • 0
この回答へのお礼

Wendy02さん、ご回答ありがとうございます!
色々と調べて下さり、本当に感謝の言葉の言いようもありません。

私の説明が悪かったのか、休日を除外した日付の計算をしたかったので
その指定をどこにどう入れればいいか悩んでいるところに
No.5のtakkunnetさんが教えて下さいましたので、そちらを応用して使用させて頂くことにしました。

funcres(FUNCRES.XLA) 側って何?
アドインって???
などと言うレベルの私が、こんな質問をさせて頂くのは百年早いかもしれませんね。(汗)
それなのにご親切に本当にありがとうございました。

お礼日時:2005/11/30 13:49

#1補>教えて頂いた方法で実行すると、下記のエラーになってしまいます。


WorksheetFunctionのメンバの中にWorkday関数は無いです。
#1の回答は、実際に動作するかを調べないで書いているものと思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/11/30 13:33

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

    • good
    • 0
この回答へのお礼

BLUEPIXYさん、ご回答ありがとうございます。

すみません、おっしゃって頂いた内容が高度すぎて
私には理解できませんでした。

もう少し勉強してみます。

お礼日時:2005/11/30 13:32

VBAでエクセルの関数を使いたい場合は、エクセルオブジェクトのWorksheetFunction関数を使います。



Range("A3") = Application.WorksheetFunction.Workday(A1,A2,F1:F10)

参考URL:http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub0 …

この回答への補足

Batistutaさん、早速ご回答ありがとうございます!
教えて頂いた方法で実行すると、下記のエラーになってしまいます。

実行時エラー'438':
オブジェクトは、このプロパティまたはメソッドをサポートしていません。

参照設定等、どこかにチェックが必要だったりするのでしょうか?

補足日時:2005/11/30 11:58
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A