エクセルで該当する文字列がある行のみを残す方法

このQ&Aのポイント
  • エクセルで該当する文字列がある行のみを残す方法について質問します。
  • セルのA2から下に記載されている数字に対して、該当する番号がある行のみを残すマクロを探しています。
  • 301140と360940に該当する数字がある行を残すマクロを教えてください。
回答を見る
  • ベストアンサー

エクセルで、該当する文字列がある行のみを残す方法

はじめまして、初めての質問になります。 題名の通り、現在エクセルで関数を使い該当する文字列がある行のみを残す関数を探しているのですが、実際に登録してみるとうまく動くものが無かったので質問しました。 画像がうまく表示されるか不安なので記述すると セルのA2から下に数字があり、その数字に対していくつかの該当した番号がある行のみを 残す関数を探しております。 資材コード    品名 301140    パネル 301240    ソケット 360940 この様な表になります。 この中で、例えば 301140 360940 この2つ該当する数字がある行を残すマクロを探しております。 ぜひ教えていただければ幸いです。

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

  • ベストアンサー
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.2

ご希望の操作は普通なら、フィルタオプションの設定を利用するのが簡単です。 D1セルに項目名、D2,D3セルに抽出したい数字を入力しておき、カーソルを元のリスト上に置いて「データ」「フィルタ」「詳細設定」(2003ならフィルタオプションの設定)で検索条件範囲に「D1:D3」にして抽出範囲を適宜設定すれば、添付画像のように抽出できます。 どうしてもマクロで実行したいなら、上記の操作をマクロの記録で記録して、必要な部分のコードを修正してみてください。 ちなみに、関数で対応するなら、以下の式を(例えばI2セルに)入力して右方向および下方向にオートフィルします。 =INDEX(A:A,SMALL(INDEX((ISERR(FIND({301140,360940},$A$2:$A$1000)))*1000+ROW($A$2:$A$1000),),ROW(A1)))&"" ただし上記の式は表示するセルが多くなると動きが重くなるだけでなく、数値データもすべて文字列データとして表示されますので、B列以降はIF関数を利用して、数式の最後の「&””」を削除して数字データとして表示する数式にしたほうが良いと思います。 =IF(A列の数式セル"","",最後に&""がない式)

s-vv15
質問者

お礼

なるほど、細かいフィルタオプションの説明をしていただきありがたいです。 現在、フィルタオプションとVBAをみつつ、打ち変えたりしているところです。 上の方もおっしゃっていましたが、記録から手直しするのが一番近道ですね。 ありがとうございました。

その他の回答 (2)

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

残すというと、条件該当しない分は削除するとなる。 しかし、普通は条件に該当分を別シートに作る(書き出す)ことを考える。 本質問も関数でも出来そうだ(よくこの手の質問がこのコーナーに出る)がその場合は行削除なんて、関数では理論的に出来ないようになっているので、別シートなりに条件に合うものだけを作ることになる。 VBAなら行削除はgで着ないわけではないが、発想を変えたほうがよかろう。 ーー エクセルを使って何かをしたい場合 (1)操作 (2)関数 (3)VBA (4)出来合いの(スモールな)ソフト などのやり方があり、本件は(1)(2)(3)どれでも出来る。関数では式が長く複雑になるので、賛成しがたいが。 ーー VBAの場合マクロの記録が、役立つ場合もある。 フィルタの操作をして、マクロの記録を取り、修正をどうしたら良いか考えたら。 ーー 一番初心者にお奨めは (1)第1行目から最終行まで、下記を繰返す(ForNextなど使って) (2)その行のA列が301140か360940かどうかをIFステートメントで聞く (3)該当ならその行の各列データをSheet2に書き出し (4)該当しないなら処理をしないで次行へ この繰り返しをコードで書く。 これが出来ないことは無かろう。 書き出すや読み出すシートが2う以上の(別になる)ときの、シートを区別するコードの書き方など勉強する必要があるが。 ーー >マクロを探しております 探すのも大切だが、本件は作るほうだろう。初心者はマクロの記録が使えないか考えるほうが先。

s-vv15
質問者

お礼

何度も熟読させてもらいました。 初心者にお勧めのところも、本日の夜に実際に書いてみようと思います。 >探すのも大切だが、本件は作るほうだろう おっしゃるとおりだと思います。 ありがとうございました。

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.1

