• ベストアンサー

エクセルでデータ抽出

こんにちは、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を使う方法でもいいです。 よろしくお願いします。

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

  • ベストアンサー
  • Hageoyadi
  • ベストアンサー率40% (3145/7860)
回答No.6

>▼ボタンをクリックし、結果をシート2へ >コピペする方が早いのではないかな? その行程もマクロに追加すればいいんです。「マクロの記録」で十分足ります。   Selection.Copy Sheets("Sheet2").Select ActiveSheet.Paste   Application.CutCopyMode = False Sheets("Sheet1").Select Range("A1").Select >以前にマクロで記述した範囲もその都度変えなければ >ならないという面倒なことにならないのかな?   Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select の記述で、カレントセルからデータの最終セルまでの範囲を選択できます。 記述範囲が連続している(途中にカラの行がない)限り、データが増減してもきちんと選択できます。

royroy
質問者

補足

Hageoyajiさん、ありがとうございます。 > Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select  【注】 > Selection.Copy >Sheets("Sheet2").Select >ActiveSheet.Paste >Application.CutCopyMode = False >Sheets("Sheet1").Select >Range("A1").Select でうまくいきました。 【注】のところは > Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select >の記述で、カレントセルからデータの最終セルまでの範囲を選択できます。 と有ったので、それを入れてみました。 ところで 1. ActiveCell.SpecialCells(xlLastCell)はどういう意味でしょうか 2. シート2に張り付けられた位置はD12でした。なぜA1ではないのかな? 張り付ける位置は上記コードのどれのことでしょうか? いろいろお聞きしてすみませんが、最後に上記だけ教えて下さい。 よろしくお願いします。

その他の回答 (6)

  • Hageoyadi
  • ベストアンサー率40% (3145/7860)
回答No.7

>ActiveCell.SpecialCells(xlLastCell) マクロの記録で、CTRL+Endのキー操作を記録するのと同じです。 アタシのは前後にオマケがついてまして、コレはCtrl+Shift+Endと同じことになります。 Application.SendKeys ("+^{end}") と記述するやり方もあります。 ほかにも Range("A1").CurrentRegion.Select では、連続するデータで空白セルに囲まれた範囲を選択 なんてのもあります。 >シート2に張り付けられた位置はD12でした。なぜA1ではないのかな? あ、D12を以前選択しておいたからでしょうね。 Sheets("Sheet2").Select の後に Range("A1").Select の記述を加えるとA1から貼り付けられます。 ってアタシもマクロの記録+αしか知らないのであまりえらそうなこといえないんです。 imo・・・さんとかnishi・・・さんなんかの足元にも及ばないので。

royroy
質問者

お礼

hageoyadiさん、ありがとうございます。 >あ、D12を以前選択しておいたからでしょうね。 なるほど、そういうことですか。 色々教えていただいてありがとうございます。

  • Hageoyadi
  • ベストアンサー率40% (3145/7860)
回答No.5

#1です。 VLOOKUPについては#1での参考URLを見ていただくとして、「ボタン一発で」の方法はマクロを使うことになります。 構文がややこしくなりますが、とっつきやすい方法は、マクロの記録を使うことです。 あくまでも一例ですが、 オートフィルタを設定した状態で Sub Macro2() msg = "検索する 科目名 を入力して下さい" dat = InputBox(msg, "種類名入力") Range("a1").Select Selection.Autofilter Field:="1", Criteria1:=dat End Sub これをボタンに登録すると科目別のオートフィルタ結果が導き出せます。 この作業に抽出データをコピーしてシート2に貼り付ける作業までを追加すればご希望のことがボタンに登録できます。 マクロの記録については参考URLへ。

参考URL:
http://www.moug.net/skillup/adpc/ay001-1.htm
royroy
質問者

補足

