Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3424 / 13644 ツリー ←次へ | 前へ→

【62324】検索時のエラー リーマンの涙 09/7/9(木) 6:44 質問[未読]
【62325】Re:検索時のエラー Yuki 09/7/9(木) 8:08 発言[未読]
【62326】Re:検索時のエラー kanabun 09/7/9(木) 10:25 発言[未読]
【62330】Re:検索時のエラー リーマンの涙 09/7/9(木) 21:31 お礼[未読]
【62331】Re:検索時のエラー kanabun 09/7/9(木) 21:38 発言[未読]
【62332】Re:検索時のエラー リーマンの涙 09/7/9(木) 21:48 お礼[未読]

【62324】検索時のエラー
質問  リーマンの涙  - 09/7/9(木) 6:44 -

引用なし
パスワード
    すいません。教えてください。VBA初級者です。

「住所録」というブックの中に「私」「仕事」「抽出」という3つのシートがあります。
で挨拶状を出そうと下記のようなマクロを組みました。がシート「仕事」のところで「形が一致しません」とマクロが中断され黄色く変わります。理由と修正箇所を教えてください。


前提条件
 ・ インプットボックスで住所に含まれる任意の単語を入力し「私」「仕事」の住所が入っている列(「私」はL列、「仕事」はAJ列です。)でその単語が含まれている氏名(いずれのシートもB列)の名前をシート「抽出」のB列に書き出す。
 ・ シート「私」「仕事」は上2行をタイトルとして使用
 ・ シート「抽出」1行目がタイトル
 ・ シート「仕事」は住所が入っていない行があるので並び替えのち検索する

’「私」シートの住所を検索
  aa=inputbox("住所に含まれる任意の単語を入力")
    fobj = CStr(aa)

   With Sheets("私").Range(Sheets("私").Cells(3, 12), Sheets("私").Cells(3, 12).End(xlDown))
     Set hit_obj = .Find(fobj, LookIn:=CStr(xlValues))
     If Not hit_obj Is Nothing Then
       firstaddress = hit_obj.Address
       Do
         j1 = Right(hit_obj.Address, (Len(hit_obj.Address) - 3))
         Sheets("抽出").range("B65536").end(xlup).offset(1,0).value = Sheets("私").Cells(j1, 2).Value
         Set hit_obj = .FindNext(hit_obj)
       Loop While Not hit_obj Is Nothing And hit_obj.Address <> firstaddrress
     End If
   End With
'「仕事」シートの住所を検索
  sheets("仕事").select
   rows("3:65536").select
    Selection.Sort Key1:=Range("AJ3"), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
    :=xlPinYin, DataOption1:=xlSortNormal

     fobj = CStr(aa)

   With Sheets("仕事").Range(Sheets("仕事").Cells(3, 42), Sheets("仕事").Cells(3, 42).End(xlDown))  'xldown= -4121
     Set hit_obj = .Find(fobj, LookIn:=CStr(xlValues))   'xlvalue= -4163
     If Not hit_obj Is Nothing Then
        firstaddress = hit_obj.Address
       Do
         j2 = Right(hit_obj.Address, (Len(hit_obj.Address) - 3))
         Sheets("抽出").range("B65536").end(xlup).offset(1,0).value = Sheets("仕事").Cells(j2, 2).Value  ’黄色に変色  xlup= -4162  j2=$35
         Set hit_obj = .FindNext(hit_obj)
       Loop While Not hit_obj Is Nothing And hit_obj.Address <> firstaddrress
     End If
   End With

という形で実行したところ「型が一致しません」と出て黄色く変色して中断されてしまいます。その際のそれぞれの値は後ろに記載している通りです。

となると
1. 「型が一致しない」とは?
2. シート「私」では問題なく実行できたのにシート「仕事」でエラーが出るのはなぜでしょう?
3. これを正しい構文にするとすればどこをどのように直せばよいのでしょうか?

よろしくお願いします。

【62325】Re:検索時のエラー
発言  Yuki  - 09/7/9(木) 8:08 -

引用なし
パスワード
   ▼リーマンの涙 さん:
こんにちは。

エラーになった行の j2 の値を調べてみましょう。
それとヘルプで
Option Explicitステートメントを読んでみましょう。
そして定義しましょう。
そうすれば今回のエラーも回避できると思います。

【62326】Re:検索時のエラー
発言  kanabun  - 09/7/9(木) 10:25 -

引用なし
パスワード
   ▼リーマンの涙 さん:
おじゃまします。

Yuki さんのアドバイスの通りだと思います。

あと、
>   j2 = Right(hit_obj.Address, (Len(hit_obj.Address) - 3))

検索でヒットしたセルの行番号が取得したいのなら、

    j2 = hit_obj.Row

で、十分かと?

【62330】Re:検索時のエラー
お礼  リーマンの涙  - 09/7/9(木) 21:31 -

引用なし
パスワード
   お二人ともありがとうございました。早いレスありがとうございました。職場のパソコンから投稿できずに遅くなってしまいました。

YUKIさん・・・
 やはり基本を忘れてはいけないということですね。。。片っ端から定義しまくりました。。。

kanabunさん・・・
 ありがとうございました。なるほど行だけ探すなら「.rows」でいけるんですか。。。
 いやぁ、すごい!

本当にありがとうございました。

【62331】Re:検索時のエラー
発言  kanabun  - 09/7/9(木) 21:38 -

引用なし
パスワード
   ▼リーマンの涙 さん:
> なるほど行だけ探すなら「.rows」でいけるんですか。。。

ちょっとちがいます。

  .Row プロパティ
です。

【62332】Re:検索時のエラー
お礼  リーマンの涙  - 09/7/9(木) 21:48 -

引用なし
パスワード
   ▼kanabun さん:
なるほど「 .Row プロパティ」ですね。。。
あした早速試してみます。

ありがとうございました!

 いやぁほんとに難しいですねぇ・・・

3424 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free