電子書籍の厳選無料作品が豊富!

いつもお世話になります

今、ひとつのシートにユーザ定義関数が二つ有って
それぞれの関数は定義されているセルの下に表を持っています

Application.Volatileを使って自動計算をさせ
Row0 = Application.ThisCell.Row
sht.Cells(Row0, 1).Activate
Call FindColumnWhole("周期", Row1, Col1)
その関数以下の行から検索させていますが
どうしても上の表の文字を検索してしまいます
Afterが機能しないので困っています
もし分かりましたら教えてください

なお、自動計算にはこんな定義もしています
Dim targetCell As Range
Set targetCell = Application.Caller
Set sht = targetCell.Parent

また、Findのサブルーチンは以下のようにしています
Sub FindColumnWhole(ByVal SearchM As String, Findrow As Integer, Findcol As Integer)
Dim FoundCell As Range, FirstCell As Range, Target As Range
nError = True
Set FoundCell = Cells.Find(what:=SearchM, After:=Cells(Row0, 1), LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
MatchCase:=False, MatchByte:=False, SearchFormat:=False)

If FoundCell Is Nothing Then
'MsgBox "検索文字(" + SearchM + ")が見つかりません"
nError = False
Exit Sub
Else
Set FirstCell = FoundCell
Set Target = FoundCell
Findrow = FoundCell.Row
Findcol = FoundCell.Column
End If
End Sub

いつもありがとうございます
ちょっと分かりづらい説明になってしまいましたが
よろしくお願い申し上げます

A 回答 (1件)

こんばんは



省略が多くてほとんどわかりませんけれど・・・

呼び出し側が、
>Call FindColumnWhole("周期", Row1, Col1)
となっていますが、変数 Row1、Col1 をどのように設定しているのか不明です。
直上に Row0 を定義している部分は見受けられますが・・・

これに対してサブルーチン側では、
>Sub FindColumnWhole(
>ByVal SearchM As String, Findrow As Integer, Findcol As Integer)
として、行、列(?)を Findrow、Findcol として受け取るようになっていますけれど、想像するところ、これらは戻り値を受け取るための引数でしょうか?
もしそうなら、ByRefで定義しておかないと受け渡せないのでは?

それよりも、実際のFindメソッドで、
>Set FoundCell = Cells.Find(what:=SearchM, After:=Cells(Row0, 1)~~
となっていますが、Afterで指定している Cells(Row0, 1) の Row0 は引数で受け取ってもいないし、定義もされていないようですけれど、グローバル変数として定義でもされているのでしょうか?


何を計算するユーザ定義関数なのかわかりませんけれど、ユーザ定義関数にしてはなんだか不思議な構成になっているような気がしますけれど・・・
    • good
    • 0
この回答へのお礼

すみません、早々と
本当にいつもありがとうございます

Row0はグローバル変数です
ByRefは省略するとByRefになると思います
今朝、
SearchOrder:=xlByColumnsをSearchOrder:=xlByRowsにしたところ
うまく行ったので良しとしました

自分はユーザ定義関数のプログラムは初めてだったので、元々の形のままに
して修正したので私もはっきり理解していません
ごめんなさい

昨夜、帰り際の投稿だったのでちょっと質問が乱暴でしたね
ごめんなさい
これからもよろしくお願いいたします

お礼日時:2023/09/14 10:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!