[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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 >
なら、そのまま表全体をコピペしたらどうなりますか?
流れ的には、
表全体を指定
オートフィルターで必要なデーターを抽出
そのままコピー&ペースト
オートフィルター解除
で、行けるはずです。まずはマクロの記録をして、
それぞれの作業のコードを探ってみてください。
それを元に、マクロを作っていくといいと思います。
(まっつわん) 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.