• ベストアンサー

セル範囲を返す関数

次のようにしますと「型が一致してません」エラーになってしまいます。 どうしたらセル範囲を返す関数が作れますか? Public Function inuinu() As Range Set inuinu = Range(Cells(1, 1), Cells(3, 3)) 'Debug.Print inuinu.Count End Function 返値にAreasの指定もしてみましたが巧くいきませんでした。

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

  • ベストアンサー
  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.3

>?inuinu >としてみたら「型が一致しません」とエラー表示されてしまう   ? inuinu は   ? Range("A1:C3")  即ち   ? Range("A1:C3").Value と同じでValueプロパティが省略されていると見なされる。 ということは、複数のセルの値を同時に表示させようとしていることになるのでエラーになる。 但し、inuinuがセル範囲ではなく、セルをひとつ返すとき(例えば、B5だけ返す場合)はエラーにはならないで、その返されたセルの値が表示される。 (結論) inuinu関数から返されたセル範囲のセルの数を表示させたいなら、Countプロパティを省略しては拙いということです。   ? inuinu.Count とか   ? inuinu.Cells.Count 以上。  

SariGEnNu
質問者

お礼

ありがとうございます。 おかげさまでVBAのメカニズムが理解できました。

その他の回答 (2)

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

>?inuinu としてみたら「型が一致しません」とエラー表示されてしまいました。 inuinu だけならエラーになりませんよ。

SariGEnNu
質問者

お礼

ありがとうございます。 おかげさまでかなり理解できました。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

何をしたいのか解りませんが、提示されたコードを貼付けた後、下記のコードを実行したらアドレスを取得できましたよ。 Sub test() MsgBox inuinu.Address End Sub

SariGEnNu
質問者

お礼

ありがとうございます。 hana-hana3さんのご回答のようにしてみたらこれは何のエラーもなく実行できました。 最終的にやりたいことは複雑なセル範囲のセルの個数を返す関数ですが 私は、Sub test()を介さずに、イミディエイトウィンドウから直接 ?inuinu としてみたら「型が一致しません」とエラー表示されてしまいました。 なぜ、このようなことが起きるのだろうか疑問に思っています。