![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
下記のコードで15列目を空白以外で絞ったときデータが1行しか無い場合、
.Range(.Range("O2"), .Range("O" & Rows.Count).End(xlUp)).SpecialCells(xlCellTypeVisible).Copy
これだとうまくコピーが出来ません。
絞るデータが無い、または1行しかない場合はどうすれば良いでしょうか?
With Sheets("Sheet1")
.Range("A1").AutoFilter Field:=15, Criteria1:="<>"
.Range(.Range("A2"), .Range("H" & Rows.Count).End(xlUp)).SpecialCells(xlCellTypeVisible).Copy
Sheets("Sheet2").Range("A:A").End(xlDown).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
.Range(.Range("O2"), .Range("O" & Rows.Count).End(xlUp)).SpecialCells(xlCellTypeVisible).Copy
Sheets("Sheet2").Range("I:I").End(xlDown).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
.ShowAllData
End With
No.2ベストアンサー
- 回答日時:
こんにちは!
オートフィルタを掛けるというコトは1行目が項目行になっているのですよね。
>データが1行しか無い場合
とはデータが全くなく、項目行だけが表示されている状態ってことでしょうか?
一例です。
標準モジュールです。
Sub Sample1()
Dim lastRow As Long, wS As Worksheet
Set wS = Worksheets("Sheet2")
With Worksheets("Sheet1")
lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
.Range("A1").AutoFilter field:=15, Criteria1:="<>"
If .Cells(Rows.Count, "A").End(xlUp).Row > 1 Then '//★//
Range(.Cells(2, "A"), .Cells(lastRow, "A")).SpecialCells(xlCellTypeVisible).Copy
wS.Cells(Rows.Count, "A").End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues
Range(.Cells(2, "O"), .Cells(lastRow, "O")).SpecialCells(xlCellTypeVisible).Copy
wS.Cells(Rows.Count, "I").End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues
End If
.AutoFilterMode = False
Application.CutCopyMode = False
End With
End Sub
こんな感じをお望みなのでしょうか?
※ 的外れならごめんなさい。m(_ _)m
No.3
- 回答日時:
>.Range(.Range("O2"), .Range("O" & Rows.Count).End(xlUp)).SpecialCells(xlCellTypeVisible).Copy
Rows.Count).End(xlUp)は、シートの最終行からO列でCtrl+↑を押下時のRowになります。
その値が、.Range("O2"、の2行(整数2)より小さいとエラーになります。従って、見出し行のみが表示されている場合や
O列に何も表示されていない場合に発生する事が予見できます。
対策は、目的によって変わってきます。
O列に何もデータが無いならCopyしなくて良いなら、エラーを飛ばし実行する On Error Resume Next (この処理はしないが他の処理がしたい場合など)
O列にはデータはないが、他の列にデータがあり、Copyする場合は、条件書式 IFなどと変数を活用するなどしてRows.Count部分に (この可能性もあるかと)
2以上を代入するなどですかね。
良く行われる例として行を変数にあらかじめ入れる
Dim lastRow As Long ’変数宣言
On Error Resume Next ’エラーがある場合次に進む
lastRow = .Cells(Rows.Count, 15).End(xlUp).Row ’15はO列
If lastRow <= 1 Then ’O列が空か見出し行(1行のみ)の時
If .Cells(2, 14) <> "" Then lastRow = 2 ’N2にデータが無ければ lastRow = 2 *.Cells(2, 14)の他の書き方 .Cells(2,"N") または、 .Range("N" & 2)
End If
’上記条件でlastRowが1なら下記でエラーになり下記の処理を飛ばし次に進む
.Range(.Range("O2"), .Range("O" & lastRow).SpecialCells(xlCellTypeVisible).Copy
O列2行にデータなくN列2行目にデータがない場合は、処理をせず次に進み
O列2行目にデータがなくN列2行目にデータがある場合は、2行目がCopyされます。
O列2行目以降にデータがあれば、通常通り処理が進みます。
参考まで
No.1
- 回答日時:
同様の事象、記載のコードで既存データの削除を行おうとしたときに、エラーとなりはじかれました。
そのため当方では2行目(この場合3行目)が空白の場合には処理を行わないという判定を入れて回避しました。
--------------------------------------------------------------------------------
IF .Range("O3").value="" Then
Else
.Range(.Range("O2"), .Range("O" & Rows.Count).End(xlUp)).SpecialCells(xlCellTypeVisible).Copy
End If
--------------------------------------------------------------------------------
力技かもしれませんがこれで回避できるのでお試しください
上記はコピー句の部分だけを記載していますが、3行目にデータが無い場合には全ての処理を行わない様にするのがベストだとは思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Excel(エクセル) 並べ替え、ソートの構文がわからない。 お世話になります。VBA超初心者です。 エクセルでワークシート 2 2023/06/28 21:00
- Excel(エクセル) エクセル VBAでシートのコピーを作りたい 1 2023/05/18 07:42
- Visual Basic(VBA) 前回質問の続きになりますが、下記マクロでシート1からシート2の抽出項目セルB3「りんご」とセルC2「 2 2022/12/02 17:37
- Visual Basic(VBA) 【至急】Excel 同一人物の情報を一行にまとめる(複数行) 6 2022/05/24 17:58
- Excel(エクセル) VBAのoffsetの動き方について教えてください 3 2022/11/25 23:36
- Visual Basic(VBA) worksheets & rows メソッドは失敗しました。のエラー回避のやり方 1 2022/06/07 13:58
- Visual Basic(VBA) Sheet「状況」から、分類の年齢別カウント数をSheet「D表」へ転記する下記マクロを作っています 7 2022/12/14 17:57
- Visual Basic(VBA) マクロで最終行を取得してコピーしたい 3 2022/04/06 19:07
- Visual Basic(VBA) コピーしたデータを表中で収まるように2列に分けて貼り付けする方法を教えてください。 8 2022/06/24 14:28
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで2つのデータの突合せを...
-
エクセルで1列に500行並んだデ...
-
複数の条件に合う行番号を取得...
-
エクセルで、重複データを除外...
-
Excelで2行単位のソートの出来...
-
エクセルで日付から日にちを削...
-
Countifよりも早く重複数をカウ...
-
excel:別シートの値を飛び飛び...
-
マクロ コピー貼り付けと重複デ...
-
エクセルの行挿入について
-
EXCELで同じ内容の行を削除
-
【エクセル】1列内に複数ある同...
-
エクセルでのデータベース作成
-
横長フィールドを縦にまとめる
-
VBA 数式を最終行までコピー
-
Excelの30個ずつの平均値の出し方
-
Excel VBA 【QueryTables.Add】...
-
エクセルで保護しながらオート...
-
あるデータで重複しているもの...
-
エクセルVBA C列に特定の文字列...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで1列に500行並んだデ...
-
エクセルで日付から日にちを削...
-
Excelで2つのデータの突合せを...
-
Excelで2行単位のソートの出来...
-
複数の条件に合う行番号を取得...
-
excel:別シートの値を飛び飛び...
-
エクセルで、重複データを除外...
-
Countifよりも早く重複数をカウ...
-
Excelの30個ずつの平均値の出し方
-
VBA 数式を最終行までコピー
-
エクセルVBA C列に特定の文字列...
-
エクセルで横並びの複数データ...
-
エクセル2016にて、行挿入&コピ...
-
【Excel】小計単位で並べ替えを...
-
VBA 大きなtxtテキストファ...
-
500行の中から、多い順に抽出す...
-
エクセル~空白のセルのある行...
-
エクセルで1つの会社名に対して...
-
【エクセル】1列内に複数ある同...
-
Excel VBA 空白セル以下のデー...
おすすめ情報