[[20170216164749]] 『コピーしたセルを挿入するマクロ』(TYC) ページの最後に飛ぶ

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

 

『コピーしたセルを挿入するマクロ』(TYC)

ファイルAの更新データシートから条件でソートしコピーしたセルを、
ファイルBの履歴データシートの、2行目に挿入したいです。
下記の通り記述したところ、コピーしたセルは貼りつかず、
2行目に空白行が1行挿入されるだけでした。
コピーしたセルを挿入するにはどこを変更する必要があるでしょうか。
よろしくお願いします。

※記述内の「ファイル」と「条件」は変数です

Sheets("更新データ").Select
Range("C1").AutoFilter Field:=3, Criteria1:=条件

    Range("A2:AA1000").Select
    Selection.SpecialCells(xlCellTypeVisible).Select
    Selection.Copy

Workbooks(ファイル).Activate
Sheets("履歴データ").Select
Rows("2:2").Select
Selection.Insert Shift:=xlDown

元々の履歴データが↓の場合、

  A   B   C   D   E   F   . . 

1 番号 住所 氏名 年齢 回数 更新日
2 112 秋田 山田  18  1   12/1
3 115 青森 佐藤  45  3   12/4
4 245 東京 鈴木  30  2   12/5
5 335 三重 木村  24  5   12/8
.
.

更新データからコピーしたセルが↓だったら、

 275 愛知 佐々木 23  2   12/18
 134 大坂 杉本  31  5   12/15

マクロの結果、↓の様な状態にしたいです。

  A   B   C   D   E   F   . . 

1 番号 住所 氏名 年齢 回数 更新日
2 275 愛知 佐々木 23  2   12/18
3 134 大坂 杉本  31  5   12/15
4 112 秋田 山田  18  1   12/1
5 115 青森 佐藤  45  3   12/4
6 245 東京 鈴木  30  2   12/5
7 335 三重 木村  24  5   12/8
.
.

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


マクロは冗長ではありますが、正しく動きそうに見えます。調査には、変数の中身が正しいか、ステップ実行してデバッグしてみるしか無さそうです。
(???) 2017/02/16(木) 17:49

何パターンか検証しましたが、
挿入して貼り付けではなく、最終行にそのまま貼り付けた場合や、
コピーを可視セルではなく普通に範囲指定でコピーした場合、
また可視セルコピーでも同ファイル内に貼り付けした場合はスムーズに動いたので、
変数も問題はなく、それぞれの指示も機能しているようでした。

なので、可視セルコピ→一旦作業シートを経てファイルBに貼り付けるようにして暫定的に解決しました。
まだ勉強不足で可視セルコピー→別ファイルに挿入貼り付けが出来ない原因は分かりませんが…
参考までに顛末を書かせていただきます。

(TYC) 2017/02/17(金) 14:09


 そうですね。

 手作業で行っても、可視セルをコピーして 別ブックの行を選んで セルグループの挿入メニューを選んでも
 コピーしたセルの挿入(E) が、そもそも でてきませんので、エクセルの仕様として、こういったことは
 できないということになっているんでしょうね。

 エクセル仕様としてできないものはVBAでやってもできないわけですから、暫定的に対応された方法を
 恒久対応 として位置づけられたらいいのでは?

 もちろん コピー挿入ではなく
 挿入先に必要行数を挿入したうえで、その領域に 可視セルをコピペということは
 できるかと思いますが。

 ところで、

 ・もし、オートフィルターデータ領域に可視行がない場合、Selection.SpecialCells(xlCellTypeVisible).Select は 実行時エラーになります。

(β) 2017/02/17(金) 14:29


 ???さんから マクロコードそのものについてのコメントがありましたね。
 冗長 といいますか、やたらと ブックをアクティブにし、シートをアクティブにして、アクティブシート前提の
 領域処理コードになっています。

 冗長 かつ 煩雑 かつ、コード自体が状況依存になっており、堅牢性に欠けます。

 それと、オートフィルター領域の可視部分は 可視部分のみを取り出さずとも、領域をコピペすると
 可視部分のみが対象になるという性質があります。

 といったあたりを踏まえて記述例です。

    Dim sh As Worksheet
    Dim n As Long

    Set sh = Workbooks(ファイル).Sheets("履歴データ")

    With ThisWorkbook.Sheets("更新データ")
        .AutoFilterMode = False '念のため解除
        .Range("A1").AutoFilter Field:=3, Criteria1:=条件
        n = .AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count - 1
        If n > 0 Then
            sh.Rows(2).Resize(n).Insert Shift:=xlDown
            Intersect(.AutoFilter.Range, .AutoFilter.Range.Offset(1)).Copy sh.Range("A2")
        Else
            MsgBox "抽出データがありません"
        End If
        .AutoFilterMode = False
    End With

(β) 2017/02/17(金) 15:03


コメント返信:

[ 一覧(最新更新順) ]


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