• ベストアンサー

EXECEL2000でオートフィルター貼り付けの方法

EXECEL2000のSheet1(A~P列)にデータが有り、オートフィルターにて データを抽出後、抽出データをコピーして別シートに溜まっている データの末尾にペーストするマクロを組みたいのですがどう組んだら良いのか? 教えてください!

質問者が選んだベストアンサー

  • ベストアンサー
  • vbafriend
  • ベストアンサー率47% (17/36)
回答No.4

こんばんは。#1です。早速マクロを組んでみました。次のように操作してみて下さい。 なお、シート1に抽出するデータが入力されていて同じブックのシート2の最終行のすぐ下にデータを貼り付けるように組んであります。1行目は項目行として考えています。 ・データが入力されているブックを開き、ALT+F11キーを押してVBE画面を表示させ、画面右上のVBAProjectと書かれている下のSheet1をダブルクリックして表示された右側の白い部分に書きのコードをコピー&ペーストする。 Sub Test() Dim myRow As Long myRow = Worksheets(2).Cells(Rows.Count, 1).End(xlUp).offset(1,0).Row Range("A1").CurrentRegion.Offset(1, 0).SpecialCells(xlCellTypeVisible).Copy Destination:=Worksheets(2).Range("A" & myRow) End Sub ・ALT+F11キーを押してエクセルの画面にもどり、メニューバーの上で右クリックして表示されたプルダウンメニューのユーザー設定をクリックする。 ・表示されたダイアログボックスのツールバータブをクリックし、右側の新規作成ボタンをクリックして表示されたボックスを何もせずOKボタンで閉じる。 ・ダイアログ僕巣のコマンドタブをクリックし、分類と書かれている下の白いボックスから新しいメニューを選択する。 ・コマンドと書かれている下にも新しいメニュと書かれているのでそこにマウスポインターをあわせ、左ボタンを押したまま表示されているツールバーの上までドラッグしてツールバーの上でボタンを離す。 ・選択したボタンの編集と書かれているボタンをクリックして表示されたプルダウンメニューの名前と書かれている右の四角の中にマクロ実行と入れてマクロの登録と書かれている場所をクリックする。 ・表示されたダイアログボックスの中の白いボックス(広い方)にThisworkbook.testと書かれている部分にポインターをあわせてクリックするとその上の白いボックスの中に同じものが表示されるので、それを確認後OKボタンでダイアログボックスを閉じ、ユーザー設定ダイアログボックスも×ボタンを押して閉じる。 ・表示されているツールバーにマウスポインターをあわせ、浸りボタンを押したままメニュバーのところまでドラッグする。 マクロ実行ボタンをクリックするとマクロが走り出し、貴方様の思い通りの操作を確認できると思います。 オートフィルターは、手で表示させるようにしてあります。 不都合な点・ご不明な点がございましたらお気軽にお知らせ下さい。貴方様の思い通りの動作が実現できるまで、ご一緒に考えていきたいと思います。

mako438
質問者

お礼

ありがとうございました。お陰様で思い通りの動きになりました。 また宜しくお願いします。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

(簡単化したテストデータ)Sheet1のA1:C7 県 氏名 住所 東京 大田 一郎 東京都中野区 大阪 小田 次郎 大阪府枚方市 愛知 神田 彬 愛知県小牧市 東京 恩田 和 東京都新宿区 大阪 上田 哲 大阪府大阪市 東京 下田 寛 東京都青梅市 (Criteria)CriteriaとしてA1:C2 県 氏名 住所 大阪 (結果)Sheet3のA-C列 県 氏名 住所 東京 大田 一郎 東京都中野区 東京 恩田 和      東京都新宿区 東京 下田 寛      東京都青梅市 愛知 神田 彬      愛知県小牧市 大阪 小田 次郎 大阪府枚方市 大阪 上田 哲      大阪府大阪市 結果はSheet2のA2に 東京-実行、愛知-実行、大阪-実行の結果です。 (コード) Sub Macro1() Dim sh1, sh2, sh3 As Worksheet Set sh1 = Worksheets("sheet1") 'Set sh1 = Sheet1 Set sh2 = Worksheets("sheet2") 'Set sh2 = Sheet2 Set sh3 = Worksheets("sheet3") 'Set sh3 = Sheet3 j = 2 sh1.Activate sh1.Range("a1:c100").Select Selection.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _ sh2.Range("a1:a2"), CopyToRange:=sh1.Range("a101:c200"), Unique:=False '-------- d1 = sh1.Range("a101").CurrentRegion.Rows.Count d3 = sh3.Range("a1").CurrentRegion.Rows.Count j = d3 + 1 For i = 101 + 1 To 101 + d1 - 1 If Cells(i, 1) <> "" Then sh3.Cells(j, 1) = sh1.Cells(i, 1) sh3.Cells(j, 2) = sh1.Cells(i, 2) sh3.Cells(j, 3) = sh1.Cells(i, 3) 'P列まで羅列追加 j = j + 1 End If Next i End Sub 本番に合わせて適当に修正してください。 Sheet1の第1行を、Sheet2の第1行とSheet3の第1行に複写してから実行のこと。

