[[20190320212244]] 『検索した対象複数行へのある行内容の複写マクロ』(あらクマ) ページの最後に飛ぶ

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

 

『検索した対象複数行へのある行内容の複写マクロ』(あらクマ)

最終行の3行目上の行のB列、D列、F列、H列、J列、L列に数式が入力されています。
その行の上に、何行か(状況によって行数は変化)行が挿入されます。
その挿入された行のB列、D列、F列、H列、J列、L列のセルは空白の状況になる可能性があります。
特に、B列セルは空白になる可能性が高いです。
それらの行を見つけ、そのB列、D列、F列、H列、J列、L列のセルに
最終行の3行目上の行のB列、D列、F列、H列、J列、L列に数式を一括複写入力するために、
以下のようなマクロを考えました。
なお、その際、それら以外の行にも同じ状況があったなら、同時にその行にも同じ作業を行おうと、
かんがえました。

Sub 年度更新3()

    Dim LastRow3 As Long
    Dim SagyoRow2 As Long
  Dim KuhakuGyo2 As Range
  Dim q As Long

    LastRow3 = Cells(Rows.Count, 1).End(xlUp).Row
    SagyoRow2 = LastRow3-3
   '3行目から作業対象最終行までB列のセルをチェックします。
  With ActiveSheet
    For q = 3 To SagyoRow2
    'B列のセルが空白なら変数 KuhakuGyo2 に追加
    If IsEmpty(Cells(q, 2).Value) Then
      '最初の空白行に出会ったら行全体を KuhakuGyo2 にセット
      If KuhakuGyo2 Is Nothing Then
        Set KuhakuGyo2 = .Rows(q).EntireRow
      '2件目からは順次 KuhakuGyo2 に追加していく
      Else
        Set KuhakuGyo2 = Union(KuhakuGyo2, .Rows(q).EntireRow)
      End If
    End If
    Next q
  End With

  '空白行があれば一括で最終行の3行前のデータをコピーする
  If Not KuhakuGyo2 Is Nothing Then

    Rows(LastRow3-2).Copy Destination:=Rows(KuhakuGyo2)
   End If
End Sub

上のマクロを実行すると、
「Rows(LastRow3-2).Copy Destination:=Rows(KuhakuGyo2)」のところで、
「実行時エラー'13' 型が一致しません。」
と作業が止まってしまいます。
「Unionメソッド」の使用法への理解が不足しているためだとは思うのですが・・・

どなたか、解決策をご教授くださいませんか。

< 使用 Excel:Excel2013、使用 OS:Windows7 >


IsEmpty(Cells(q, 2).Value) Then
Rows(LastRow3-2).Copy Destination:=Rows(KuhakuGyo2)
この2行で.が抜けていますが本題はそこではないですね。
(というよりwith ActiveSheetが必要なさそうな挙動?)

'空白行があれば一括で最終行の3行前のデータをコピーする
の部分を以下の通りに書き換えれば動作するはずです。

If Not KuhakuGyo2 Is Nothing Then

    Dim tRange as Range
    For Each tRange In KuhakuGyo2.Rows
        Rows(LastRow3 - 2).Copy Destination:=Rows(tRange.Row)
    Next
End If

Rows(LastRow3-2).Copy Destination:=Rows(KuhakuGyo2)
のままですと
Rows(KuhakuGyo2)
の部分で
〇行目にコピーするつもりなのに範囲どこそこ、行目にコピーとなり型エラーがでております。
行番号はLong型(とか)でなければならないのに、行番号に範囲型を放り込んでいるのがエラーの原因です。

また、余談ですが
行全体のコピー貼り付けならば一度ユニオンで範囲を取得しなくてもループ処理中に都度コピーしていく方法や行番号を配列として取得する方法などもあります。ご参考までに。
(個人的にユニオンが苦手だから使わないだけですが)
(高橋) 2019/03/20(水) 21:55


 >Rows(LastRow3 - 2).Copy Destination:=Rows(KuhakuGyo2)
                                           ↓ こうすればいいんじゃないですか?
   Rows(LastRow3 - 2).Copy Destination:=KuhakuGyo2

(半平太) 2019/03/20(水) 22:07


高橋さん、半平太さん、早速のご教授ありがとうございました。
どちらの策も理想どおりの動きを実現できました。
(あらクマ) 2019/03/20(水) 22:25

コメント返信:

[ 一覧(最新更新順) ]


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