• ベストアンサー

エクセルでデータ抽出するには?

まったくのエクセル初心者です。 エクセルで、シート1のデータの特定科目を抽出してシート2にコピーしたいのです。 シート1のデータは 5/1 消耗品    2500 5/3 水道光熱費  8000 5/5 消耗品     700 5/7 消耗品    1200 この中から消耗品と記入されている行をシート2に抽出したいのです。 マクロは全然わかりません。。簡単にできる方法は無いでしょうか?よろしくお願いします。

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

  • ベストアンサー
noname#109516
noname#109516
回答No.7

#2です。 入力間違いがあるかも知れませんのでもう一度コードを書きます。(少しだけ変えています)コード1.2の設定方法は同じです。前のものを消して書き換えてください。 1. Private Sub Worksheet_Change(ByVal Target As Range) '入力行と列を取得 rt% = Target.Row ct% = Target.Column '最終の行と列を取得 ce% = Cells(1, 255).End(xlToLeft).Column If ce% = ct% Then If Cells(rt%, 4).Value = "消耗品" Then Call t1 Cells(rt% + 1, 1).Select End If End If End Sub 2. Sub t1() re% = Cells(65536, 1).End(xlUp).Row ce% = Cells(1, 255).End(xlToLeft).Column Selection.AutoFilter Field:=4, Criteria1:="消耗品" Range(Cells(1, 1), Cells(re%, ce%)).Select Selection.Copy Sheets(2).Select Cells(1, 1).Select ActiveSheet.Paste Cells(1, 1).Select Sheets(1).Select Selection.AutoFilter Field:=4 End Sub

その他の回答 (6)

noname#109516
noname#109516
回答No.6

>完了したら右上の×で閉じても登録は勝手にできるのでしょうか? その通りです。ブックを閉じると来はSAVEを忘れずに。 >抽出するデータがD列にある場合は? 1.のコードの If Cells(rt%, ce% - 1).Value = "消耗品" Then を If Cells(rt%, 4).Value = "消耗品" Then に変更し 2.のコードの中の一部を次のように変更します。 Selection.AutoFilter Field:=2, Criteria1:="消耗品を Selection.AutoFilter Field:=4, Criteria1:="消耗品"に Selection.AutoFilter Field:=2 を Selection.AutoFilter Field:=4 に変えます。 2=Bで 4=Dです 列も1から数えています。 後から見るとひどいコードですね。(汗)

kyonti
質問者

補足

とても丁寧に書いていただいているのに、うまくいかないです・・・。やっぱりこういうのは苦手です。。 全て入力したあと、今まで入力していたものはシート2に自動でコピーされたのですが、新しく入力したらエラーですって出て、 『Private Sub Worksheet_Change(ByVal Target As Range)』 という文字が黄色で表示されています。どうしてでしょうか?たびたびでほんとにすいません。

noname#109516
noname#109516
回答No.5

#2です。 >自動で飛ぶようにしたいのです。自動でしようと思ったらかなり高度な技術が必要でしょうか・・・? その通りです。VBAの知識を必要とします。でも出来ます。VBAのコードとその設定の仕方です。 <条件> 表はシート1のA1から始まっており、1行目には項目名が書かれているとしています。(データは2行目から) 抽出する科目はB列に書かれているものとしています。 また、日付の列の最終行の下と、項目行(1行目)の最終列の右は最後まで空白のセルにしておいてください。 またオートフィルタはONになっているものとしています。 <コード> 1. Private Sub Worksheet_Change(ByVal Target As Range) '入力行と列を取得 rt% = Target.Row ct% = Target.Column k$ = Target.Value '最終の行と列を取得 re% = Cells(65536, 1).End(xlUp).Row ce% = Cells(1, 255).End(xlToLeft).Column If ce% = ct% Then If Cells(rt%, ce% - 1).Value = "消耗品" Then Call t1 Cells(re% + 1, 1).Select End If End If End Sub 2. Sub t1() re% = Cells(65536, 1).End(xlUp).Row ce% = Cells(1, 255).End(xlToLeft).Column Selection.AutoFilter Field:=2, Criteria1:="消耗品" Range(Cells(1, 1), Cells(re%, ce%)).Select Selection.Copy Sheets(2).Select Cells(1, 1).Select ActiveSheet.Paste Cells(1, 1).Select Sheets(1).Select Selection.AutoFilter Field:=2 End Sub <設定> (1)「ツール」→「マクロ」→「Visual Basic Editor」でエディタを起動します。 (2)エディタの左上のウィンドウにSheet1,Sheet2,Sheet3と表示されたところがあると思います。そこのSheet1をダブルクリックし開きます。白紙の画面が表示されるはず。 (3)その白紙に1.のコードを全てコピーし(Private…以下)貼り付けます。 (4)エディタのメニュの「挿入」→「標準モジュール」を選択 (5)するとまた白紙のシートが表示されるはずです。 (6)その白紙のシートに2.(Sub…以下)のコードを全てコピーし貼り付けて下さい。 以上で完了です。 このVBAはボタンを押さなくても消耗品という行が入力されるとその都度シート2に消耗品のみのリストをコピーしています。

