Excel VBA質問箱 IV

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

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


60554 / 76732 ←次へ | 前へ→

【20816】Re:エラーの回避について
発言  ichinose  - 04/12/21(火) 0:23 -

引用なし
パスワード
   ▼VBA初心者 さん:
こんばんは。

>いつもスイマセンが、Do Loopを使用して行が空白になるまで検索するマクロをくんでみました。もし見付らなかったら、
>エラーとして回避して、次の文字を検索しようとしたのですが、1回目は良いのですが、2回目になるとデバックエラーが出てしまいます。
>エラーって1回しか回避できないしょうか?
>もし、良い回避のさせ方があれば教えて下さい。
>
>
>Sub 検索()
>
>Dim i As Integer
>
>i = 2
>Sheets("検索結果").Select
>
>Do Until Cells(i, 1) = ""
>
>ラベル名 = Cells(i, 1) '検索する文字
>
>Sheets("検索").Select
>
>On Error GoTo ERR
>Cells.Find(What:=ラベル名, After:=ActiveCell, LookIn:=xlFormulas, _
>    LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
>    MatchCase:=False).Activate
>
>'ラベル名の右にアドレスが記入されている。
>ActiveCell.Offset(0, 1).Activate
>ActiveCell.Copy
>
>Sheets("検索結果").Select
>Cells(i, 2).Select
>Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
>    False, Transpose:=False
>GoTo 次へ
>
>ERR:
>Sheets("検索結果").Select
>Cells(i, 2) = ""
>次へ:
>
>i = i + 1 '行数カウンタ
>Loop
>
>End Sub

以下のコードで試してみて下さい。
'=======================================================
Sub 検索()
  Dim sht1 As Worksheet
  Dim sht2 As Worksheet
  Dim f_rng As Range
  Dim i As Integer
  Set sht1 = Worksheets("検索結果")
  Set sht2 = Worksheets("検索")
  i = 2
  Do Until sht1.Cells(i, 1).Value = ""
   ラベル名 = sht1.Cells(i, 1).Value '検索する文字
   Set f_rng = sht2.Cells.Find(What:=ラベル名, _
            After:=ActiveCell, LookIn:=xlFormulas, _
            LookAt:=xlWhole, SearchOrder:=xlByRows, _
            SearchDirection:=xlNext, _
            MatchCase:=False)
   If Not f_rng Is Nothing Then
     sht1.Cells(i, 2).Value = f_rng.Offset(0, 1).Value
   Else '見つからなかった場合
     sht1.Cells(i, 2).Value = ""
     End If
   i = i + 1 '行数カウンタ
   Loop
  Set sht1 = Nothing
  Set sht2 = Nothing
  Set f_rng = Nothing
End Sub

・かなり事がActivateなしでも可能です
・理由が無い限り、Cells()の後ろには、
 プロパティ(この場合はValue)を付けた方が良いと思いますよ。
・GOTO文は、否定はしませんが、見せていただいたような使用方法には
 私は、反対です。コードがもっと複雑になった場合、メンテナンスが非常に
 困難になりやすいです(アセンブラを見ているのでは?なんて錯覚する程、
 わかりにくくなってしまう場合もありますよ)。

気がついた点を記述しました。
投稿したコードで確認してみて下さい。
2 hits

【20815】エラーの回避について VBA初心者 04/12/20(月) 23:18 質問
【20816】Re:エラーの回避について ichinose 04/12/21(火) 0:23 発言
【20839】Re:エラーの回避について VBA初心者 04/12/21(火) 23:18 お礼

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