• 締切済み

VBAのマクロをシート内の式で使いたい

VBAで、マクロの関数をエクセルの式で使うことは可能でしょうか? 引数や戻り値の制約も知りたいです。 引数はExcel側ではセル値B1とかになりますが、VBA側では何か対策でもあるのでしょうか? 'VBA public function test(byval a as integer, byval b as integer) as integer test = a + b end function 'エクセル側 C1セルに以下の式 =test(A1, B1)

みんなの回答

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.5

>引数や戻り値の制約も知りたいです  [回答番号:No.1] の akina_line さんも触れていらっしゃいますが、変数を宣言する場合のデータ型が問題ですね。 >public function test(byval a as integer, byval b as integer) as integer としていらっしゃいますので、[test 関数] の「引数 [a]、[b] 」及び「返り値」はいずれも [整数型 (Integer)] ですね。  [整数型 (Integer)] というのは、VBEの [Function ステートメント] のヘルプを見ると ------------------------------------------------------------------- -32,768 ~ 32,767 の範囲の 2 バイトの整数として格納される、整数の変数を保持するデータ型。整数型 (Integer) は、列挙値を表す場合にも使用します。Visual Basic では、型宣言文字 % は、整数型 (Integer) を表します。 ------------------------------------------------------------------- と出ております。  ちなみに、 ------------------------------------------------------------------- ByVal:その引数が、値渡しで渡されることを示します。 ByRef:その引数が、参照渡しで渡されることを示します。Visual Basic では、既定値は ByRef です。 ------------------------------------------------------------------- ということですが、そういうことも、一通り理解しておくことも大切ですね。  こういうことは、WEBページで検索して調べるのも一つの手ですが、VBEで「Function」の部分にカーソルを持って行って [F1] キーを押下し [VBA - Function] を選択すると [Function ステートメント] のヘルプが開きます。  そこの [指定項目] = [type] の [内容] に「Function プロシージャから返る値のデータ型」などについて詳しく載っております。[整数型 (Integer)] などの詳細もそこからリンク先を開けるようになっておりますので、データ型について詳しい内容を調べたいときには、「Function」や「As」の位置で [F1] キーを押下してください。  下記のページにデータ型の一覧が出ておりますので、ご参考までに。 ●VBA活用辞典 変数の宣言 http://www8.plala.or.jp/Score/ExlVba_03_01.htm

  • A88No8
  • ベストアンサー率52% (836/1606)
回答No.4

#3のおまけです。ご参考まで。

  • A88No8
  • ベストアンサー率52% (836/1606)
回答No.3

#2です。 ごめんなさい。結果は 5 ではなくて 6 でした。

  • A88No8
  • ベストアンサー率52% (836/1606)
回答No.2

こんにちは  質問者さんの式をそのままセルで使ってみました。  整数の時は、当然整数の値が返り、実数の時は小数が切り捨てられた結果が返りました。 A1=2.25 B1=3.5 =test(A1,B1) 表示は、5 。

この投稿のマルチメディアは削除されているためご覧いただけません。
  • akina_line
  • ベストアンサー率34% (1124/3287)
回答No.1

こんにちは。  >マクロの関数をエクセルの式で使うことは可能でしょうか?  可能です。  >引数はExcel側ではセル値B1とかになりますが、VBA側では何か対策でもあるのでしょうか?  セルをオブジェクトとして取り扱いたければ、VBAでそのように宣言してください。(上記の「as integer」を受けたい型に変えます。) 戻り値の型もinteger以外でも可能と思いますが、オブジェクトは無理かも。 では。