電子書籍の厳選無料作品が豊富!

全く同じ形式の複数のシートからVLOOKUPのように要素を抽出して、
同じ形式の”貼り付け先”シートに転記するマクロを組んでいます。

その中で、下記のコードの中の➀、➁の順番を逆にしたいと考えています。
理由は、先にii = ii + 1と書いてしまうと、➁の実行時にスキップされてしまう
セルが出てくるためです。

その場合、If IsError(i) Thenの部分(→(i)が真の場合、という内容にしたい)、
およびそれ以降の
ii = ii + 1
Else
.Cells(ii, 10).Value = prefRng(i).Offset(, 4).Value
End If
の部分は、どのように書き換えたら良いでしょうか。

お手数ですが、ぜひご教示頂きたく、お願い致します。

-------------------------------------------------------------------------------
Sub Test()

Dim prefRng As Range
Dim i, ii As Long
Dim K As Long
Dim Worksheet As Worksheet

For K = 4 To Worksheets.Count
Worksheets(K).Activate
Set prefRng = ActiveSheet.Range(Cells(10, 4), Cells(Rows.Count, 4).End(xlUp))

With ThisWorkbook.Worksheets.Item("貼り付け先")
For ii = 10 To .Cells(Rows.Count, 1).End(xlUp).Row
i = Application.match(.Cells(ii, 4).Value, prefRng, 0)
If IsError(i) Then
ii = ii + 1             …➀
Else
.Cells(ii, 10).Value = prefRng(i).Offset(, 4).Value      …②
End If
Next
End With
Next K

End Sub

A 回答 (2件)

条件にNotを付けてひっくり返せば良いのではと思います。



If Not IsError(i) Then ' エラーじゃなかったら
.Cells(ii, 10).Value = prefRng(i).Offset(, 4).Value      …②
Else
ii = ii + 1             …➀
End If
    • good
    • 0
この回答へのお礼

ありがとうございます。
IsErrorの前にNotをつければいいのですね。
勉強になりました!

お礼日時:2019/05/05 17:51

コードをそのまま活かして書いてみました。


全体的には、コードは良く分かっていないかもしれませんので、間が抜けているかもしれません。
ii=ii+1 をループ内でおいたら、読み出しが、スキップしてしまいます。だから、ループ内で、カウンター変数をインクリメントを行うことはできませんね。別の変数を置いてやるしかないと思います。

'//
Sub Test2()
 Dim prefRng As Range
 Dim i, ii As Long, j As Long
 Dim K As Long
 ''Dim Worksheet As Worksheet '不要
 j = 10 '貼り付け先の書き出しの初期値
 For K = 4 To Worksheets.Count
  With Worksheets(K)
  Set prefRng = .Range(.Cells(10, 4), .Cells(Rows.Count, 4).End(xlUp))
  End With
  With Worksheets("貼り付け先")
   For ii = 10 To .Cells(Rows.Count, 1).End(xlUp).Row
    i = Application.Match(.Cells(ii, 4).Value, prefRng, 0)
    If Not IsError(i) Then
     .Cells(j, 10).Value = prefRng(i).Offset(, 4).Value '
     j = j + 1 '貼り付け行のインクリメント
    End If
   Next
  End With
 Next K
End Sub
    • good
    • 1
この回答へのお礼

ありがとうございます!
どうしても、スキップされてしまうセルがあり、困っておりました。
教えて頂いたコードを試してみたら、その部分も、きっちり解消されていました。

お礼日時:2019/05/05 17:50

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