[[20190621104006]] 『別シートに追加するマクロについて』(ムム) ページの最後に飛ぶ

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

 

『別シートに追加するマクロについて』(ムム)

マクロで、「シート1にデーターを取り込んで、オートフィルターで新規のデーターのみを抽出し、シート2の最終行の下に追加」という動作を実行しているのですが、

新規のデーターがなかった時に、シート1のデーターがすべてシート2の最終行に追加されてしまいます。

これを新規データーがなかった時は、なにも追加しない様にしたいです。

新規データーがない場合、シート1に表示されるのはオートフィルで1行目の項目のみが表示される様になっています。

宜しくお願い致します。

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


書き忘れました。
シート1からシート2にコピーする範囲は、
A2:AC500 となっています。
この範囲内で、何も表示されなかった場合は、
シート2に何もコピーしない様にしたいです。
宜しくお願い致します。
(ムム) 2019/06/21(金) 10:47

とりあえず、秘匿情報がはいっていたらそこは適当なものに打ち変えて隠した上で、今のマクロを提示してみてはどうでしょうか。
特に「新規のデーターのみを抽出」の部分に問題がありそうな気がしますが、どういう抽出条件にしているのか現状ではわかりません。

>シート1からシート2にコピーする範囲は、A2:AC500 となっています。
タイトルが1行目にあり、オートフィルタの範囲としてはA1:AC500だったりしませんか?

(もこな2) 2019/06/21(金) 11:01


ご返信ありがとうございます。

おそらく、下記のマクロコードがその動作のコードだと思うのですが、あまり詳しくないのでこれをどう書き換えればいいのかが良く分かりません。。

ActiveWorkbook.Worksheets("シート1").Range("A2:AC500").Copy
With ActiveWorkbook.Worksheets("シート2").Cells(Rows.Count,"A").End(xlUp).Offset(1)

     .PasteSpecial Paste:=xlPasteAllUsingSourceTheme
     .PasteSpecial Paste:=xlValue
End With
Application.CutCopyMode = False
ActiveWorkbook.Worksheets("シート2").Select
ActiveSheet.Range("A7").Select
Selection.End(xlDown).Select

(ムム) 2019/06/21(金) 11:13


えっと...その前段ありますよね?

追加提示された部分は、コピペの部分(つまり、抽出した後の話)ですが、「オートフィルタをどうやってかけているのか」「どのような条件で抽出しているか」が知りたいところです。

ただ、今の状況でも抽出された行が無いことを判定するなら、最終行を取得するという手が使えるとおもいます。
理屈は以下のとおり

提示された部分でも使っている「Cells(Rows.Count,"A").End(xlUp)」とは、ざっくりいうとA列の一番下から上方向に見ていき何らかのデータが入っているセルを探すものですが、実は"表示されている”ものに限定されます。
そして、オートフィルタは、抽出対象以外の行は"非表示"になり、どの行も抽出対象でなければ、項目行しか"表示"されません。

したがって、「Cells(Rows.Count,"A").End(xlUp)」で最終行が掴めるという前提の場合、
A1:AC500の範囲でオートフィルタがかかっていて、項目行しか表示されていない状態で「Cells(Rows.Count,"A").End(xlUp).Row」を実行すれば項目行の行番号である、1が返ってきます。

つまり、【1行目の項目のみが表示される】ときに最終行を調べてみたら【1】になるわけですから、その場合はコピーしなければよいだけですよね。

おまけでオートフィルタを操作するときに参考になりそうなサイトを紹介します。
http://officetanaka.net/excel/vba/tips/tips155.htm

(もこな2) 2019/06/21(金) 13:43


コメント返信:

[ 一覧(最新更新順) ]


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