質問: ws2.Range(ws2.Cells(i, 4), ws2.Cells(i, 9)).Value Next End Sub ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/f84b77ef1df266b42a081ad27c82c1c1.png) ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/adbee23f7bf4eb59193ea46c236dab6d.png)
回答: なぜかはよくわかりませんが(動作確認してないので)、 ステップインで1行づつ実行しながら、 ローカルウィンドウでそれぞれの変数の値が期待通りに、 変化しているかを確認したらわかるかと思います。 参考サイト>> プロパティ、メソッドの探り方 マクロ記録とF1のHelpを使う ``` Sub test2() Const cmyCCount As Long = 6 Dim rngListB As Range Dim rngTable As Range Dim c As Range With Worksheets("(B社)管理台帳").Range("B9").CurrentRegion Set rngListB = Intersect(.Cells, .Offset(1)) End With With Worksheets("管理台帳").Range("B9").CurrentRegion Set rngTable = Intersect(.Cells, .Offset(1)) End With For Each c In rngTable.Columns(2).Cells If Not IsEmpty(c.Value) Then '値が空白でない時に処理 r = 0 '変数の初期化 On Error Resume Next r = WorksheetFunction.Match(c.Value, rngListB.Columns(2), 0) On Error GoTo 0 If r > 0 Then c.Offset(, 1).Resize(, cmyCCount).Value _ = rngListB.Cells(r, 3).Resize(, cmyCCount).Value End If End If Next End Sub ``` ポイントとしては、 1)on errorステートメントは必要以外の範囲に限定して適用してください。 エラーを全体で無視すると、必要な時に不具合の原因が分からなくなります。 2)If文で不要な処理は除外しましょう。 無駄なループを減らし処理速度が改善します。 3)変数を使いまわす時は初期化を忘れずに。 前の値が残ったままだと、意図しない動作の原因になります。 4)セルの位置は、指定のセルからの相対位置でも示せます。 一旦、変数にセル範囲を取り込んだなら、 改めてシート全体の位置から示さなくても、 変数にあるセルを基準に相対位置で示せるといいと思いました。 注)サンプルコードは、動作確認していません。 上手く動かなければごめんなさいです。 参考になれば。。。