[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『コピーしたセルを挿入するマクロ』(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 >
なので、可視セルコピ→一旦作業シートを経てファイル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.