mako438
質問者

お礼

ありがとうございました。 今回は#1さんの方法でやってみたところお陰様で思い通りの動きになりました。 また宜しくお願いします。

回答No.2

こんな具合でどうでしょう Sub 抽出() Sheets("sheet1").Select retmsg = MsgBox("オートフィルタで条件を指定してから「貼り付け」ボタンを押して下さい", vbOKCancel + vbInformation, "抽出") If retmsg = vbOK Then Range("A1").CurrentRegion.Select Selection.AutoFilter Range("A1").Select Else End If End Sub Sub 貼り付け() Sheets("sheet1").Select Range("A1").CurrentRegion.Select Selection.Offset(1).Select Selection.Resize(Selection.Rows.Count - 1).Select Selection.SpecialCells(xlCellTypeVisible).Copy Sheets("sheet2").Select Dim r As Long r = ActiveSheet.Rows.Count Cells(r, 1).End(xlUp).Offset(1).Select ActiveSheet.PasteSpecial Range("A1").Select Sheets("sheet1").Select Application.CutCopyMode = False Selection.AutoFilter Range("A1").Select Sheets("sheet2").Select End Sub シート1でマクロ「抽出」を実行。オートフィルタで条件を設定したら、次にマクロ「貼り付け」でシート2の最下行の続きに貼り付け。 ただし、A~P列には全て空の列はないと仮定して作りました。 では、頑張って下さいね。

mako438
質問者

お礼

ありがとうございました。 今回は#1さんの方法でやってみたところうまく出来ました。 また宜しくお願いします。

  • vbafriend
  • ベストアンサー率47% (17/36)
回答No.1

初めまして。私でよろしければサンプルマクロを組んでみたいと思います。 これだけでは、マクロを組むことが出来ません。もしご希望の節は、私が手元で貴方様と同じ操作をすることが出来るように、具体的に詳しく操作方法を教えて下さい。コードをコピー&ペーストするだけで貴方様の思い通りの動作をするサンプルマクロを組めるかと思います。 お手数をおかけいたしますが、よろしくお願いいたします。

mako438
質問者

補足

早速のお返事ありがとうございます。 補足ですが"Sheet1"のA~P列"にあるデーターにオートフィルタを 掛けるのは条件が色々かわるのでハンドでやります。 コピーというボタンを設けてクリックすると フィルタで出てきた結果のデータを"保存用シート"に溜まっているデータ ("Sheet1"同様の配列)に追加していきたいのですが・・・ つたない説明ですみません。

