アプリ版:「スタンプのみでお礼する」機能のリリースについて

数日前マクロをはじめた初心者です。

"・・・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 が入らずエラーとなります。
どこが間違いかわかりません。
ご教授願います。

A 回答 (3件)

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
に変更してはどうでしょうか?
    • good
    • 0
この回答へのお礼

ご指摘の  InStr で出来ました。こんな関数あったんですね。ありがとうございます。

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

お礼日時:2009/01/02 20:26

>ところで修正前のコードは何故エラーが出るのでしょうか。


>本件のコードは問題無いとおもっていたのですが

すっきりしないと何でしょうから。。

3番目の佐藤さんの場合。

(1)Find("北海道札幌市中央区", "北海道札幌市北区あいの里78956", 1)
(2)Find("北海道札幌市北区", "北海道札幌市北区あいの里78956", 1)

質問者は上記のように、(1)(2)の順に実行され、
(2)でヒットするからエラーは出ないはずと思われたのでしょうが、
先に実行される(1)ではヒットしないですよね。
ワークシート関数Findはヒットしないとエラーを返すので
その(1)を実行したところでエラーが出てしまうわけです。

因みに、田中、鈴木は、最初のAB1の値でヒットするのでエラーが出ない。

以上。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/01/03 16:35

この記述ではループするたびFindの検索範囲が変更されているため、エラーが発生しているでは?通常であれば検索範囲は不変ですよね。


質問文しか見ずに回答しています。あしからず。
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A