プロが教えるわが家の防犯対策術!

こんにちは
先日、こちらで

sheet2の各セルは、sheet1のセルを参照しています。
sheet2のA列に値がある行の AからCQ列までを選択して、
sheet3に貼り付けしたいのですが、
VBAで行うにはどうしたらよいでしょうか。

という、質問をしました。
それに、

> Sheet2の1行目は項目行になっていて、データは2行目以降にあるとし、
> そして、Sheet3にコピー&ペーストするのは2行目以降とします。
>
> 標準モジュールです。
>
> Sub Sample1()
> Dim lastRow As Long
> With Worksheets("Sheet2")
> lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
> .Range("A1").AutoFilter field:=1, Criteria1:="<>"
> If .Cells(Rows.Count, "A").End(xlUp).Row > 1 Then
> Range(.Cells(2, "A"), .Cells(lastRow, "CQ")).SpecialCells(xlCellTypeVisible).Copy
> Worksheets("Sheet3").Range("A1").PasteSpecial Paste:=xlPasteValues
> End If
> .AutoFilterMode = False
> Application.CutCopyMode = False
> End With
> End Sub

という、回答をいただきました。
これは上手く設置することができましたが、
データが1行の場合、sheet3が空白になってしまいました。

また、1行目が項目行ではなく、1行目からデータの場合、
どこをどのように設定してよいのかわかりません。

教えていただけないでしょうか。

Excel2007を使用しています。
よろしくお願い致します。

A 回答 (1件)

こんばんは!



1行目からデータがあり、オートフィルタの設定をしてしまうとExcel的には
自動的に「1行目を項目行」としてしまうようなので、1行目からデータがある場合は
↓のようにしてみてはどうでしょうか?

Sub Sample2()
Dim lastRow As Long
With Worksheets("Sheet2")
.Rows(1).Insert '//1行目を行挿入★
.Range("A1") = "ダミー" '//仮の項目名
lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
.Range("A1").AutoFilter field:=1, Criteria1:="<>"
If .Cells(Rows.Count, "A").End(xlUp).Row > 1 Then
Range(.Cells(2, "A"), .Cells(lastRow, "CQ")).SpecialCells(xlCellTypeVisible).Copy
Worksheets("Sheet3").Range("A1").PasteSpecial Paste:=xlPasteValues
End If
.Rows(1).Delete '//追加した行を削除★
.AutoFilterMode = False
Application.CutCopyMode = False
End With
End Sub

※ コード内の「★」の行を追加してみました。m(_ _)m
    • good
    • 0
この回答へのお礼

引き続いて、ご回答ありがとうございます。
丁寧にご説明いただきましたおかげで、
問題が解決致しました。

大変使いやすくなりました。
本当にありがとうございました。

お礼日時:2015/04/11 19:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!