Excelで行の抽出方法
- Excelの特定の条件に基づいて行を抽出する方法を紹介します。
- 具体的には、指定したコードと一致する行を別のシートに表示する方法です。
- この方法は計算式やマクロを使用して実現することができます。
- ベストアンサー
EXCELでの行の抽出
sheet1に A B C D 1 日付 金額 備考 コード 2 01 1000 あいう 1 3 10 2000 えおか 3 4 20 3000 きくけ 4 5 30 4000 こさし 1 . . . という感じで元データ(100行ほど)が入っています。 これを元にしてsheet2に A B C D 1 1 2 日付 金額 備考 コード 3 01 1000 あいう 1 4 30 4000 こさし 1 . . . というふうに表示したいのです。 sheet2のセルA1に入っているコードと一致するコードが入っているsheet1の行を抽出してsheet2に行の隙間なく表示させたいのです。 こんなことはできるのでしょうか? メニューからコマンドを選択して・・・という方法ではなく、計算式かマクロで実現したいのです。 エクセル2000、Win98です。よろしくお願いします。
- MSZ006
- お礼率95% (90/94)
- オフィス系ソフト
- 回答数3
- ありがとう数5
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
マクロでの回答が出ている様ですので、関数のみで行う方法を紹介します 【考え方】 1)Sheet1の最左端に作業用の列を1つ設けます 2)作業用列に、Sheet2のA1と同じ値がE列(質問例示のD列:コード)が 同じであれば、E列にその行まで出てきたコードの数をセットします ==>Sheet2A1と同じコードのデータのみ 1・2・3・4・・と連番がセットされます 3)あとは、Sheet1上で連番を元にVLOOKUP関数で参照します 【設定手順】 1)Sheet1のA列名を右クリックして"挿入"を選択し、作業列を挿入 2)Sheet1のA2セルに以下の式を入力してA3~Anにコピーします =IF(E2="","",IF(E2=Sheet2!$A$1,COUNTIF($E$2:E2,E2),"")) ・E2(コード)が空白の時は空白をセット ・E2がSheet1のA1と同じであれば、E2から現在行のE列までの E2と同じコードの数をセットします ・コードが異なる場合は空白をセットします 3)Sheet2のA3セルに以下の式を入力してA3~Dnにコピーします =IF(ISNA(VLOOKUP(ROW()-2,Sheet1!$A:$E,COLUMN()+1,FALSE)),"",VLOOKUP(ROW()-2,Sheet1!$A:$E,COLUMN()+1,FALSE)) ・VLOOKUPで検索がエラーになった場合空白をセットする為に ISNA関数でVLOOKUPを試行してチェックします ・エラーでない時改めてVLOOKUPで検索し値をセットします VLOOKUP(検索値,検索範囲,参照列,検索の型) ●検索値:ROW()-2 現在行番号から表示行まで行数を減算し 1・2・3・・・と変化させます ●検索範囲:Sheet1!$A:$E (絶対参照でA~E列とします) ●参照列:COLUMN()+1 Sheet2のA列に検索範囲の2列目 Sheet2のB列に検索範囲の3列目・・と表示するので 現在列番号-1とする事で列に対応した値を参照します ●検索の型:FALSE 同一検索値のみとします *****以上でご質問の表示が可能になります****** AnやDnとあるセルは、入力が予想される行数より多めにセットしても 式内でデータの有無を判断していますので、問題有りません。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17068)
エクセルのシートに下記Aのデータをテスト的に作りました。 そして下記VBAをModule1に入力し、実行しました。 するとBのように抽出できました。 ------------ Sub Test01() Range("A1:C10").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= Range("A12:C13"), Unique:=False, copytorange:=Range("a15") End Sub (1行の文字数制限で、改行が無理に行われている部分が 発生すると思いますが、ご注意下さい。) 見だしのコード1 コード2 コード3も含めてRange 指定してください。CriteriaRangeも同じように、 見だしのコード1 コード2 コード3も含めてRange 指定してください。 -----A----- コード1 コード2 コード3 a cc 1 s vv 2 d bb 3 g gg 1 h hh 1 j ee 4 u rr 5 I t 4 o uu 1 コード1 コード2 コード3 1 -----B------ コード1 コード2 コード3 a cc 1 g gg 1 h hh 1 o uu 1
お礼
ご回答ありがとうございました。 同じ結果を得るにも色々な方法があるんですね。とても勉強になります。
- nishi6
- ベストアンサー率67% (869/1280)
Sheet2のA1に数値を入力してマクロ『抽出』を実行します。 ツール→マクロ→Visual Basic Editor でVBE画面に移り、挿入→標準モジュールで標準モジュールを挿入し下記コードを貼り付けます。 シートは、Sheet1、Sheet2として、転記する範囲も質問通りです。 また、マクロを実行する前に、シート2は初期化しています。(前の出力を消去) ご参考に。 Sub 抽出() Dim ws1 As Worksheet 'シート1 Dim ws2 As Worksheet 'シート2 Set ws1 = Worksheets("Sheet1") Set ws2 = Worksheets("Sheet2") Dim kijyun As Long 'シート2のA1の値 kijyun = ws2.Range("A1").Value 'シート2をきれいにする With ws2 .Cells.ClearContents 'シート2をクリアする .Range("A1") = kijyun 'A1を書き直し .Range("A2:D2").Value = ws1.Range("A1:D1").Value '表題を転記 End With Dim rw1 As Long 'シート1の行カウンタ Dim rw2 As Long 'シート2の行カウンタ rw1 = 2: rw2 = 3 With ws1 '照合しながら転記する While .Cells(rw1, 4) <> "" If .Cells(rw1, 4).Value = kijyun Then ws2.Range("A" & rw2 & ":D" & rw2).Value = .Range("A" & rw1 & ":D" & rw1).Value '値を転記 rw2 = rw2 + 1 End If rw1 = rw1 + 1 Wend End With End Sub
お礼
ご回答ありがとうございました。 とても勉強になりました。マクロが使いこなせるとエクセルでもいろんなことができそうですね。
関連するQ&A
- エクセルで、条件にあう複数の行を別のシートに抽出する
《どなたか、お教え下さい》 エクセルで、条件にあう複数の行を別のシートに抽出してまとめる。 「sheet1」の下記の基本データを「sheet2」に「得意先」ごと「日付」の早い順にまとめたいのでが。関数を使ってできないものか、どなたかお教え下さい。「マクロ」や「Access」は使用したことがないので、関数を使ってやりたいと思いますが、できるものでしょうか。よろしくお願いします。 sheet1 番号 得意先 日付 商品名 商品詳細 金額 備考 1 A 2 B 2 B 4 D 5 E 6 F 2 B 3 C 5 E A B 番号 得意先 1 A 2 B 得意先名は、番号を入力することで表示されるように 3 C 関数「VLOOKUP」を使って表示させるようにしていま 4 D す。 5 E 6 F
- ベストアンサー
- オフィス系ソフト
- エクセル、任意の「行」だけを抽出したい。
こんなことできますか? A1:F100のセル内にランダムに数字が入っています。 質問1) この中から 1行目→3行目→5行目と一つ飛ばしで入っているデータを抽出してH1:M100の範囲内に表示させるにはどのような操作をすればいいのでしょうか?関数とかで簡単に抽出表示させる技とかあればいいのですが・・・。 A1-B1-C1-D1-E1-F1 A2-B2-C2-D2-E2-F2 A3-B3-C3-D3-E3-F3 A4-B4-C4-D4-E4-F4 A5-B5-C5-D5-E5-F5 A6-B6-C6-D6-E6-F6 A7-B7-C7-D7-E7-F7 ・・・ A100-B100-C100-D100-E100-F100 の中から A1-B1-C1-D1-E1-F1 A3-B3-C3-D3-E3-F3 A5-B5-C5-D5-E5-F5 ・・・ を抽出して H1-I1-J1-K1-L1-M1 ・・・ H100-I100-J100-K100-L100-M100 の範囲内に表示させたいです。 質問2) 同様に、 1行目→4行目→7行目と二つ飛ばしで入っているデータを抽出してO1:T100の範囲内に表示させるにはどのような操作をすればいいのでしょうか?関数とかで簡単に抽出表示させる技とかあればいいのですが・・・。 ※ 説明がわかりにくいかもしれませんが、よろしくお願いします。
- ベストアンサー
- その他MS Office製品
- EXCEL で 数値別に その行を 別sheetの表に 貼り付けたい。
一回のマクロで 移動できないでしょうか _____________ A B C D 1 日付 コード 仕入れ金額 数量 2 10/2 0098 20 9 3 10/2 0008 21 9 4 10/3 0128 23 10 5 10/4 0098 24 9 6 10/9 0128 23 12 コード0098のデータ行を sheet2 へ コード0128のデータ行を sheet3 へ コード0008のデータ行を sheet4 へ コピーか 移動できないでしょうか? よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- エクセル関数で行を抽出したいのですが…
エクセルでsheet1にA2:AQ2034とデータがあります。 A列=コード(重複コードなし) B列=商品名(重複商品名なし) C~AQ=月々の売上(2003.1~2006.5までの月々売上) これをsheet2でA列、A1をタイトル行とし、A2以下にコードを入れると そのコードの行(B~AQ)が抽出されるようにしたいのですが、 関数でどのようにしたらいいでしょうか? ご教授お願いします。
- ベストアンサー
- オフィス系ソフト
- エクセルで特定の行を抽出させる方法について。
エクセルでの関数についての質問ですが、 A B C D 1 名前 日付 場所 時間 2 Aさん 10/7 工場1 8.0 3 Bさん 10/7 工場1 8.0 4 Cさん 10/7 工場2 4.0 5 Cさん 10/7 工場1 8.0 6 Aさん 10/8 事務所 8.0 7 Cさん 10/8 工場2 8.0 8 Aさん 10/9 事務所 4.0 以上の表から別のシート2にAさんだけの行を抽出するには、どのようにすれば良いのでしょうか? INDEXやMATCH・LOOKUPを使っていろいろ試したのですがイマイチうまく行かないもので・・・。 因みに、シート2のイメージは A B C 1 名前 : Aさん 2 3 日付 場所 時間 4 10/7 工場1 8.0 5 10/8 事務所 8.0 6 10/9 事務所 4.0 このような感じです。 よろしくお願いします。
- ベストアンサー
- Excel(エクセル)
- エクセル抽出に関して教えて下さい。
エクセル初心者なんですが、抽出について教えて下さい! 例 シート(1) A B C D E 1 8 2 ■ シート(2) A B C D E 1 4 5 6 7 8 2 1 1 3 7 2 3 5 6 7 1 2 シート(1)のB2に シート(1)のA1に入った数字を シート(2)のA1~E1の中で探して 該当した数字の列の3行目をシート(1)のB2に表示させる。 すみません、意味不明だったらごめんなさい。 ご理解いただける方、よろしくお願い致します。
- 締切済み
- オフィス系ソフト
- エクセルで、データのある行だけを抽出したい。
エクセルのSheet1にデータが入っており、セルが空白でない行のデータのみを、Sheet2に抽出したいと思っています。 Sheet2にあらかじめ関数を入れておく方法にしたいため、関数について教えてください。 タイムテーブルで予定を管理するような表で、A~Hまでにデータが入っています。 予定を入れる際にはE列には必ず入力をするため、E列が空白でない行のみを抽出したいです。 A|B|C|D|E|F|G|H 月|日|時間|… 11|22|10:00|… 11|22|10:30|… 時間枠は10:00~17:00の30分刻みで、1日15行使用するので、1年で5475行まで使用します。 1行目はタイトル行なので、データは2行目から入力しています。 フィルタオプションで抽出する方法や、それをマクロで登録しておく方法は分かったのですが、あとから予定を追加することがあるため、マクロを実行する度にデータが置き換わると困ってしまいます。 また、抽出したSheet2のI列以降には備考などを入力したいため、やはり後から列がずれると困るため、A~H列に関数を入れておく方法で実行したいと思います。 よろしくお願いいたします。
- ベストアンサー
- その他MS Office製品
- エクセルの順位抽出について
Sheet1のA列にコード、B列に商品名、C列に分類 D列に売上数、 E列に売上金額を入力した一覧表があります。 A_1:1000 B_1:牛肉 C_1:食品 D_1:20 E_1:3000 A_2:1050 B_2:お茶 C_2:飲料 D_2:18 E_2:3010 A_3:2000 B_3:鉛筆 C_3:文具 D_3:12 E_3: 900 A_4:2050 B_4:お米 C_4:食品 D_4:12 E_4:9010 A_5:3000 B_5:牛乳 C_5:飲料 D_5:25 E_5:2000 A_6:3050 B_6:定規 C_6:文具 D_6:28 E_6: 700 中略 A_300:10000 B_300:肉まん C_300:食品 D_300:38 E_300:9000 1.食品対象で売上金額の上位20のコードをSheet2のA列に表示 2.全商品対象で売上金額の上位20のコードをSheet3のA列に表示 上記の様な抽出をしたいのですがどの様な関数を使用すれば良いでしょうか? (オートフィルタを使用してのコピペという手作業をなくすためにSheet1の内容が更新されれば自動でSheet2,3の内容も更新されている のが希望です) よろしくお願いします。
- ベストアンサー
- その他MS Office製品
- EXCELで別ファイルからデータを抽出するには?
EXCELについて条件に一致する列の内容を抽出する方法を教えてください。 シート1の行に日付があり、列に品名と日ごとの数を入力してあるシートがあります。 このシートの内容を別のシートに日付を入力すると、その日の内容が表示されるようにしたいのですが、うまくいきません。 [シート1] 1 2 3 4 (←日付) A品 10 20 30 40… B品 30 10 40 20… C品 15 16 17 18… D品 20 21 22 23… [シート2] *(←日付を入力) A品 ( ) B品 ( ) C品 ( ) D品 ( ) シート1とシート2はそれぞれ別ファイルで同時に開いている状況です。 シート2の*部分に日付を入れると該当する日付の各品名の数量が( )の部分に表示されるようにするにはどうしたらよいですか?
- 締切済み
- その他MS Office製品
- エクセル(2003・2007)でデータ抽出し、別シートを作成するための
エクセル(2003・2007)でデータ抽出し、別シートを作成するための関数を教えて下さい ●シート名:サンプルA ●シート名:サンプルB A B C D E・・ A B C 名前 日付1 日付2 備考 名前 日付1 備考 1 山田 2010/10/15 2010/10/10 ああ 1 鈴木 2010/10/18 うう 2 佐藤 いい 2 太田 2010/10/21 かか 3 鈴木 2010/10/18 うう → 4 井上 2010/11/20 ええ 5 石田 2010/8/7 2010/10/7 おお 6 太田 2010/10/21 かか 具体的に上記のデータから【B列が本日から10日間以内かつC列がスペース】のデータのA・B・D行を別シートに作成する関数を教えて下さい よろしくお願いします ※なぜか文字がずれてしまってて、すいません・・・
- ベストアンサー
- オフィス系ソフト
お礼
ご回答ありがとうございました。 マクロを使わなくてもできるんですね!(正直なところマクロを使わないと無理かな・・・と思っていましたので) わたしにはこのような方法は思いもつきませんでした。 この方法を採用させて頂こうと思います。本当にありがとうございました。