質問の「資材コード」にある特定のコードの行だけを抽出したいなら、 特別のマクロや関数などは使いません。 ふつうは、フィルタを使います。 1つの抽出なら、「オートフィルタ」でできますが、複数条件の抽出には、「フィルタオプションの設定」で設定します。 Excelのバージョンがわかりませんが、基本的には下記を参照してください。 http://kokodane.com/tec3_16.htm 抽出された範囲をコピー/貼り付けで、他へコピーすることもできます。

s-vv15
質問者

お礼

丁寧な回答ありがとうございます。 私がつかいたかったのは、フィルタを数箇所指定して、それを他の人間に作業させてかったので 出来たらボタンを作って一括処理したかったためです。 説明不足ですみませんでした。

関連するQ&A

  • 条件を満たす行の、特定の列における最小値

    以下のようなスプレッドシート(Excel)があります。    [A列] [B列] [C列] [D列] [E列] [1行]資材コード メーカー 単価 平均 最安 [2行]T1111 A 311 [3行]T1211 A 411 [4行]T1311 A 311 [5行]T1111 B 299 [6行]T1211 B 500 [7行]T1311 B 312 [8行]T1111 C 300 [9行]T1211 C 280 [10行]T1311 C 400 D列(D2~D10)には、 同じ資材コードの単価の平均が入ります。 これは、 SUMIF(A$2:A$10,A*,C$2:C$10)/COUNTIF(A$2:A$10,A*) (*には当該行番号が入る。) で、表現できました。 次にE列(E2~E10)には 同じ資材コードのもののうち、 最安となる単価を表示させたいのですが、 どう関数を組み合わせるのが、スマートなのかわかりません。 たとえば、E2セル、E7セル、E11セルは 資材コードT1111になっている行のうち、 単価(C列)が最低となる時の値を表示するようにしたいので、 C2セル=311、C7セル=312、C8セル=800のうち、最低である311が E2セル=311、E7セル=311、E8セル=311 にそれぞれ表示されるようにしたいのです。 わかりにくい説明で申し訳ありませんが、 疑義があれば、適宜補足しますので、指摘してください。 よろしくお願いいたします。

  • EXCELで該当数字の羅列から、該当数字をチェックする方法。

    エクセルの関数について質問させて頂きまます。 例えば A列   B列   C列 1行   111 2行   222 3行   333 4行   444 5行   555 6行   666 7行   777 8行   888 9行   999 10行   000 上記のような表があるとして、Dの10行目などにチェック欄を作成して、 そこに、数字を入力する事により、B列の数字の一覧から、 該当したものを、例えばC列に”該当あり”のように表示をさせたいと思っております。 例えば、そのチェック欄(Dの10行目)に”333”と入力すると A列   B列   C列 1行   111 2行   222 3行   333  該当あり 4行   444 5行   555 6行   666 7行   777 8行   888 9行   999 10行   000 このような感じです。 もしくは、該当する行の色を赤や青など他の色に変更する方法でも構いません。 説明が下手で分かり辛いかもしれませんが、どなたか、 このような場合の関数などをご存知の方おりましたら、 ご教授頂ければ幸いです。 どうぞ、宜しくお願い致します。

  • エクセルで列削除

    エクセルで列の自動削除をしたいと考えています。 たとえば、100列の表があるとします。その表を、 ある特定のセルに入力した数字(0<N<100)の数だけの表(列)をつくりたいと考えています。 (N+1)列目から100列目までを削除すればいいのですが、 何かいいマクロはありますでしょうか? OFFSET関数を使おうと思っていたのですが、 引数にどう記述していいものか・・・ OFFSETを使わなくても結構です。なにかいい記述があったら教えてください。 お願いします。

  • 文字列を間引く方法

    EXCEL関数、あるいはマクロで下記の処理ができないでしょうか。    1列 1行 T20339636 2行 T20379678 3行 T20340013 のように各セルに9桁の文字列が設定されています。 各文字列の2桁目から5桁目までを間引き、下記のように 設定する。    1列 1行 T9636 2行 T9678 3行 T0013 ご教授のほど、よろしくお願いいたします。

  • EXCEL 異なった行に振り分ける方法

    自動記録マクロがやっと出来る超初心者です。 よろしくお願いします。 EXCELです。 A1のセルに 1か2か3の数字が入っています。 2行目にA2~CX2まで項目が入っています。 A1が1の時 2行目のA2~CX2列の内容を4行目に移し A1が2の時 2行目のA2~CX2列の内容を5行目に移し A1が3の時 2行目のA2~CX2列の内容を6行目に移します。 どのようにしたら良いのか教えてください。 マクロ超初心者ですので、わかりやすく教えていただける大変助かります。よろしくお願いいたします。

  • エクセル2007 A列多数セルを50行ごとに区切る

    A列にひたすら数字のセルがあります。これを50セルごとに区切って、B列、C列、D列・・・・・に50行ごとに割り振っていきたいのですが、こんなことを出来る関数はありますか? 複数列を1列にする関数は聞いたことがあるのですが、1列を複数列にする関数は聞いた事がありません。どうか教えてください。 こんな風にしたいというイメージ画像を添付します。よろしくお願いします。

  • EXCEL 行と列を指定して、範囲指定する方法

    EXCELの使い方を教えてください。 関数で試みているのですが、以下のような操作を行うことは可能でしょうか? (マクロ(VBA?)は使用したことがないため、抵抗があります。それでも、マクロを組むしかないというのであればその方法も教えてください。) 「表示シート」にて行と列を指定することで、 結合された5行×5列の表を表示させたいのです。 指定するセルも結合させており(「入力シート」)、 結合されたセル(行/列)を指定して、表示する範囲を決めてやりたいのです。 結合を解いて、たくさんの文字を指定する形にしてしまえば楽かもしれないのですが、この2文字だけで他にもたくさん処理させているため、 指定する文字はこの2文字のみで処理させたいです。 自分なりには、「表示シート」のD10セル(F10まで結合されている)に =INDEX(SUMPRODUCT((入力!B3:B27=表示!D4)*(入力!C2:Z2=表示!D3)),1,2) というような関数を組んでみたのですが、うまく表示されません。 なにか、うまく表示させる方法はあるのでしょうか? ちなみに、表内の犬など狐などは便宜的に書いているだけで、 数字が入るセルか、日付が入るセルか、文字列が入るセルかということだけが汲み取っていただければと思います。 入力するセルと表示させるセルの大きさも異なるようにしたいので、 良い方法があれば教えてください。 よろしくお願いいたします。

  • エクセル 列のアルファベットを出す方法はありますか?

    行番号を求めるにはrow(セル)で、これに対し列を求める にはcolumn(セル)だと思うのですが、これの出力は数字で、 当該セルが、左から何個目のセルにあるかを出しています。 列番号のアルファベットを出すような関数はありますか? もし出せればindirect関数が使えて便利だなーと思うのですが・・・。 columnを使って便利なようにできますか?

  • excelで数字の羅列から、該当数字をチェックする方法

    excelの関数または条件付き書式について質問させて頂きます。 例えば・・・    A B C D E 1列 4 5 5 4 6 2列 5 6 6 5 4 3列 5 4 5 4 4 4列 6 6 6 5 4 5列 上記のような表があります。 そこでAの5行目などにチェック欄を作成し、 そこに、数字を入力する事により、1列のAから4列のAまでの数字からAの5列に入力した数字に該当したセルを、塗りつぶすか書式を変更させるかのいずれかで表示させたいと考えております。 もし回答頂けたかたのお時間が許すのであれば、その逆に該当から外れた場合に同様にセルが塗りつぶれるか書式が変わるようにするパターンもご教示していただければ幸いです。 可能であればで結構ですのでよろしくお願いします。

  • エクセルのマクロ作成で困っています。任意の列(〇列1行目)から0001

    エクセルのマクロ作成で困っています。任意の列(〇列1行目)から0001-安部 0002-安藤 0003-木下・・と入力された列があります(番号は3桁あるいは4桁です)。そして、例えば最後の入力されたセルの行番号が56だとして、そこに入力されたものが「0056-名前」であるか確認するマクロを作りたいのですが、どのように記述すればよいでしょか?確認したいのは番号(この場合'0056')のみで良いのですが・・。

専門家に質問してみよう