[[20230911222553]] 『エラー値の処理 マクロ』(ぷりん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『エラー値の処理 マクロ』(ぷりん)

表題の件、教えてください。

<元データ> 項目名は1行目のA列から始まるものとする。

 コード	Yes/No	分類	件数
 a	Yes	no	20
 b	No	1	1
 c	Yes	2	#VALUE!
 d	Yes	2	3
 a	Yes	3	2
 f	No	3	3
 a	Yes	#N/A	20
 a	Yes	3	20

上記元データで、B列がYesでC列の分類がno以外で、D列の件数が3件以上の場合、E列-H列の同じ行にデータをそのまま転記したいです。

#N/Aと#VALUEは数式ではなく、値に変換したものとなっています(本番では他のファイルに転記したいので、数式を全て値化してから転記する仕様にしているため)

まずループでIF文で条件を組んだら、エラー値があるからか「型が一致しません」と出ました。
そこで、On Error Resume Next 〜 処理 〜 On Error GoTo 0
を入れてみたところ、今度は止まらずに動いたのですが、#N/Aと#VALUEの行も転記されてしまいました。
「no」でもなく、「3件以上」にも該当しないはずなのに、なぜエラー値行も貼りついてしまうのかが不明です。

考えたコード ←エラー行も貼りついてしまう版
Sub test()
Dim l As Long

 For l = 2 To 9
   On Error Resume Next
       If Cells(l, "B").Value = "Yes" And Cells(l, "C").Value <> "no" And Cells(l, "D").Value >= 3 Then
        Cells(l, "A").Resize(, 4).Copy Cells(l, "E")
       End If
   Next
  On Error GoTo 0
End Sub

アドバイス頂けますと幸いです。

< 使用 Excel:Microsoft365、使用 OS:Windows10 >


 こうですか?
 Sub test()
    Dim l As Long
    For l = 2 To 9
        If Not (IsError(Cells(l, "C").Value) Or IsError(Cells(l, "D").Value)) Then
            If Cells(l, "B").Value = "Yes" And Cells(l, "C").Value <> "no" And Cells(l, "D").Value >= 3 Then
                Cells(l, "A").Resize(, 4).Copy Cells(l, "E")
            End If
        End If
    Next
 End Sub
(xyz) 2023/09/11(月) 23:36:31

xyz様
ありがとうございます!!出来ました。
IsError(エラーかどうか)をそれぞれTrue, Falseで判定させて、それをNotの中に入れるのですね…
入れ子の方法がどうしても分からなかったのですが、大変勉強になりました!
(ぷりん) 2023/09/12(火) 04:38:22

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.