• 締切済み

マクロ 可視セルへコピーする方法

こんにちは。よろしくお願いします。 A~V列、300~400行程度の表を作っています。 8行目をコピーして空白行へペーストしたいのですがどのようにすれば良いでしょうか。 マクロの記録でつくったものは ActiveSheet.Paste でエラーになります。 またペースト開始行をA17ではなくて可変なものに変えたいです。 よろしくお願いします。 Sub 下までコピー() Range("A8:V8").Select Selection.Copy Selection.AutoFilter Field:=2, Criteria1:="=" Range("A17:V" & Range("B5").End(xlDown).Row).Select Selection.SpecialCells(xlCellTypeVisible).Select ActiveSheet.Paste Application.CutCopyMode = False Selection.AutoFilter Field:=2 End Sub

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 このような場合は、言葉で、きちんと説明したほうがよいのではないでしょうか? その8行めはどういうもので、空白のどこにどのようにコピーをするとか。 「可視セルへコピーする方法」ということと、空白行にコピーするというのは、同義ではありません。 質問は、失敗したマクロを直してほしいという意味のようには思えるのですが、そのマクロでは、ほとんど、意味が伝わってきません。少なくとも、オートフィルタで、空白行を検索すること自体はよいにしても、その後、Select したら、一旦、オートフィルタを解除しなければなりません。その確保したRangeオブジェクトは、2列にまたがっていますから、それは、1つのセルに対するものではなく、Areas として処理しなければなりません。そういう点で、今のコードを直すのは難しくなってしまいます。 また、Copy を最初にしていますが、必ずしも、そういう必要性はないのです。 また、 Range("A17:V" & Range("B5").End(xlDown).Row).Select こういうような、逆になっているものは、A17 以前にもコピーするという意味にも取れます。それでは、意味が通じないのです。 '----------------------------------- 'WorksheetFunction.CountA(c.Resize(, j)) 'は、A列目からV列目までが、空白行であるという判定をしています。 'もし、最初の2列だけなら CountA(c.Resize(, 2) となります。 'B列の判定だけでよいなら、c.Offiset(,1) となります。 '今回は、A列からコピーしているので、For Each c In .Range("A5:A" & i) はそのままですが、i は、B列の最終セル行を取ってもよいです。 '----------------------------------- Sub CopyDownward()   Dim rng As Range   Dim uRng As Range   Dim c As Range   Dim i As Long   Dim j As Long   With ActiveSheet     With .UsedRange       i = .Cells(.Cells.Count).Row     End With     Set rng = .Range("A8:V8")     If rng Is Nothing Then MsgBox "コピー元がありません", 48: Exit Sub     j = rng.Columns.Count          For Each c In .Range("A5:A" & i)       If WorksheetFunction.CountA(c.Resize(, j)) = 0 Then         If uRng Is Nothing Then           Set uRng = c.Resize(, j)         Else           Set uRng = Union(c.Resize(, j), uRng)         End If       End If     Next c     rng.Copy uRng   End With   Set rng = Nothing   Set uRng = Nothing End Sub

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

#01です。補足ありがとうございました。 でも元々の目的は「空白行に8行目をコピーしたい」ではないのですか? #01では目的にかないませんでしたか?  #01を   Set bRng = Range(Range("A9"), Range("A65536").End(xlUp)).SpecialCells(xlCellTypeBlanks) に変更すれば、挿入された空白行が9行目以降のどこにあってもコピーできると思います。 私はこの処理にオートフィルタを用いる必要を感じませんが、mnhc33さんご自身が書かれたマクロで動かしたいなら、少なくとも > Range("A17:V" & Range("B5").End(xlDown).Row).Select > Selection.SpecialCells(xlCellTypeVisible).Select では、貼り付け先の範囲はとびとびになるため > ActiveSheet.Paste を実行すると「複数の範囲に対しては実行できません」になるのではないかと思います。#01を参考にしてB列の可視セルだけを選択しFor Each ~ Nextでセル毎に貼り付ければよいでしょう。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

コードを見ても質問がよく分かりません。 A17以降の行のうちA列が空白の行全てにA8:V8をコピーするなら以下のようなマクロでもできます。でも細かいところが理解できていないので手を加えないと期待通りの動作にはならないと思います。 Sub Macro1() Dim r, bRng As Range   Set bRng = Range("A17").Resize(1000, 1).SpecialCells(xlCellTypeBlanks)   For Each r In bRng     Range("A8:V8").Copy Destination:=r   Next r End Sub >ペースト開始行をA17ではなくて可変なものに変えたいです も意味が理解できていないので考慮していません。

mnhc33
質問者

補足

説明が下手で申し訳ありません。 1.まず空白行を"計"の下に挿入し(このマクロはできました) 2.次に8行目(常に8行目は固定)をコピーして 3.オートフィルタでB列の空白行をソートします。 4.可視セルを選択してペーストします。 空白行の先頭はいつも17行目とは限らないということです。 よろしくお願いします

関連するQ&A

  • Excelマクロ オートフィルタ可視領域の特定部分をコピー

    何方か、回答をお願いします。 下記もマクロは 、B列:C列(B1:C1はタイトル)をオートフィルタに掛けて フィルタに掛かった一番上のデータをコピーして貼り付けているマクロですが。 やりたいことは、B1:C1のタイトルとフィルタに掛かった可視領域の一番上の データ(オートフィルタに引っかからないでデータが無い場合も有り)をコピー して貼り付けたいのですがどの様なコードを書けば良いのでしょうか。? Sub フィルタ() Range("B1:C1").Select Selection.AutoFilter Selection.AutoFilter Field:=2, Criteria1:=">=1e-6" Range("B1").CurrentRegion.Select On Error Resume Next Selection.SpecialCells(xlCellTypeVisible).Areas(2).Rows(1).Select Selection.Copy Range("K15").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.AutoFilter End Sub

  • Excelマクロでオートフィルターからコピペ

    ファイルのB列の値から0以外の値をオートフィルターで抽出し、値を、別のファイルのD列の一番下に貼りつけるマクロを作っていますがうまくいきません。 今作ったのは Sub macro1() If ActiveSheet.AutoFilterMode = False Then Range("A:G").Select Selection.AutoFilter Else Selection.AutoFilter Range("A:G").Select Selection.AutoFilter End If Selection.AutoFilter Field:=2, Criteria1:="<>0", Operator:=xlAnd Range("A1").Select Range("B2", Range("B2").End(xlDown)).Select Selection.Copy Windows("貼りつけるファイル名").Activate Cells(Rows.Count, 4).End(xlUp).Offset(1).Select ActiveSheet.Paste End Sub です。 フィルターで0以外の値を抽出しコピーまではできていますが、貼りつけるところでエラーがでます。 Microsoft Visual Basic 400 というエラーです。 何が悪いのか分かりません・・・。 分かる方いましたらご教授ください。よろしくお願いします。

  • エクセルのシートをコピーしたら、マクロが・・・

    こんにちは。 小さい図書室の運営をしている者です。 前回、こちらに質問を投稿したところ、とても役立つアドバイスを頂き、すぐに解決したので、今回も質問させていただきます。 今、図書の管理をすべてPCで行っています。 エクセルの「貸出管理」と言うブックで図書の貸出管理を行っています。 フィルタを使って図書の検索をした後、次に図書データを入力すべきセルにボタン一つで戻れるようにマクロを登録してあります。 このマクロを同じブック内の他のシートにコピーして使いたいのですが、コピーするとシートのテーブル名が変わってしまうためマクロでエラーが出てしまいます。 同じブック内の複数のシートでこのマクロを使う場合、いちいちシート名を変えなければならないのでしょうか?? もしくは、シートそれぞれに違うマクロを登録しなければならないのでしょうか?? ちなみに、登録されているマクロは次の通りです。 Sub 戻り() ' ' 戻り Macro ' ActiveSheet.ListObjects("テーブル2").Range.AutoFilter Field:=12 ActiveSheet.ListObjects("テーブル2").Range.AutoFilter Field:=10 ActiveSheet.ListObjects("テーブル2").Range.AutoFilter Field:=9 ActiveSheet.ListObjects("テーブル2").Range.AutoFilter Field:=7 ActiveSheet.ListObjects("テーブル2").Range.AutoFilter Field:=6 ActiveSheet.ListObjects("テーブル2").Range.AutoFilter Field:=4 ActiveSheet.ListObjects("テーブル2").Range.AutoFilter Field:=3 ActiveSheet.ListObjects("テーブル2").Range.AutoFilter Field:=2 ActiveSheet.ListObjects("テーブル2").Range.AutoFilter Field:=1 Range("テーブル2[貸出日]").Select Selection.End(xlDown).Select Selection.Offset(1, 0).Select End Sub この説明で分かって頂けますでしょうか?! どうか御回答お願いいたします!!

  • オートフィルタをし選択・貼付をマクロにしたいのですが、対象データ表示される行が毎回違うのでうまくいきません。

    いつもお世話になっております。 どなたかご教示いただければ助かります。 ファイル(1)のデータの中からA行が830となっているものを、ファイル(2)のページ1の一番下の行に付け足し 同じようにファイル(1)からA行が1000となっているものを、ファイル(2)のページ2の一番下に付け足す という作業をマクロでしたいのですが、毎回830と1000がセルAの何行目に表示されるのかが異なっており、オートフィルタをかけた状態でマクロにするとマクロ作成時にたまたま表示されていた行数が指定されているので、別の日に違う行数をコピーしてしまい私が作成したマクロではうまくいきません。 どう変更すれば宜しいでしょうか? どうぞ宜しくお願い致します。 Workbooks.Open Filename:="mm.xls"    ←上記文でファイル(1) Sheets(DM).Select Rows("1:1").Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:="<>*850*", Operator:=xlAnd, _ Criteria2:="<>*1000*" Range("A2").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select Selection.EntireRow.Delete ActiveSheet.Rows("1:1").Select Selection.AutoFilter Windows("xx.xls").Activate  ←ファイル(2) Sheets("ll").Select   ←ページ1  ActiveSheet.Range("A1").Select Selection.End(xlDown).Select ActiveCell.Offset(1, 0).Activate Windows("mm.xls").Activate Rows("1:1").Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:="1000" Rows("3:3").Select Selection.Copy Windows("xx.xls").Activate ActiveSheet.Paste Application.CutCopyMode = False Windows("xx.xls").Activate Sheets("pp").Select  ←ページ2 ActiveSheet.Range("A1").Select Selection.End(xlDown).Select ActiveCell.Offset(1, 0).Activate Windows("mm.xls").Activate Rows("1:1").Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:="850" Rows("2:2").Select Selection.Copy Windows("xx.xls").Activate ActiveSheet.Paste Application.CutCopyMode = False ActiveWorkbook.Save Windows("mm.xls").Activate ActiveWindow.Close End Sub

  • マクロでのActiveSheet.Pasteでのデバック

    関数の入ったセルを切取りで貼付けたいのですが、ActiveSheet.Pasteのところで"WorksheetクラスのPasteメソッドが失敗しました.”のデバッグになってしまいます。対応を教えていただけないでしょうかお願い致します。 Sub susiki() Columns("A:J").Select Selection.AutoFilter Selection.AutoFilter Field:=6, Criteria1:="AG" Dim kirix As Integer, kiriy As Integer Dim kiriz As Long kiriy = Range("A:A").Column kiriz = Range("F1").End(xlDown).Row For kirix = 1 To kiriy Range(Cells(kiriz, kirix), Cells(kiriz, kirix)).Select Selection.CurrentRegion.Select Selection.Cut Next kirix Selection.AutoFilter Field:=6, Criteria1:="DB" Dim harix As Integer, hariy As Integer Dim hariz As Long hariy = Range("A:A").Column hariz = Range("F1").End(xlDown).Row For harix = 1 To kiriy Range(Cells(hariz, harix), Cells(hariz, harix)).Select ActiveSheet.Paste Next harix Selection.AutoFilter End Sub

  • Excelでマクロを繰り返したい。

    Excelでマクロを記録したら以下のようになりました このマクロを以下の条件で繰り返したいのですが。 Sub Macro1() '------------- '----------------------- ' Sheets("Sheet1").Select Selection.AutoFilter Field:=4, Criteria1:="=5*", Operator:=xlAnd, _ Criteria2:="<>5@*" Range("A3:A302").Select Selection.Copy Sheets("Sheet2").Select Range("A3").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Sheet1").Select Range("A1").Select Selection.AutoFilter Field:=4, Criteria1:="=6*", Operator:=xlAnd, _ Criteria2:="<>6@*" Range("A3:A302").Select Selection.Copy Sheets("Sheet2").Select Range("B3").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Sheet1").Select Selection.AutoFilter Field:=4, Criteria1:="=7*", Operator:=xlAnd, _ Criteria2:="<>7@*" Range("A3:A302").Select Selection.Copy Sheets("Sheet2").Select Range("A103").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Sheet1").Select Range("A1").Select Selection.AutoFilter Field:=4, Criteria1:="=8*", Operator:=xlAnd, _ Criteria2:="<>8@*" Range("A3:A302").Select Selection.Copy Sheets("Sheet2").Select Range("B103").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End Sub 条件= Field:は4~35位まで変動します 一連の動作をコピーして手作業で数字を変えてみたのですが プロージャが大きすぎてエラーになってしまいます。 何か良い方法は無いでしょうか?。

  • excelVBAについて。

    Sub データ抽出() ' ' データ抽出 Macro ' ' Sheets("オリジナルデータ").Select Range("A1").Select Selection.AutoFilter ActiveSheet.Range("$A$1:$E$1000").AutoFilter Field:=2, Criteria1:="TR-A" Columns("A:E").Select Selection.Copy Range("B371").Select Sheets("TR-A").Select Range("A1").Select ActiveSheet.Paste Sheets("オリジナルデータ").Select Application.CutCopyMode = False Selection.AutoFilter Sheets("オリジナルデータ").Select End Sub で、Range(″B371″)がなくても良いのでしょうか?後、この後のプログラムを1行ずつ解説して頂けないでしょうか?教えていただけると嬉しいです。 以下のURLをダウンロードしていただけないでしょうか?この章のチャプター5です。 https://www.shuwasystem.co.jp/support/7980html/2606.html

  • オートフィルター VBAでの設定について

    オートフィルターで0以外のものに絞って、 コピーしたいのですが、 値が0しかない場合にすべてのものをコピーするように なってしまうので、 コピーすることがないようにさせたいです。 例) Sub test() Sheets("Sheet1").Select Selection.AutoFilter ActiveSheet.Range("$A$2:$A$10").AutoFilter Field:=1, Criteria1:="<>0" Range("A2:A10").Select Range(Selection, Selection.End(xldown)).Select Selection.Copy End Sub このようなコードの場合にA2:A10の値が0しかなかった場合に コピーしている状態をなくしたいのですが、 どこのコードを変えたらいいでしょうか。 回答よろしくお願いいたします。

  • エクセルのマクロで各Sheetのデータを複数コピー&ペーストしたいです

    エクセルのマクロで各Sheetのデータを複数コピー&ペーストしたいです 1つのエクセルファイルの中に複数のSheetがあります。 各Sheetの4行目以降(5行目から)にデータのあるA列~O列をコピーしていって、 挿入-ワークシート(Sheet1という名前で構わない)に全てを順番にコピーしていきたいです。 ”新しいマクロの記録”で下記のように作成したのですが、  ・5行目からデータのあるA列~O列をコピーしていく   ・存在する全てのSheetから上記の作業をする というマクロの書き方が分かりません。 恐れ入りますがお時間ある方で上記の内容をご理解頂ける方がいましたらアドバイス頂ければ非常に助かります。 Sub Macro1() Sheets.Add Sheets("ER10(zy)").Select Rows("5:8").Select Selection.Copy Sheets("Sheet1").Select ActiveSheet.Paste Sheets("ER10(cx)").Select Rows("5:9").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("A5").Select ActiveSheet.Paste Sheets("ER10(zht)").Select Rows("5:13").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("A10").Select ActiveSheet.Paste End Sub

  • エクセルのマクロで各Sheetのデータを複数コピー&ペーストしたいです

    エクセルのマクロで各Sheetのデータを複数コピー&ペーストしたいです 1つのエクセルファイルの中に複数のSheetがあります。 各Sheetの4行目以降(5行目から)にデータのあるA列~O列をコピーしていって、 挿入-ワークシート(Sheet1という名前で構わない)に全てを順番にコピーしていきたいです。 ”新しいマクロの記録”で下記のように作成したのですが、  ・5行目からデータのあるA列~O列をコピーしていく   ・存在する全てのSheetから上記の作業をする というマクロの書き方が分かりません。 恐れ入りますがお時間ある方で上記の内容をご理解頂ける方がいましたらアドバイス頂ければ非常に助かります。 Sub Macro1() Sheets.Add Sheets("ER10(zy)").Select Rows("5:8").Select Selection.Copy Sheets("Sheet1").Select ActiveSheet.Paste Sheets("ER10(cx)").Select Rows("5:9").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("A5").Select ActiveSheet.Paste Sheets("ER10(zht)").Select Rows("5:13").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("A10").Select ActiveSheet.Paste End Sub

専門家に質問してみよう