[[20031006162734]] 『VBA:functionがうまく動きません』(まきりん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBA:functionがうまく動きません』(まきりん)

 教えてください!!
 基本が、理解まだ完全に出来ていない状態なのですが
 とりあえず今回、自分で関数を作ろうと試みました。

 function 名前(引数)
 if 条件 Then
 真の時返したい内容   →文字列なので""で括りました。
 Elseif 条件 Then
 上記が真以外の時(偽の時)返したい内容
 Elseif 条件 Then
 ・・・・
 Else 条件 Then
 最後まで偽の場合、返したい内容
 End if

 上記のように、入力して実行すると
 (=関数名(引数))
 subまたは、functionが必要です。という
 エラーメッセージが出ます。
 多分、基本的なところが理解できていないせいだと思いますが、
 よろしくご教示願います。


 End Function が無いのが原因ではないでしょうか?
 あと返したい内容は、関数名に戻す必要があります。

  Function 名前(引数 As Variant)
    :
   処理
   : 
    :
  名前 = 返したい内容
  End Function
 
  (INA)

 INAさんの、的確なアドバイスのおかげて
 無事、作った関数を利用できるようになりました。
 が・・・!!
 困った事に、思うような値が返ってな〜いっ(-_-;)
 これは、関数の問題というより、考え方のに問題があるような気がします。
 ワークシート関数のisblank()を利用するには
 if 引数=”isblank(引数)”then
 でOKでしょうか?
 もう一つ、ワークシート関数でよく使う$(絶対参照)って
 どうやって、指定すればいいのでしょうか?
 VBAとワークシートで使う関数って書き方とか出来る事とか
 違うんだろう〜なぁ。と思いつつ、
 まだ、ワークシート用の関数を作る感覚でしか
 考えられなくて・・・
 ポイントなどあれば教えてください。
 よろしくお願いします。(まきりん)

 ワークシート関数を使うときは、WorksheetFunctionを使用します。(基本的に・・)
 (例) 
 MsgBox Application.WorksheetFunction.Max(1, 2, 3)

 >ワークシート関数でよく使う$(絶対参照)って
 >どうやって、指定すればいいのでしょうか?
 =$A$1 とかですか?行番号と列番号に$を付けるだけです。 

  (INA)

 >ワークシート関数のisblank()を利用するには
 if Application.WorksheetFunction.isblank(引数)=true then
 といった案配に使います。
 または
 if 引数="" then と書きますが、通常VBAではこっちの方が一般的に使われてますわ。
 INAさんの仰有るようにWorksheetFunctionを使えばほとんどの関数が使えまっけど、
 それを使わんでも使える関数もそこそこありまっせぇ。例えばLenとかLeftとか、その
 他諸々の関数がおますわ。
 まぁ、ぼちぼち勉強なさって身ぃにつけていっておくんなはれ。
    ほな...(おいぼれ弥太郎)


 INAさん、おいぼれ弥太郎さん、ありがとうございます。
 ワークシート関数のVBAでの使い方、よく理解できました。
 で、まだ実践していないのですがこの話は次の段階として・・・
 またまた、困った事に!!
 絶対参照の件、回答にあったように値を返したいセルで
 =関数の名前($A$1,B1,C3)と、入力したら
 $$を入れる前は、エラーにならず、値が返ってきたのに
 #NAME?になってしまいました。
 で、さらにダブルクリックしてEscキーを押すと「0」が返ってきます。
 「0」を返す指示は一切していないはず・・・。
 なにか、ピンッと来ることは、ありませんか??
 もともと、返ってくる値は前回の話の通り意図通りではないのですが。
 スイマセン、説明が上手くなくて、
 自分でもちょっと頭の中がごちゃごちゃになっているので・・・。
 アドバイスお願いします!!
 (まきりん)

 上記の件、追伸
 一度、出来たのにできなくなるのは、おかしい!!と思い
 作った関数を一旦クリアーにして、ごく簡単な式をいれて
 再度、試してみました。(もちろん、関数名も変更しました)
 でも、同じく#NAME?になってしまうので、これはおかしいと思い
 さらに、シートを新しいブックにコピーして最初から作りな直しました。
 すると・・・
 上手く出来ました!!っと言いたい所なんですが、
 そのファイルを一度閉じてまた開いて操作(引数の数値を変更など)していると
 なんと、#NAME?が返ってきます。

 ど〜いう事なんでしょう???
 VBAの式自体は、一度滞りなく出来たので
 多分、一旦ファイルを閉じた事が原因?と思いますが・・・。
 原因、対処法共に分かりません。
 何が、いけないのでしょうか?

 ちなみに、最初からやり直した際に、計算式(条件)を考え直したので
 意図する値がきちんと、返ってくるようになり、
 「やったぁ〜」と思った矢先の出来事で困惑しています。
 アドバイスお願いします!!!
 (まきりん)

 追伸2
 関数の分類で、ユーザー関数を選択して入力する方法で
 上手く出来た時は、確かに関数名だけの表示で引数を入れる表示も
 でてきました。でも、上手くいかなくなった時の表示は

 "ファイル名.xls"!Module1.関数名

 と、なって引数を入れる表示もでません!
 (この関数には、引数はありません)とでます。

以上、です。よろしくお願いします。

 (まきりん)

 まきりんさん、こんにちわ
 そのコードは何処へ書いてまっか?
 まさか、シートモジュールに書き込んでえしまへんわなぁ。
 #NAME?と出るんはその間数を関数として認識してないっちゅう事ですさかい、関数の
 書き間違いか、認識でけへん所に書き込んでるとしか考えられまへんのやけど...。
    (ピンとけえへん おいぼれ弥太郎)

 おいぼれ弥太郎さん、お返事ありがとうございます。
 今回の件は、最初の質問内容とズレてきたので
 もう少し、アドバイスも含め良く考えて
 それでも、ダメだったら改めて新規で質問を立てます。
 その時は、またご協力お願いします。
 ちなみに、最初の質問はおかげ様でクリアーできました!(^^)!
 では、また。 (まきりん)

 おいぼれ弥太郎さんへ、ご報告!!
 (もう見ないかもしれないけど・・・)
 #NAMEと出る件、無事解決しました。
 「認識でけへん所」で、よ〜く考えたら・・・
 よく、見かける「マクロを有効にしますか?」ってダイアログ
 出てなかったなぁ〜と思って、セキュリティを「中」にして
 ファイルを開き直したら、今度はちゃんと聞かれました。
 「有効にします」で、無事解決(^_^;)
 弥太郎さんのヒントが役に立ちました。
 これで、やっとVBAが本格的に使えます。
 また、しょ〜もない事聞くと思いますが
 今後もよろしくお願いします。 (まきりん)


 >ワークシート関数を使うときは、WorksheetFunctionを使用します。(基本的に・・)
 上記の補足です。

 MsgBox Application.WorksheetFunction.Max(1, 2, 3) 
       ↓
 MsgBox Application.Max(1, 2, 3) 

 のように、たいていの場合、WorksheetFunctionを使わないでも使用することができます。 

   (INA)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.