『プロパティやメソッド?を追加で登録したい』(VBA超超超初心者) お世話になります。 検索しても情報が得られなかったので質問させてください。 いま、シート上の複数セルにひとかたまりの情報が並んでいるとします。 例 A B C D E F 1 No1 100 No2 200 2 AAA 20 BBB 30 3 4 5 No3 300 No4 400 6 CCC 40 DDD 50 7 このとき、基準となるセルの1つ下の値(型番とします)を取りたいとき、 Range("A1").Offset(1, 0).Value というように書きますが、これを Range("A1").型番 というようにプロパティ?メソッド?みたいな感じで使いたいのですが、 どのように定義すればこのように使えるでしょうか。 また不可能な場合は、これに近い使い方ができる代替案等教えていただきたいと思います。 よろしくお願いいたします。 < 使用 Excel:Microsoft365、使用 OS:Windows10 > ---- プロパティやメソッドをユーザーが追加することはできません。 Function プロシージャを作成してください。 (xyz) 2023/11/28(火) 16:03:48 ---- xyz さん ありがとうございます。 では、Functionを用いて上記の様な使い方をしたいのですが、 実装方法を教えていただきたいです。 以下イメージ Function 型番() 型番 = (Rangeオブジェクト).Offset(1, 0).Value End function Debug.Print Range("A1").型番 よろしくお願いいたします。 (VBA超超超初心者) 2023/11/28(火) 16:29:52 ---- Function 型番(r As Range) As Variant 型番 = r.Offset(1, 0).Value End Function Debug.Print 型番(Range("A1")) です。 # 入門テキストを復習されたほうが効率がいいかも知れませんね。 (xyz) 2023/11/28(火) 17:08:39 ---- xyz さん すみません、Functionの使い方はわかるのですが、 それを用いて以下のような書き方をどのように実現できるかお聞きしたかったのです。 例 Debug.Print Range("A1").型番 レンジオブジェクト→種類の順に指定したい よろしくお願いいたします。 (VBA超超超初心者) 2023/11/28(火) 17:23:56 ---- > プロパティやメソッドをユーザーが追加することはできません。 と書きました。 Functionプロシージャは、そういうObject.method という使い方はできない、と言っているのです。 関数(引数)という形式のものを使うしかありません。 VBAは、 ・VB6というVisual Basicというプログラム言語(これはオブジェクト指向ではないです)に、 ・その上に、Excelのオブジェクト操作のオブジェクト指向的なものを追加したのです。 ユーザーがFunctionプロシージャを追加できますが、これはVB6の言語仕様によるしかないのです。 ですから、オブジェクト指向言語的なメソッドを追加することはできません。 VBAの基本テキストを持っていますか?もう一度復習してください。 (xyz) 2023/11/28(火) 18:04:41 ----  せいぜいクラス使って「それっぽく」表現することくらいしか出来ないと思いますね。 Rem [Class1]クラスモジュール------------------------------------------ Option Explicit Private ancCell As Range Public Property Get 基準となるセル() As Range Set 基準となるセル = ancCell End Property Public Property Set 基準となるセル(newCell As Range) Set ancCell = newCell End Property Public Property Get 型番() As Range If Not ancCell Is Nothing Then Set 型番 = ancCell.Offset(1) End Property Rem 標準モジュール--------------------------------------------------- Option Explicit Sub test() Dim c As New Class1 Set c.基準となるセル = Range("A1") Debug.Print c.型番.Address End Sub (白茶) 2023/11/28(火) 18:06:54 ---- VBAでもラムダ式やらデリゲートやらがサポートされる日が来れば、 ひょっとしたらもうちょっと簡素に表現出来るのかもしれませんが、 VB ラムダ式の使用 - Action, Func https://www.umayadia.com/VBStandard2/Standard34.htm 今のところサポートされてないです。 (白茶) 2023/11/28(火) 18:12:22 ---- xyz さん 回答ありがとうございました。 白茶 さん 回答ありがとうございます。 やはり、クラスを使ったやり方しかできなさそうなのですね。 ありがとうございます。 ただ、こういう書き方の方が直感的にわかりやすく、 メンテナンス性もいいと思うので、このやり方で組んでいきたいと思います。 また、ラムダ式のご紹介ありがとうございます。 VB .NETでは使用できるんですね。 VBAはベースが古いままなので、サポートされないのでしょうね ありがとうございました! (VBA超超超初心者) 2023/11/28(火) 18:21:48