
いつもお世話になります
今、ひとつのシートにユーザ定義関数が二つ有って
それぞれの関数は定義されているセルの下に表を持っています
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
いつもありがとうございます
ちょっと分かりづらい説明になってしまいましたが
よろしくお願い申し上げます
No.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 は引数で受け取ってもいないし、定義もされていないようですけれど、グローバル変数として定義でもされているのでしょうか?
何を計算するユーザ定義関数なのかわかりませんけれど、ユーザ定義関数にしてはなんだか不思議な構成になっているような気がしますけれど・・・
すみません、早々と
本当にいつもありがとうございます
Row0はグローバル変数です
ByRefは省略するとByRefになると思います
今朝、
SearchOrder:=xlByColumnsをSearchOrder:=xlByRowsにしたところ
うまく行ったので良しとしました
自分はユーザ定義関数のプログラムは初めてだったので、元々の形のままに
して修正したので私もはっきり理解していません
ごめんなさい
昨夜、帰り際の投稿だったのでちょっと質問が乱暴でしたね
ごめんなさい
これからもよろしくお願いいたします
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ワークシート内 検索 HITしたら すべて選択する 6 2021/11/11 22:50
- Visual Basic(VBA) 空のシートに関数を入れたい 2 2021/12/03 15:08
- Visual Basic(VBA) Excel VABについて 1.xlsm、VBA.xlsm2つのファイルがあり、1.xlsmにてVB 6 2021/12/13 17:46
- Visual Basic(VBA) EXCEL VBA シート貼り付け 3 2021/11/15 12:33
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) VBA Find でオートメーションエラー(エラー440)が出ました 1 2021/11/09 21:22
- Visual Basic(VBA) サブフォルダ含むすべてのフォルダの Excel 検索 4 2021/12/13 09:33
- Visual Basic(VBA) シート名でファイル検索する 2 2021/11/30 17:05
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) シート名をフォルダ名に変更 1 2021/12/01 15:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
排他的論理和 BCC(水平パリテ...
-
VBAの再計算が反映されない件に...
-
エクセルで特定のセルのみを任...
-
指定した数のます目の合計値が...
-
65536は2の何乗なのでしょうか?
-
数値計算の高速化 (cos, sin, exp)
-
EXCELなどで「返す」という表現
-
駅間の距離を求め運賃計算するJ...
-
CRC8を教えてください
-
C#の演算でオーバーフローして...
-
0xf0=256?
-
バッチファイルでウインドウを...
-
モジュラス103の計算とは何でし...
-
Visual C++でdebugとreleaseで...
-
理由がわかりません・・・
-
VBでReplace
-
matlabで計算終了
-
for文である数の倍数になるまで...
-
Nの階乗
-
時間の足し算 C++Builder
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
VBAの再計算が反映されない件に...
-
排他的論理和 BCC(水平パリテ...
-
EXCELなどで「返す」という表現
-
バッチファイルでウインドウを...
-
エクセルで特定のセルのみを任...
-
matlabで計算終了
-
モジュラス103の計算とは何でし...
-
変化させるセルが変化しない
-
数値計算の高速化 (cos, sin, exp)
-
CとFORTRANの計算速度はどちら...
-
モジュロ
-
スレッド処理からダイアログを...
-
時間(ミリ秒を含む)の引き算
-
VB6で正確なミリ秒を計測したい...
-
60進数の四則計算
-
PHPとJavaでSHA256の結果を同じ...
-
C言語についてです。 再帰を使...
-
なぜオーバーフローになるので...
-
VBA入力フォームで労働時間の計...
おすすめ情報