- ベストアンサー
自作ファンクションの引数の参照
エクセルでオリジナルの関数を作るとき Public Sub abc(a as Range) ~ End Sub というようにレンジ型を引数にとった場合、例えばaにB5:E10を代入した時、各セル(aの中身)に入っている値を参照するにはどういう風に書いたらよいでしょうか? ちなみにバージョンはEXCEL2000です。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Function fnn(Rng As Range) As Double fnn= Rng.Cells(2, 1) End Function 上記が動きます。 C6:D8に 1 4 5 9 3 6 に入れて、=fnn(c6:d8)(""は付けない)をA1とかに入れると、5すなわちC7がえられます。 我々はCells(1,1)などを使いますが、A1を起点にする ことを略している(省略できている)からです。 上記のRngはC6:C8と範囲が狭いですが、やはりC6を起点にしてcellsプロパティが使えるわけです。 条件に合った1つ(関数は1つの値しか返せない)を掴まえるにはFor next でcells(i,j)を繰り回し判断すれば良いです。またはForEachも使えるでしょう。 Rng.Cells(3)と言う表現もあります。 Rng(4)もあります(D7の9になります)。
その他の回答 (1)
- nishi6
- ベストアンサー率67% (869/1280)
AAAで指定範囲を設定し、それを引数にしてBBBを呼び出しています。 参照ということで MsgBox で値とセル番地を表示しています。ご参考に。 Sub AAA() Dim rg As Range '指定範囲 Set rg = Range("B5:E10") 'BBBで指定範囲の値を参照してみる Call BBB(rg) End Sub Private Sub BBB(a As Range) Dim elm As Range '指定範囲内での1つのセル '***** for each を使った参照例。行列の順の参照になる ***** For Each elm In a MsgBox elm.Value & " address:" & elm.Address Next '***** 行・列を指定して参照例。2つのforで行・列の順は自由にできる ***** Dim eRow As Long '指定範囲内での表示する行 Dim eCol As Integer '指定範囲内での表示する列 For eCol = 1 To a.Columns.Count For eRow = 1 To a.Rows.Count MsgBox a.Cells(eRow, eCol).Value & " address:" & a.Cells(eRow, eCol).Address Next Next End Sub
補足
早速の回答ありがとうございます。 nishi6さんのサンプルコードによるとRange型はa.Cells(Row,Col).Valueで参照できるみたいですね。 もうちょっとくだけた内容で質問しますと 表題の例の場合B5を参照したければ a.Cells(1,1).Value、D8を参照したければ a.Cells(4,3).Value で良いということですよね?
お礼
なるほど、大変よく解りました。 ありがとうございました。