質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

5660閲覧

VBA 任意セルに入力した「ユーザ関数」に自身のセル座標を取得させたい

wkbiz

総合スコア154

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/10/12 07:39

よろしくおねがいします。

例えば下図のようにユーザ定義関数userfunction数式を入力したとします。
イメージ説明
このときuserfunctionの数式はセル「B2」に入っていますが、
これをユーザ定義関数自体に認識させたいのですが、方法はありますでしょうか。

vba

1Sub sandbox() 2 Dim s As String 3 r = ActiveCell.Row 4 c = ActiveCell.Column 5 s = ActiveCell.Address 6 userfunction (s) 7End Sub 8Public Function userfunction(s As String) 9 Range(s).Value = 100 + Range(s).Value 10End Function

上記のようなプロシージャではアクティブセル(つまりカーソルが指すセル座標)を取得してuserfunctionに引数として与えて処理していますので、プロシージャが座標データを持っているため処理ができます。

しかし実現したいのは、カーソルが例えばA1にあっても、B2に入力した数式(ユーザ定義関数)は自身が置かれた座標を取得して処理をさせたいのです。

よろしくおねがいします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

=userfunction(ADDRESS(ROW(),COLUMN()))

VBA

1Public Function userfunction(ars As String) 2 Debug.peint ars 3End Function

投稿2020/10/12 07:49

kuma_kuma_

総合スコア2506

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wkbiz

2020/10/12 15:02

引数にExcel関数で座標データを入れれば、ってことですね。それは思いつかなかったです。ありがとうございました。
guest

0

VBA ユーザ定義関数自身のセルのアドレスを取得する - nKB

上記を参考に。

ただし、自身の値を参照して、変更すると循環参照になるのでエラーになるかと。

何をしたいのかを提示した方かいいでしょう。


自身のアドレスを表示するだけなら、セルに下記のように設定すればいいだけ。
=ADDRESS(ROW(),COLUMN())

それをわさわざ、
=userfunction(ADDRESS(ROW(),COLUMN()))
と複雑にすることに何の意味があるのか?

上記のリンク先の関数を使えば、
=GetAddr()
で自身のアドレスを表示できます。

vba

1Function GetAddr() 2 GetAddr = Application.ThisCell.Address(False, False, xlA1) 3End Function

実際に何をしたいのか明示すべきでしょう。

Excel のユーザー定義関数の制限について

上記の宣言が理解できているなら、自身のセルを取得しても、できることには限界があります。
質問のコードを自身のセルに変更したら循環参照エラーです。

投稿2020/10/12 07:48

編集2020/10/12 12:44
hatena19

総合スコア34075

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wkbiz

2020/10/12 11:04

ご回答ありがとうございます。 数式を動的に扱いたい、何をしたいか?を説明すると簡易で雑な説明ですがこのようになります。
hatena19

2020/10/12 11:15

何をしたいのか不明ですが、Application.ThisCell を使った方か簡単ではないですか。
wkbiz

2020/10/12 15:03

ご丁寧にありがとうございます。参考にさせて頂きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問