関連するQ&A

  • オートフィルターで抽出されたデータの参照方法について

    1000件以上のデータをA,B、C列にオートフィルターをかけて抽出されたデータのA,B、C列およびD列目の値を参照する式を組みたいのですが、当然のことながらオートフィルターをかける都度、表示されるセル番地が変わるので式がくめません。 多分、マクロでコピーしてどこかにペーストすればいいのでしょうが、まったくわかりません。お教えください。

  • excel オートフィルター後の通し番号

    A列からP列まで1から100までの表に A列に 通し番号を つけてあります。 これを B列や G列で フィルターをかけて 抽出した データの一覧を 印刷または集計するときに 通し番号を つけてあるA列の 番号が 抽出していないデータも当然かぞえてあるから 抽出データのみに通し番号がつくようにしたいです。 できれば フィルターかけたと 同時に変わる仕組みが望ましいです。 別シートにコピーはしないで このままの表をつかって できないものでしょうか?

  • エクセルのオートフィルタ

    エクセルで住所録を作り、そのうちの東京都のデータだけオートフィルタで抽出し、それを別のシートにコピーして表を作りたいのですが、抽出はできても表にすることができません。オートフィルタで抽出したデータだけを一覧表にすることはできないのでしょうか?

  • オートフィルタ時に非表示にした列を含めてコピー、貼り付け

    シートのいくつかの列を非表示にしています。 オートフィルタをした状態でコピーして別シートに貼り付けるマクロ を作りましたが、非表示の列が貼り付けられません。非表示の列の内容も貼り付けたいのです。 一度非表示列を表示させてコピー、貼り付けするしかないのでしょうか。

  • エクセル オートフィルター

    オートフィルターについて教えて下さい。 同じシート内で、独立した複数のオートフィルターを用いることは出来ますか。下に示すような場合にAとB列に独立してオートフィルターを設定して、果物を抽出して、CとD列には野菜だけを抽出する。みたいなイメージです。オートフィルターやマクロを用いないやり方で他のやり方でもできる場合は教えて下さい。    A    B      C    D 1  りんご 果物   りんご  果物 2 キャベツ 野菜  キャベツ  野菜 3  イチゴ 果物   イチゴ  果物

  • EXCEL 貼り付け先にオートフィルタがかかっている場合の貼り付け

    excel2003 winxp 2つのファイル(ブック)があり、ファイルAにてオートフィルタを使って抽出したデータをコピーして、ブックBに貼り付ける。 ということをやりたいのですが、ブックBでもオートフィルタを使っています。オートフィルタを使っている状態のブックBにうまく貼り付ける方法はあるのでしょうか? (オートフィルタ使用後の可視セルにブックAで抽出したデータを貼り付ける感じです) わかりづらくてすみません。 よろしくお願いします。

  • EXCELのオートフィルタのコピーについて

    EXCEL2000を使用しています。 オートフィルターにて抽出し一部をコピーし同じシートの別の列に貼り付けすると 隠れている行にもコピーされ表示されたところだけにコピーされません。 よい方法はありますか?

  • オートフィルタ後の、マクロでの値の参照に関して

    オートフィルタ後の、マクロでの値の参照に関して 下記を悩んでいます。教えて頂ければ幸いです。 マクロで、あるデーター表から、オートフィルタを使用し、必要なデーターを 抽出し、マクロ内に戻し、その後の計算で使用したいと考えています。 A列、B列、C列にそれぞれ、検索条件を指定し、オートフィルタ後、下記のような状態になります。 参照したい値は、D列になります。 下記のような例では、2.5と2.7の値をマクロ内に戻したいです。 (例:オートフィルタ後) 1行  A▼  B▼  C▼  D 16行 **  **   **  2.5   20行 **  **   **  2.7 *2~15行目は見えなくなっています。 *17~19行目は見えなくなっています。 セルを参照し、マクロ内に戻すには、どのような構文(マクロ)の記述が必要でしょうか? 【備考】 ・上記の例では、セルはD16、D20となりますが、抽出条件によっては、行番号が変わってしまいます。 ・抽出後のD列のデーター数は、常に2つです。 よろしくお願いします。

  • マクロでオートフィルターの抽出が出来ない

    下記のデーターをマクロで作成しましたが、2010/03/01は抽出するが、2010/03/02以降は デバッグが発生して上手くいきません。 どの様にすれば解決できるのか、ご教授お願いします。 現状) AファイルのA列のオートフィルタオプションで、抽出条件の指定にBファイルの C6をコピーして、「Ctrl」+「V」で貼り付け抽出すると2010/03/01の24時間分の データーが抽出されます。2010/03/02を抽出するとデバッグが発生する。 データーの詳細) Aファイルに「元データー Sheet」があり、A6~A44647に、 1ヶ月分の日付が記載されてます。 (B6~B44647には、24時間を1分間隔でのデーターがあります) A列の日付は、2010/03/01~2010/03/31のデーターがあり、 「セルの書式設定」を確認すると、「標準」設定で表記されてます。 オートフィルタによりA列の、各1日分のデーターを抽出させます。 Bファイルの「作成日指定 Sheet」のB3に2010/3/1を入力すると C6には「=$B$3」で「2010/03/01」と表示する様に「セルの書式設定」 「ユーザー定義」で「yyyy/mm/dd」を選択してます。(C36まで設定) 以下C7に「=$B$3+1」で、C8には「=$B$3+2」で、C36までで「2010/03/31」 と表示させてます。

  • excel 2003 オートフィルタ!

    excel 2003で、オートフィルタがうまくいきません。 A列の2行目から、1~5までの数字がランダムに並んでいるとします。 A1セルをオートフィルタし、 条件を、オプション>3を含む で指定すると、3がフィルタされてほしいのですが 1つも抽出されません。 3で始まるもだめでした・・ フィルタで抽出するマクロをくんでいて 列は、20列以上あり、 列によって、文字や数値があります。 フォームで列を選び、検索文字を入力して Criteria1:="=*" & 検索文字 & "*", Operator:=xlAnd と言う感じでフィルタしています。 文字はできますが、数値ができないのは、なぜでしょうか・・・

専門家に質問してみよう