[[20161014114018]] 『VBAで特定の範囲を選択、コピー』(fumi) ページの最後に飛ぶ

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

 

『VBAで特定の範囲を選択、コピー』(fumi)

初めまして。よろしくお願いいたします。

      A  B   C  D  E  G  H  I  J 
1     ab
2        ID  AA          N  L 
1000  n  a1  c  a1       1  2  PartialUpdate 
1001     b7  o  b7       0  5  PartialUpdate
1002     a5  o  a5       1  2  PartialUpdate
1003     t1     t1       1  5  PartialUpdate 
1004  n  j1     j1       0  5  PartialUpdate

1行目と2行目にはタイトル等の文字が入力されています。
A列からJ列まで空欄または数字・文字が入力されています。
なお、D,H,I,J列には3行目から10000行目まで数式が入っています。
また、上記はJ列(J3以降)で「PartialUpdate」を選んでフィルタをかけた後の状態です。
ですので、通常、行は1000番台ぐらいから始まり、100から200行ほど選択することが多いです。

上記のフィルタをかけた状態から、
D1000からJ1004までコピーを行い、
別シート「sheet1」のA4にペーストを行うマクロを教えていただけれと思います。
よろしくお願いいたします。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


>また、上記はJ列(J3以降)で「PartialUpdate」を選んでフィルタをかけた後の状態です。

なら、そのまま表全体をコピペしたらどうなりますか?

流れ的には、

表全体を指定
オートフィルターで必要なデーターを抽出
そのままコピー&ペースト
オートフィルター解除

で、行けるはずです。まずはマクロの記録をして、
それぞれの作業のコードを探ってみてください。
それを元に、マクロを作っていくといいと思います。

(まっつわん) 2016/10/14(金) 12:39


 すでに処理案がでていますので、よもやま話的に。

 >>1行目と2行目にはタイトル等の文字が入力されています。 

 1行目と2行目が行結合されているセルもあるのでしょうか?
 また、ある列は行結合されず、1行目に項目名、ある列は2行目に項目名といった列もあるんですね?

 こういった状態でオートフィルターを設定しておられるわけですが、▼マークは1行目につけられていますか?
 2行目につけられていますか?

 本件、処理としてはオートフィルターも悪くはないですが、フィルターオプションなら、直接、別シートの任意の場所に
 抽出結果を転記することができます。
 ただし、フィルターオプションは、オートフィルターと異なり、タイトル行の文字列が「命」なので
 ちょっとお聞きしたいと思いまして。

(β) 2016/10/14(金) 13:37


まっつわんさん

ご回答ありがとうございます。

マクロを記録してやってみると、
以下のような感じですが、
なんとか貼り付けられているようです。

Cells.Select

    ActiveSheet.Range("$A$2:$J$10000").AutoFilter Field:=10, Criteria1:="<>"

    Range("J1").Select
    Selection.End(xlDown).Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlToLeft)).Select
    Range(Selection, Selection.End(xlToLeft)).Select
    Selection.Copy

    Sheets("Sheet1").Select
    Range("A4").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub

質問する前はなぜだかさっぱりできなかったのですが…。
ありがとうございました。

(fumi) 2016/10/14(金) 14:40


βさん

ご回答ありがとうございます。

1行目と2行目が行結合されているセルもあるのでしょうか? また、ある列は行結合されず、1行目に項目名、ある列は2行目に項目名といった列もあるんですね?
 こういった状態でオートフィルターを設定しておられるわけですが、▼マークは1行目につけられていますか?

1行目と2行目で結合されているセルはございません。
1行目にはB1に文字や記号が複数入っています。2行目に項目名があります。
▼マークは、2行目につけています。

本件、処理としてはオートフィルターも悪くはないですが、フィルターオプションなら、直接、別シートの任意の場所に抽出結果を転記することができます。

フィルターオプションというのがどういうものか知らないのですが、
別シートの任意の場所に抽出結果を転機するなら、コピペをするより処理が軽い感じでしょうか?

よろしくお願いいたします。
(fumi) 2016/10/14(金) 14:47


>質問する前はなぜだかさっぱりできなかったのですが…。
なるほど。。。

あっと、整理してみました。

1)SelectしなくてもVBAから操作は可能なので、
そういう書き方を覚えましょう。自由度が増します。

2)複数シートを扱うときは、どのシートのセルなのか明示しましょう。
思いもよらない結果になるときがあります。

3)変数にセルその物が代入できます。オブジェクト変数を覚えましょう^^

Sub test001()

    Dim Rng As Range

    With Worksheets("Sheet4").Range("A1").CurrentRegion
        Set Rng = Intersect(.Cells, .Offset(1))
    End With

    With Rng
        .AutoFilter Field:=10, Criteria1:="<>"
        .Copy
        Worksheets("Sheet1").Range("A4").Resize(.Rows.Count, .Columns.Count) _
                .PasteSpecial Paste:=xlPasteValues
        .AutoFilter
    End With
End Sub

>フィルターオプションというのがどういうものか知らないのですが、
検索したらすぐ見つかると思いますよ^^
手動では使いずらいですが、
VBAから操作する分には便利なツールです^^

(まっつわん) 2016/10/14(金) 15:21


まっつわんさん

ご回答ありがとうございます。

まっつわんさんが書いていただいたマクロの内容については
素人なので、ほとんどわからないのですが、
整理していただいたものに、「sheet4」だけ実際のシート名「os」に変更して、
実行したのですが、
「実行時エラー '1004':
Range クラスのAutoFilterメソッドが失敗しました。」
と表示されてしまいました。

おそらく私が伝えている情報が何か漏れているのだと思います。
でも、とりあえず当初のものでコピペができているので、
これ以上お時間を取らせてしまい、
申し訳ないので、とりあえずはそちらでいこうかと思います。

フィルターオプションに関しても検索してみましたが、
もう少し時間のある時にまた調べてみようと思います。

いろいろとご教授いただきありがとうございました。
(fumi) 2016/10/14(金) 16:48


コメント返信:

[ 一覧(最新更新順) ]


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