• ベストアンサー

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

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

  • kyonti
  • お礼率54% (139/256)

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

  • ベストアンサー
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

  • エクセルでデータ抽出

    こんにちは、royroyです。 エクセルで、シート1の収支データの特定科目を抽出して シート2にコピーしたいのです。 シート1のデータは 日 付 科 目 収入  支出 5/1 食費      2500 5/3 衣服代     3000 5/3 雑費       200 5/6 食費      1200 5/7 雑費       500 5/8 給料 20000  で、この中から食費の行をすべて抽出して シート2に 5/1 食費      2500 5/6 食費      1200 のようにしたいのです。 VBAを使う方法でもいいです。 よろしくお願いします。

  • Excelでのデータの抽出などについて

    Excelで(1)のSheet金銭出納帳を作りました。 その出納帳に記載した分の、水道光熱費とか福利厚生費とかを科目別に他のSheetに抽出していきたいのですが・・・ (科目別のSheetを作りたい) (1)の金銭出納帳だけに入力すれば、他の科目別のSheetには、勝手に入力されるようにしたいです。 文章が下手ですみません。 宜しくお願いします。

  • エクセルでデータの抽出方法

    Windows7、エクセル2010を使用しています。 エクセルで、指定したセルのデータを抽出する方法についての質問です。 エクセルに60000行×1列のデータがあるとして、 その中から99行目、199行目、299行目、・・・59999行目のデータを抽出しなければなりません。 手作業でコピーするのは時間的に非現実的なので、なにか抽出する方法はないでしょうか? 100行単位で列を変えれば、99行目のみをコピーし、行と列を置き換えればいいと思うのですが、そんなことは可能なのでしょうか? そのほか、何か方法があれば教えてください。

  • エクセルで抽出した不特定数のデータを行数の決まった別シートに取り込む方法を教えてください

    エクセルでマクロを作り始めた初心者です。 Sheet1に、氏名、住所、TEL、会社名、担当者、金額・・・と続くデータが6000レコードほどあります。(レコードは随時増えていきます) Sheet2では、担当者名を条件にSheet1から必要な列(上記に記載したもの5つ)のみを抽出するマクロでデータを取り出すようになっています。 抽出したデータをsheet3のフォーマットに氏名、住所、金額の列だけ入れるのですが、入れられる行が20行と決まっており、最後の行には、合計欄が入るようになっています。 不特定数のレコードを20行ごとにページを区切って印刷するにはどうしたらよいでしょうか。ご教示お願いします。

  • エクセルでのデーターのシートについて

     現在出金伝票を一つのシートに入れてから、科目別に(例えば消耗品で1シート、光熱費で1シートなど)シートを作りその都度コピー貼り付けをしています。    できれば、1つのシートに入れたものを自動的に各科目のシートに反映できるようにしたいと思っているのですがエクセルで可能なものでしょうか。  アドバイス宜しくお願いいたします。(エクセルは2003です)  

  • エクセルで抽出したデータを別シートにコピーしたいです

    エクセル2003を使用しています。 例えば、以下のような表があります。  ABC 1あ10 2い15 3あ20 4 A列が条件となり、たとえば「あ」のデータだけ抽出して、そのデータを別シートにコピーします。 同じく「い」だけを抽出して、また別のシートにコピーします。 いままでは、オートフィルタで抽出して自分でコピーをして貼り付けしていましたが、日々データが次の行に追加になるので、毎回オートフィルタしてコピーするのは大変です。 関数か、マクロかVBAを使ってする方法はありますでしょうか。 できれば日々追加になるデータのみをすでにある別シートの前日までのデータの下に追加できるようになればいいと思うのですが。 知識が乏しくできません・・・ よろしくお願いいたします。

  • マクロでのデータ抽出

    毎月の売上データの一覧から必要なデータのみ抽出して、伝票を作成します。 伝票は明細単位で抽出します。 マクロを組もうとしているのですが、1、2行目のように1案件につき明細が2つある場合があるので、どのようなコードになるのかがわかりません。 コードの中で明細をカウントして、その分だけコピーするような手順になるのでしょうか? また伝票は「分類」ごとに作成します。 こちらは分類ごとにシートを作成し、フィルタにかけたデータをコピーしようと思っています。 マクロは初心者で説明不足な部分がありましたら申し訳ありません。 よろしくお願い致します。

  • ランダムに出てくるデータの抽出

    こんにちは。 マクロ初心者です。     A  B  C  D  E  F  G 1  あ  あ  う  う  う  え  お   2  あ  あ  い  い     い  お 3  い   4      5  う        お 6  う        お 7      8  あ  お  え  え  え  お 9  あ     い     う  え  お 10   お  い  い  い  え 上記のような表があるとき。 1の行には「あ・う・え・お」 2の行には「あ・い・お」 3の行には「い」 4の行には「データなし」 5の行には「う・お」 6の行には「う・お」 7の行には「データなし」 8の行には「あ・え・お」 9の行には「あ・い・う・え・お」 10の行には「い・え・お」 このように、『行ごとに何のDataが存在しているかを取り出す』ようなマクロを組みたいのです。 関数でも可能だと思うのですが、出来るだけエクセルシートの容量を減らしたいのでマクロで組みたいと考えています。 このデータは、上記の例では5個ですが、1000個ぐらいあり全てランダムに出てきます。 何か条件が付いているデータの抽出という質問は、よく見かけるのですが、 このように何を条件とすれば良いのかわからない場合は、どのようにすれば良いのでしょうか。 どのようにマクロを組んだら良いかわからず困っています。 何卒アドバイスをお願いします。  

  • データ抽出のコピーの仕方を教えてください。

    エクセル2007で表を作っています。 シートAに、1行目が項目で2行目以降データです。350行ほどあります。 シートAのそのデータにフィルタを使って、3件ほど、抽出しました。 シートBに抽出したデータと1行目の項目を列幅やセルの色などそのままコピーしたいのですが、 コピー→貼り付けだと、書式がコピーできません。 項目と抽出したデータをそのまま、まるっとコピーできないでしょうか?

  • エクセルのデータ抽出

    会社で注文のあった業者のリストをエクセルで 作ってて450行くらいあります。 各項目には会社名や内容や価格などありますが その中には空白のセルや行もあります。 そこからA列に自分が抽出したい行に印をいれて フィルタをかけたところ、空白があるためか すべてを抽出できません。1行1行抜き出すのもいいのですが 今後、データも増えることを考えると 何かいい方法で抽出したいのですが、 どうしたらいいでしょうか? やはりマクロをつかうのでしょうか? すみませんがよろしくお願いいたします。

    • ベストアンサー
    • Mac

専門家に質問してみよう