- ベストアンサー
オブジェクト、プロパティ、メソッドの関係
環境:OS.Win2000、Excel2000VBA プロパティやメソッドの呼び出し方法に疑問があります。 ExcelのVBAで以下の動作は確認しています。(例1) Dim xlApp As Application Dim xlBook As Worksheet '置換 xlApp.ActiveCell.Replace what:="A", replacement:="B", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, MatchByte:=False '検索 Set Oret = xlBook.Application.Cells.Find(what:="A", After:=ActiveCell, _ LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, _ SearchDirection:=xlNext, MatchCase:=False, MatchByte:=False) 疑問に思っているのは「xlApp.ActiveCell.Replace」の”Replaceメソッド”を オブジェクトブラウザで調べるとRangeオブジェクトと、WorksheetFunctionオブ ジェクトにしか含まれないように受け取れます。またヘルプの「対象」を見ても Replaceが含まれているのは二つしかありません。ようするに以下の二通りでし か使えないように思えるのです。 Dim A As Range Dim B As WorksheetFunction A.Replace ~ B.Replace ~ しかし実際には(例1)のようにApplicationオブジェクトでも”Replaceメ ソッド”を使えます。”Replace関数”を見てみても引数を見ると”Replace メソッド”です。いまひとつ理解が浅いため目的の動作をさせるのにどのオ ブジェクトからメソッドを呼べば良いのか分かりません。基本的な事なのか もしれませんが、ぜひご回答くださいよろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> Set xlActiveCell = xlApp.ActiveCell このような記述はよく出てきますが、あまり理解できていません。 これは、xlApp.ActiveCellの参照をxlActiveCellに入れています。 つまり、xlActiveCellとxlApp.ActiveCellが指し示す内容は同じということです。 なので、 xlApp.ActiveCell.Replace~ と、 xlActiveCell.Replace~ が、同じということになります。 >> プロパティ、メソッドという用語はわかりますか? >はい、わかります。 ということであれば、 「ActiveCellは、Applicationクラスのプロパティです。」 というのもOKですよね。 で、そのプロパティが指す値がアクティブなセルであり、データ型がRangeオブジェクトであるということなんですが、OKでしょうか?
その他の回答 (3)
- hayahayahaya
- ベストアンサー率36% (41/113)
関連付けているというのではなく、プロパティーでの戻り値がRangeオブジェクトなので、.Replaceの親オブジェクトはRangeオブジェクトになるということです。 Dim A As Range set A = xlApp.ActiveCell になりますよね。 xlApp は "Application"オブジェクト xlApp.ActiveCell は "Range"オブジェクト です。 ************ 内部的には Poperty Get ActiveCell as Range Dim A As Range ...... Set ActiveCell = A End property みたいなものです。
お礼
理解できました!ありがとうございます!
- taka_tetsu
- ベストアンサー率65% (1020/1553)
Dim xlApp As Application Set xlApp = CreateObject("Excel.Application") xlApp.ActiveCell.Replace~ は、 Dim xlApp As Application Dim xlActiveCell As Range Set xlApp = CreateObject("Excel.Application") Set xlActiveCell = xlApp.ActiveCell xlActiveCell.Replace~ と、記述可能なことはわかりますか? >となっていますが、「Property ActiveCell As Range」ということは >ApplicationクラスにRangeクラスをFriend(?)で関連づけていると >言うことになるのでしょうか? プロパティ、メソッドという用語はわかりますか?
補足
回答ありがとうございます。 > Set xlApp = CreateObject("Excel.Application") > Set xlActiveCell = xlApp.ActiveCell このような記述はよく出てきますが、あまり理解できていません。 > プロパティ、メソッドという用語はわかりますか? はい、わかります。
- hayahayahaya
- ベストアンサー率36% (41/113)
”ActiveCell”は”Rangeオブジェクト”です。 よって、xlApp.ActiveCell.Replace は Dim A As Range A.Replace ~ と同意ですよ。 ActiveCellが何オブジェクトか調べてみましょう。
補足
早速の回答ありがとうございます。 hayahayahayaさんのご指摘のようにActiveCellのオブジェクトはRange ですが Dim xlApp As Application と宣言して Set xlApp = CreateObject("Excel.Application") とすると xlAppはエクセルのApplicationクラスを参照している事になるんですよ ね?実際に上記のステップの後、xlsファイルをOpenして下記の記述をし ても置換出来てしまいます。 xlApp.ActiveCell.Replace~ しかし上記のようにした時は”Range”オブジェクトになっているんで すか?オブジェクトブラウザでApplicationクラスのメンバActiveCell を見ると Property ActiveCell As Range 読み取り専用 Excel.Application のメンバ となっていますが、「Property ActiveCell As Range」ということは ApplicationクラスにRangeクラスをFriend(?)で関連づけていると 言うことになるのでしょうか?
お礼
理解できました!ありがとうございます!