kyonti
質問者

補足

とっても詳しくありがとうございます。 わからないところがあるのですが、 >(6)その白紙のシートに2.(Sub…以下)のコードを全てコ ピーし貼り付けて下さい。  以上で完了です。 完了したら右上の×で閉じても登録は勝手にできるのでしょうか? それと、抽出するデータがD列にある場合はどこを変更したらいいのか教えていただけたらとても助かります。 よろしくお願いします。

  • cule
  • ベストアンサー率49% (185/374)
回答No.4

できるだけ簡単にする方法なら...やはりマクロです^^; ●マクロの記録 メニュー「ツール」→「マクロ」→「新しいマクロの記録」→マクロ名(任意)を入力 データのある表内(任意)をクリック メニュー「データ」→「オートフィルタ」→消耗品を表示 メニュー「編集」→「ジャンプ」→「セル選択」→「可視セル」→コピー シート2を表示させ、貼り付けたい場所で貼り付け→セルA1をクリック→「記録終了(マクロ)」 ●ボタンの作成 シート1内で、メニュー「表示」→「ツールバー」→「フォーム」 表示されたフォームツールバーより「ボタン」 任意の位置でドラッグ→マクロ名を選択→「OK」 ボタンに任意の名前を入力 これで完了です。 次回からマクロボタンをクリックするだけで自動的に抽出、シート2へコピーされます。 但し、この方法だとシート1のデータが全てシート2にコピーしますので、表以外のセルに何かタイトルなどを入力されている場合はそれらもコピーされることになります。 うまくいけば良いのですが...いかがでしょうか?

noname#56555
noname#56555
回答No.3

こんにちは。 オートフィルタはどうですか? リスト内のセルをどれか一つ選択して データ→フィルタ→オートフィルタをクリックすると 先頭行にリストボックスが出来るのでそこから「消耗品」を選ぶと消耗品のみが表示されると思います。 行ごとそのままコピーして別シートに貼付も出来ます。 当方excel97の環境なので多少違いがあったらごめんなさい…

kyonti
質問者

お礼

早速のご回答ありがとうございます。 NO.2の方へと同じお礼で申し訳ないのですが、 オートフィルタは少し使用してみました。 できれば、日々『消耗品』を入力したら自動で飛ぶようにしたいのですが。 自動でしようと思ったらかなり高度な技術が必要でしょうか・・・?

noname#109516
noname#109516
回答No.2

オートフィルターを使うのがいいと思います。 (1)表の中のどこかのセルをクリックしメニューの「データ」→「フィルタ」→「オートフィルタ」をクリックします。これで項目の見出しのところに▼のボタンが出ます。 (2)科目の項目の▼をクリックし”消耗品”を選択すると消耗品だけの表が出来ています。 (3)この表全体をコピーしシート2に貼り付けてください。

kyonti
質問者

お礼

早速のご回答ありがとうございます。 オートフィルタを少し使ったのですが、 できれば、日々『消耗品』を入力したら自動で飛ぶようにしたいのです。 自動でしようと思ったらかなり高度な技術が必要でしょうか・・・?

  • ichi1123
  • ベストアンサー率20% (1/5)
回答No.1

科目の列で並び替えをしてあげて、消耗品の行をコピー、ペーストしたら? 並び替えは、「データ(D)」のメニューにあります。 詳しい操作方法は下記URLで。

参考URL:
http://www.shuiren.org/chuden/teach/excel/sort/index-j.html
kyonti
質問者

お礼

早速のご回答ありがとうございます。 やっぱり並べ替えしかないのでしょうか・・ できれば、日々『消耗品』を入力したら自動で飛ぶようにしたいのですが。 自動でしようと思ったらかなり高度な技術が必要でしょうか・・・?

関連するQ&A