Higeoyadiさん、ありがとうございます。 お教えいただいた方法試してみました。 >Selection.Autofilter Field:="1", Criteria1:=dat は、食費がB列にあるので Selection.Autofilter Field:="2"で成功しました。 しかしこの方法より オートフィルタを設定して、手作業でB1にある食費の セルにある▼ボタンをクリックし、結果をシート2へ コピペする方が早いのではないかな? また、もとの出納帳の内容が日々増えることを 考えると、同じ食費に限ってみても、オートフィルタの 結果をコピーする範囲が変わるので、以前にマクロで 記述した範囲もその都度変えなければならないという 面倒なことにならないのかな? せっかく教えてもらったのに気を悪くしないで下さいネ!

  • nihonjinn
  • ベストアンサー率39% (79/200)
回答No.4

>F2に1,2,3と数を並べて は F2からF列に1,2,3と入力していく という意味です。訂正します。

  • nihonjinn
  • ベストアンサー率39% (79/200)
回答No.3

作業列を作ってしまいましょう。 データが二行目から始まっているとするとE2に =IF(B2="食費",ROW()-1,"") と入力し,下にコピーします。 次にF2に1,2,3と数を並べてG2列に =IF(ISERROR(SMALL(E:E,F2))),"",OFFSET(A1,SMALL(E:E,F2),0)) これで日付を抽出できます。 まずE列で上から何番目に一致するデータがあるかを抽出し、 SMALL(E:E,F2) でE列の中からF2番目に小さい数を指定します。 OFFSET($A$1,SMALL(E:E,F2),0) でセルA1から「SMALL(E:E,F2)」行下で「0」列右側のセルを指定できます。科目、収入を抽出するなら「1」列右側,「2列」右側と指定してやればいいです。 IF(ISERROR(SMALL(E:E,F2))) としているのはエラー対策です。

royroy
質問者

補足

nihonjinnさん、こんにちは。 お教えいただいた、 =IF(ISERROR(SMALL(E:E,F2))),"",OFFSET(A1,SMALL(E:E,F2),0))は SMALL(E:E,F2)))の最後のカッコが1つ多かったですが うまくいきました。 ただ私の場合、シート2に食費を抽出したいので、 シート2に上記式を各行にはりつけていくことに なると、かなり手間がかかりそうです。 実は、シート3には被服代、シート4には雑費 シート5には光熱費などのように複数シートに科目を分けて抽出したいと思っています。 それを、シート1のボタンを1回押すだけで出来るよう にする方法はないでしょうか よろしくおねがいします。

回答No.2

データをすべて選択して、 メニューバーのデータ→フィルタ→オートフィルタで 科目の列に出る▼をクリックして、食費を選択すると 食費の行のみ抽出されます。 抽出されたものを右クリックでコピー、 新しいシートに貼り付けでどうでしょうか。

royroy
質問者

補足

>メニューバーのデータ→フィルタ→オートフィルタで >科目の列に出る▼をクリックして、食費を選択すると >食費の行のみ抽出されます。 >抽出されたものを右クリックでコピー、 >新しいシートに貼り付けでどうでしょうか。 なるほど、これでうまくいきました。 ところで、同じ事を自動的にしたいのですが シート1にボタンを付けて、ボタンを押すと 自動的にシート2に抽出できないでそうか?

  • Hageoyadi
  • ベストアンサー率40% (3145/7860)
回答No.1

単純にオートフィルタをかけた後コピーして張り付けるのは手順が多すぎてダメですか? でしたら、 VLOOKUP関数をシート2に適用するのも手です。

参考URL:
http://homepage1.nifty.com/kenzo30/ex_kisotyu/ex_ks_tyukyuxb2.htm
royroy
質問者

補足

Higeoyagiさん、ありがとうございます。 Shigechamaにもおしえていただいたとおり うまくいきました。 ところで、VLOOKUP関数をシート2に摘用するとは 具体的にどのようにするのでしょうか? また、同じ事を自動的にしたいのですが シート1にボタンを付けて、ボタンを押すと 自動的にシート2に抽出できないでしょうか?

