こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excel ワークシート関数をVBAで使用したい

お世話になります。
Excelでワークシート関数をVBAで使用したいのですが、うまくいきませんでした。
関数ですと「ISERROR(FIND(V$10,R$11))=FALSE」のような式をVBA上で使用したいと思い、以下のようにコードを書いてみましたが
If Application.WorksheetFunction.IsError(Application.WorksheetFunction.Find(Cells(i, j), Cells(i, 18))) = False Then
Cells(i, j).Select
End If
「実行時エラー'1004' WorksheetFunction クラスのFindプロパティを取得できません」となります。
入れ子が問題なのでしょうか。

よろしくお願いします。

投稿日時 - 2016-08-07 15:03:52

QNo.9212151

困ってます

質問者が選んだベストアンサー

質問者はVBA熟達の人と思われないのに、FINDに
・2種類あること
・みつかったかどうか、の判定の仕方を、
解説書やWEBで勉強して質問していますか?
安易に自分の気の向くままに他類似と思ったケースとのるいす類推などで、コードを書いていないか。この能力・態度も大切だが、役立たない場合も相当多い。
ーー
エクセル関数のFIND関数は文字列の中でどの位置にあるかを探す関数です。
むしろ、BasicのINSTR関数と似ている.だからあまり使われないかもと思う。
エクセルの関数のFINDでは
A1セルの値が「大阪市北区芝田町」の時、=FIND("芝田",A1)  は6
を返します。
VBAで
Sub test01()
x = Application.WorksheetFunction.Find("芝田町", Range("A1"))
MsgBox x
End Sub
でも 6
を返します。
ーー
一方エクセルVBAのFindメソッドは
セルB1:B5に(すなわちセル群のどのセルにあるかを見る、ので前記とは違う)
柴田町
芝田町
稲荷町
門前
東田上
の時
Sub test02()
x = Range("B1:B5").Find("芝田町").Row
MsgBox x
End Sub
は(2)行目のセルを指します。
基本的な機能が違います。
ーー
下記のベストアンサーをよく読んでください
http://okwave.jp/qa/q8008851.html
ーー
エラーの対処は
(1)Find関数
Sub test031()
x = Application.WorksheetFunction.Find("芝田町", Range("A2"))
MsgBox x
End Sub
でエラーが起こる場合は
Sub test03()
On Error GoTo err1
x = Application.WorksheetFunction.Find("芝田町", Range("A2"))
MsgBox x
err1:
MsgBox "FIND関数で検索語が見つかりません"
Exit Sub
End Sub
状況上、回復続行はむつかしいと思うが、どう処理するかは場合による。
(2)Findメソッド
例は
http://excel-ubara.com/excelvba1/EXCELVBA398.html
Set rngFind = Range("A1:B100").Find(What:="A", _
              LookIn:=xlValues, _
              LookAt:=xlPart, _
              SearchOrder:=xlByColumns, _
              SearchDirection:=xlNext, _
              MatchCase:=False, _
              MatchByte:=False)
If Not rngFind Is Nothing Then
  MsgBox "見つかった" & vbLf & rngFind.Address
Else
MsgBox "見つかりません" & vbLf & ”次の検索語を検索します。」
End If
のようなはんていをします。

投稿日時 - 2016-08-07 18:07:47

お礼

詳しい解説ありがとうございます。
理解できました。

投稿日時 - 2016-08-08 00:23:26

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

InStr関数利用すればいかがですか

If InStr(Cells(i, 18), Cells(i, j)) > 0 Then
Cells(i, j).Select
End If

投稿日時 - 2016-08-07 17:12:54

お礼

ありがとうございました。できました。

投稿日時 - 2016-08-08 00:23:21

あなたにオススメの質問