• ベストアンサー

Findプロパティを取得できません

数日前マクロをはじめた初心者です。 "・・・Findプロパティを取得できません"というエラーの解決方法がわかりません。シートには以下の内容が記述されています。 -------------------------------------------------(以下シート) A列    B列    C列 空白   田中    北海道札幌市中央区宮の森12345 ・     鈴木    北海道札幌市中央区宮の森45678 ・     佐藤    北海道札幌市北区あいの里78956 AA列      AB列 1      北海道札幌市中央区 2      北海道札幌市北区 3      北海道札幌市東区 -------------------------------------------------(以上シート) B列(人名)のC列(住所)をAB列(地域)に対応したAA列(番号)で割り振りたいのです。 そこで以下のマクロを作りました。 -------------------------------------------------(以下マクロ) Sub macro1() Dim i As Integer, j As Integer i = 1 j = 1 Do While Cells(i, "B").Value <> "" If Application.WorksheetFunction.Find(Cells(j, "AB"), Cells(i, "C"), 1) = 1 Then Cells(i, "A") = Cells(j, "AA").Value i = i + 1 j = 1 Else j = j + 1 End If Loop End Sub -------------------------------------------------(以下マクロ) A列 1 1 2 と入る予定でつくったのですが、最期の 2 が入らずエラーとなります。 どこが間違いかわかりません。 ご教授願います。

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

  • ベストアンサー
  • hotosys
  • ベストアンサー率67% (97/143)
回答No.2

Application.WorksheetFunction.findは見つからない場合はエラーを返すので、on error などを使って見つからない場合の処理が必要だと思います。 またはApplication.WorksheetFunction.findの代わりにinstrで処理すれば見つからなくてもエラーは起きないので、 >If Application.WorksheetFunction.find(Cells(j, "AB"), Cells(i, "C"), 1) = 1 Then を If InStr(Cells(i, "C"), Cells(j, "AB")) = 1 Then に変更してはどうでしょうか?

tt000
質問者

お礼

ご指摘の  InStr で出来ました。こんな関数あったんですね。ありがとうございます。 ところで修正前のコードは何故エラーが出るのでしょうか。 findが見つからなかった場合のコードは後で付記するつもりだったのですが、本件のコードは問題無いとおもっていたのですが・・・。

その他の回答 (2)

  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.3

>ところで修正前のコードは何故エラーが出るのでしょうか。 >本件のコードは問題無いとおもっていたのですが すっきりしないと何でしょうから。。 3番目の佐藤さんの場合。 (1)Find("北海道札幌市中央区", "北海道札幌市北区あいの里78956", 1) (2)Find("北海道札幌市北区", "北海道札幌市北区あいの里78956", 1) 質問者は上記のように、(1)(2)の順に実行され、 (2)でヒットするからエラーは出ないはずと思われたのでしょうが、 先に実行される(1)ではヒットしないですよね。 ワークシート関数Findはヒットしないとエラーを返すので その(1)を実行したところでエラーが出てしまうわけです。 因みに、田中、鈴木は、最初のAB1の値でヒットするのでエラーが出ない。 以上。

tt000
質問者

お礼

あぁなるほど。。。非常に分かりやすいご説明感謝します。

  • BleuLune
  • ベストアンサー率57% (15/26)
回答No.1

この記述ではループするたびFindの検索範囲が変更されているため、エラーが発生しているでは?通常であれば検索範囲は不変ですよね。 質問文しか見ずに回答しています。あしからず。

関連するQ&A