関連するQ&A

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

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

  • VBAで特定の条件に合致しているデータを抽出する方法

    家計簿シート○月.xlsで Sheet1には 列A:収入、列B:支出、列C:(支出/収入)率(%) で、行にはそれぞれの値が入力されています。 具体的には   A   B   C 2 収入 支出  率 3 1000 950  95% 4 500  250  50% 5 2000 4000 200%   :  :  :   ここで、 1:ボタンを押すと    ↓ 2:読み込むファイルを聞いて、ここで   家計簿シート○月.xlsを読み込んで(開いて)    ↓ 3:Sheet1の列Cの値が90%以上の行だけを抜き出して (抽出して)    ↓ 3:それをSheet2に表示する   (2行目の収入、支出、率という文字列も入れて) というプログラムをVBAで組みたいのですが どう組めばいいのかアドバイスをお願いします。

  • データ抽出

    VBA初心者です。 エクセルで2枚のシートを練習用で作成しました。 画像上段がシート1で元データです。 下段が転記先の表で、シート2です。 シート2は、今はデータが参考に貼りつけてありますが 普段はマクロで作業後は消去して、空白にしています。 今したい処理が 元データをINPUTBOX関数を使って抽出し、 NO,購入日付、分類、感想、備考のデータを下段画像シート2のように 転記したいのです。 抽出条件のキーになるのは、主に「購入日付」と「分類」です。 どこかのセルに、日付を範囲指定で入力すれば、条件に当てはまる データをシート2に表示させたいです。 四半期ごとのデータを検索したいためです。 INPUTBOX関数でなくても、どこかの特定のセルに範囲指定する日付を入力 して、抽出してもかまわないです。 あと、分類は割と「飲料水」を抽出して、印刷する頻度が多いのですが 今後の参考に、全部の分類を抽出できるスタイルが望ましいです。 現在は、一行一行日付と分類を目視で確認しながら シート2にコピペ作業しているので 時間がかかります。 エクセルの機能でフィルタ等をしてみたのですが、 関数やVBAで素早くしたいのですが、なかなかコードが思いつきません。 お願いします。

  • VBAのデータ抽出(間引き)について

    VBAのデータ抽出(間引き)について 当方VBA初心者なのですが、 VBA(EXCEL2007)を使用してグラフ作成をしようと思っています。 元データの書式は以下の通りでデータ行は30秒間隔で 一カ月分(8万行)あります。 2010/08/01 01:00:34     1112.83 2010/08/01 01:01:04     1110.43 2010/08/01 01:01:34     1111.87 2010/08/01 01:02:04     1112.23 2010/08/01 01:02:34     1112.43 2010/08/01 01:03:04     1112.03 2010/08/01 01:03:34     1110.83 2010/08/01 01:04:04     1112.43 2010/08/01 01:04:34     1110.63 ・・・ データ量が多すぎるので間引きしようと思っています。 間引き(抽出)条件は以下の様に考えています。 10行毎(5分毎)に値の最大値の行を抽出して別シートへコピー。 VBAマクロで処理するにはどの様な コードで実現可能でしょうか? 教えて頂きたく。よろしくお願いします。

  • エクセル:同じものを複数抽出して別のシートに自動表示させる方法

    シート1 日付 番号 物件名 科目   摘要  収入 支出   10/1  1  A  雑費    電球代     100 10/2  3  B  郵送費      ~     200 10/3  2  C  振込手数料   ~     500 10/4  1  A  雑費      ~      100  ・   ・  ・ シート2         ↓  番号(物件番号):1  物件名:A 日付    科目    摘要    金額(支出のみ) 10/1    雑費    電球代   100 10/6    雑費           100 合計                  200     番号(物件番号):2  物件名:B 日付    科目    摘要    金額(支出のみ) 10/1    郵送代         100  ・  ・  ・ このようなデータを毎月作成し、別のシート1枚に物件番号・物件名(現在40で今後も増加予定)ごとにそれぞれ表を自動表示するように作成したいのですが、うまくできません。どなたかご存知の方教えてください。どうぞ宜しくお願いいたします。

  • EXCELでデータを抽出してコピペしたいです

    指定した日付より、それ以前の誕生日(指定日も含む)の人だけを抽出してコピペしたいのですが WORKBOOK1のSHEET1(名簿)のH列に生年月日(他の列にもデータあります) データは、1200件(行)あります。 WORKBOOK2のSHEET1(該当者)名簿と配列は同じです。 A1に指定の日付をいれます。 WORKBOOK1のSHEET1(名簿)より抽出したデータのペースト位置は、A3からです。 VBAで可能でしょうか?

  • エクセルVBA 日付で抽出、並び替え

    こういう場で初めて質問させていただきます。 どうぞよろしくお願いします。 エクセルVBAで日付(月毎)でデータを抽出し、並び替えを行いたいのですが, B列に日付が入りC~F列には帳簿の仕訳が入ります。 ここで B2 に日付が入って、C2~F2とC3~D3にデータが入った場合に オートフィルタをかけたら、3行目は日付の欄が空白なので うまく抽出できません。 なお、2行目と3行目は1つの仕訳なのでばらばらになるのも困ります。   仕訳は最低1行から最大で6行になります。 このように日付欄は1行だけど、その日付に対応する内容が数行に渡って入るような場合に日付から月毎にデータ抽出するには どのようなコードを書けばいいのでしょうか? A B    C      D     E    F  日付 借方科目 金額 貸方科目 金額  10/10 消耗品  300    現金   500        雑費   200   10/9   交際費  500    現金   500   10/8    雑費   200     現金   200 汚い表ですが、上記のような場合です。 10/10の分は2行で1つになりますので、このような場合です。 どうかよろしくご指導お願いします。 

  • excel データの抽出について

    仕事でexcelの表からデータを抽出して資料を作成したいと思っています。 ≪シート1≫表から≪シート2≫表へ「1が立っているデータのタイトル(あ~お)を抜き出したいのです。どなたか方法があれば教えてください。(できればVBA等を使わないで作りたいです。) ≪シート1≫     あ い う え お A  1    1 B     1 1   1 C         1 1 ≪シート2≫ A あ う B い う お C え お

  • エクセルでデータの抽出する際に困っています

    エクセルで特定の行のデータを抽出する方法を教えてください。 抽出方法を以下に示します。     A   B   C   D   E   F   G   ---------------------------------- 1l  10   11   0   0   0   0   0 2l  12   13   0   0   0   0   0 3l  14   15   1   2   3   4   5 4l  16   17   0   0   0   0   0 5l  18   19   0   0   0   0   0 6l  20   21   6   7   8   9   10 7l  22   23   0   0   0   0   0 というような感じのエクセルデータに対して、     A   B   C   D   E   F   G    ---------------------------------- 1l  14   15   1   2   3   4   5 2l  20   21   6   7   8   9   10 というように、C~G列が0でない行のA~Gのデータを別シートに抽出したいのですが、 簡単な方法があれば教えていただきたいです。 よろしくお願いします。

  • 《エクセル2000VBA》「コメント」を抽出することはできますか

    こんにちは、VBAを勉強中の者です。 任意のシート(20000行×30列くらいでデータが入っています)に入力されているコメントのみを別シートに抽出し、一列に一覧表示させたいです。 自分でも調べてみて、とりあえずコメントは操作可能ということはわかったのですが、 ・任意のシートの中身を行と列の二次元に検索していく方法(特定の行のみ検索するコードはあちこちで見受けられるのですが) ・拾ったコメントの内容を別シートに書き込むのを「高速で」行う方法(その都度書き込んでアクティブセルを移動させる…というのならわかるのですが、データの量が膨大なので、これだと途方もない時間がかかってしまいそうです) 以上の方法がわからないでいます。 また、抽出したコメントは、配列関数を使えば処理が早いのでしょうか。 となると、書き込む件数が何件発生するかわからない場合はどうするのだろうか、と行き詰まっています。 (さらに贅沢を言いますと、コメントが入っていたセル番号が隣の列に入っているといいな、という希望もありますが、これはあくまで第二希望です) VBA勉強中ですので、パーフェクトに動くコードでなくても構いません。断片的なヒントでも大歓迎です。 VBAに詳しい方、ご教示頂けますでしょうか。