こんばんは、数時間考えても解決できなかったため質問させていただきます。
下に表と問題のコードを載せています。
表から、「あいう」を検索し、結果のセルに「はじめ」or「おわり」が含まれていたらそのセル位置をRange型で返す関数を作ったのですが、最後の「END FUNCTION」の部分で『実行時エラー '91': オブジェクト変数または With ブロック変数が設定されていません。』というエラーが出ます。
Range型を代入する際は"set"を頭につけるというのは下記コード内では全てやっているはずですが、このエラーの原因はなんでしょうか…?
必要な変数の型は間違ってないように見えるのですが、「END FUNCTION」でエラーがでるということは、上手く値を返せてないということでしょうか?
A | B | C | |
---|---|---|---|
1 | |||
2 | あいう はじめ | 6 | |
3 | あいう おわり | 10 |
vba
1' 計算結果の表示処理 2Sub displayResult() 3 ' 開始セル、終了セルの場所を格納する変数を宣言 4 Dim 開始セル As Range, 終了セル As Range 5 ' 計算に必要な値が格納されているセルを検索 6 開始セル = fnSchWord("あいう", "はじめ") 7 終了セル = fnSchWord("あいう", "おわり") 8 ' 両方とも結果ありの場合、計算結果を表示 9 If Not 開始セル Is Nothing And Not 終了セル Is Nothing Then 10 ' C3セルに計算結果を表示 11 Range("C3").Value = 終了セル.Offset(1, 0).Value - 開始セル.Offset(1, 0).Value 12 End If 13End Sub 14 15' A列からWord1を検索し、そのセルにWord2が含まれている場合、セルの場所を返す処理 16Function fnSchWord(ByVal Word1 As String, ByVal Word2 As String) As Range 17 ' 変数宣言 18 Dim rngSearchPlace As Range, rngFirstCell As Range 19 ' A列からWord1を検索 20 Set rngSearchPlace = Range("A:A").Find(What:=Word1, LookAt:=xlPart) 21 ' 結果有無判定 22 If Not rngSearchPlace Is Nothing Then 23 ' 比較用に1つめのセルの場所を保管 24 Set rngFirstCell = rngSearchPlace 25 ' ループで検索 26 Do 27 ' 検索したセルにWord2が含まれているか 28 If InStr(rngSearchPlace.Text, Word2) > 0 Then 29 ' そのワードの場所を返す 30 Set fnSchWord = rngSearchPlace 31 End If 32 ' 次のWord1を検索してセルの場所を代入 33 Set rngSearchPlace = Range("A:A").FindNext(rngSearchPlace) 34 ' セルのアドレスが同じになった場合、ループを抜ける 35 Loop While rngSearchPlace.Address <> rngFirstCell.Address 36 Else 37 ' 結果がない場合の処理 38 Debug.Print Word1 & "の検索結果がありません" 39 End If 40 41End Function

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/09 00:24
2019/02/09 01:38