- ベストアンサー
エクセルマクロで複数列のセルを選択した時でも正しく動作する方法
- エクセルマクロを使用して、複数列のセルを選択した場合にも正しく動作するようにする方法を探しています。
- 現在、3列目に入力された値によって15列から17列の値を自動入力するマクロを作成しましたが、1列目から3列目までのセルにペーストすると正しく動作しない問題があります。
- 修正方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>If Target.Column <> 3 Then Exit Sub これだと、変更した領域の左上隅のセルが「3列目以外」だと何もしません。 >1列目から3列目のセルにペーストすると であれば、変更した領域の左上のセルが「1列目」つまり「3列目以外」ですから、何もしません。 ですので「変更領域の左隅が3列目より右にある」または「変更領域の右隅が3列目より左にある」と言う判断をしなければなりません。 また「変更された範囲が複数列に渡る場合」を考慮して「For Eachの中で、r1が3列目を指している時だけ処理する」という制限も必要です。 その2点を踏まえて修正すると、以下のようになります。 Private Sub Worksheet_Change(ByVal Target As Range) If (Target.Column > 3) Or (Target.Column + Target.Columns.Count < 4) Then Exit Sub For Each r1 In Selection If r1.Column = 3 Then If r1.Cells(1, 1) <> "部品表" Then Cells(r1.Row, 15) = "-" Cells(r1.Row, 16) = "-" Cells(r1.Row, 17) = "-" End If End If Next End Sub
その他の回答 (1)
- keithin
- ベストアンサー率66% (5278/7941)
修正例: private sub Worksheet_Change(byval Target as excel.range) dim h as range application.enableevents = false on error resume next for each h in application.intersect(target, range("C:C")) if h <> "部品表" then h.offset(0, 12).resize(1, 3) = "-" end if next application.enableevents = true end sub 今は >3列目のみのセルをペーストすると の部分を If Target.Column <> 3 Then Exit Sub のようにして担保しています。 いまのマクロは比較的間違いのない,そこそこ良いプログラムになっています。 それを直そうというのですから >正しく動作します 「正しい」とは一体どういう動作なのか,漏れや間違いの無いようちゃんとあなたが見直さないといけませんね。
お礼
回答ありがとうございます。
お礼
ありがとうございます。 意図した動作になりました。