• ベストアンサー

エクセル2003 あらかじめセルに入力されている文字を含まない結果を抽出して表示したい

エクセル初心者で少しずつ勉強しております。 説明がうまくできるか心配ですがご相談にのってください。 下記のような条件を満たすマクロを作成したく思っております。 困っているのはタイトルとおり 『あらかじめセルに入力されている文字を含まない結果を抽出して表示したい』 例 全抽選者の中から一部のグループ『2』を抽選者対象から除外したリストを作成したい場合 抽出前 除外したいグループ (2)    全抽選者リスト グループ番号  氏名 1         田中 1         鈴木 3         池田 2         平田 3         根本 2         高木 抽出後 グループ番号  氏名 1         田中 1         鈴木 3         池田 3         根本 これでお分かりになるでしょうか。 よろしくお願いいたします。

この投稿のマルチメディアは削除されているためご覧いただけません。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.7

No.4・5です! ↓のような配列で良いのですかね? 一応そういうことだとして回答させていただきます。 一例です。 作業用の列を使わせてもらいます。 余計なお世話かもしれませんが、中の列は該当するデータがほしいのだと解釈して 作業用の列を2列設けました。 まず、E8セルに =IF(C8=$P$1,ROW(A1),"") F8セルに =IF(C8<>$P$1,ROW(A1),"") という数式を入れ、E8・F8セルを範囲指定し、F8セルのフィルハンドルで下へコピーします。 そして、除外の列になりますが、 X8セルに =IF(COUNT($E$8:$E$27)<ROW(A1),"",INDEX(C$8:C$27,SMALL($E$8:$E$27,ROW(A1)))) という数式を入れ、列方向と行方向にコピーすると P1セルに入力したものが表示されると思います。 そして、余計なお世話の列の方ですが、 N8セルに =IF(COUNT($F$8:$F$27)<ROW(A1),"",INDEX(C$8:C$27,SMALL($F$8:$F$27,ROW(A1)))) という数式を入れ、これも列・行方向にコピーすると 除外されたデータ以外が表示されます。 以上、セルの正確な配置はあっているかどうか判りませんが、 参考になれば幸いです。m(__)m

moumoufish
質問者

お礼

完璧です!! こんな遅い時間までありがとうございました ならびにすべてご指導いただきありがとうございました。 まだまだエクセルは駆け出しで勉強が必要だと思っております。 また壁にぶち当たったときには相談にのっていただければ幸いです。 本当に助かりました。 ありがとうございました!!!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (7)

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

セルの番地が違ったのですね。 P1に除外番号が入っているなら,X7セルに以下の式を入力して、右方向に1つ下方向にオートフィルします。 =INDEX(D:D,SMALL(INDEX(($D$8:$D$27=$P$1)*1000+ROW($D$8:$D$27),),ROW(A1)))&"" 画像がはっきりしないので番号が入っているセルをD列名前が入っているセルをE列としましたが、もし違ったら列番号を適宜変更してください。 該当データを表示するには「$D$8:$D$27=$P$1」の部分を「$D$8:$D$27〈〉$P$1」に変更してください。

moumoufish
質問者

お礼

完璧です!! こんな遅い時間までありがとうございました ならびにすべてご指導いただきありがとうございました。 まだまだエクセルは駆け出しで勉強が必要だと思っております。 また壁にぶち当たったときには相談にのっていただければ幸いです。 本当に助かりました。 ありがとうございました!!!

全文を見る
すると、全ての回答が全文表示されます。
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.6

関数で表示してもよいなら、配列数式を使う手もありますが、数式の意味がわからないと応用が利きにくくなるだけでなく、抽出データが多いと再計算に時間がかかり動きが重くなります。 あまりお勧めしませんが、数式の意味がわからなくても、そのまま答えを出したいなら、以下のような関数をN71セルに入力して右方向及び下方向にオートフィルして下さい(N59セルに除外する数字を入力)。 =INDEX(N:N,SMALL(INDEX(($N$62:$N$67=$N$59)*1000+ROW($N$62:$N$67),),ROW(A1)))&"" ちなみに、検索条件をセルに入力するようなケースでは、数式または検索条件をそのままセルに入力するフィルタオプションの設定のほうが応用範囲が広くてよいと思います(少し操作ノウハウがありますがマクロでやりたければ、この操作を記録するだけでOKです)。

moumoufish
質問者

お礼

MackyNo1さま 丁寧なご回答ありがとうございます。 ならびにみなさんありがとうございます。 なんだか自分で質問している内容までおかしくなってしまっていました。 すみません。 もう一度整理して詳細をお送りします。 失礼かと思いますが今一度だけご回答をおねがいいたします。 画像をお送りアップしました。 写真の左側が元のデータの応募者です このデータをもとに 画面中央に『抽選者リスト』(除外グループを除いた) 画面左側に『除外者リスト』 と抽出したシートを作りたいところです。 ※ちなみにグループを指定している数字は読み方でいうと『まるいち』、『まるに』、『まるさん』...という整数ではありません。 除外グループの元の値はP1に入力しています。 大変もうしわけございませんがお時間があればご回答をお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.5

No.4です! たびたび失礼します。 前回の配列数式の場合は INDEX関数内の範囲指定の行数と、IF関数の中の行数が一致しないとエラーになると思います。 ↓の画像のような配列になっているわけですよね? もしそうであれば、N71セルに =IF(COUNT($N$62:$N$67)-COUNTIF($N$62:$N$67,$O$58)<ROW(A1),"",INDEX(N$62:N$67,SMALL(IF($N$62:$N$67<>$O$58,ROW($1:$6)),ROW(A1)))) という数式を入れて見てください。 前回同様、配列数式にして列・行方向にオートフィルでコピーすれば 希望に近い形にならないでしょうか? 尚、余計なお世話かもしれませんが、 下側の右にある表は配列数式ではなく、作業用の列を使い その値に基づいてデータを返す方法になりますが、 これも一緒に説明しておきます。 作業列のP62セル(もし隣に作業用の列が作成できないのであれば、少し離れたところでも良いですので、行を揃えて)に ↓の数式を入れてみてください。 =IF(N62<>$O$58,ROW(A1),"") これを下へオートフィルでコピーします。 Q71セルに(配列数式ではありません) =IF(COUNT($P$62:$P$67)<ROW(A1),"",INDEX(N$62:N$67,SMALL($P$62:$P$67,ROW(A1)))) という数式を入れ、これも列・行方向にオートフィルでコピーすると 配列数式と同様の結果が出ると思います。 以上、長々と書きましたが 何度もごめんなさいね。m(__)m

moumoufish
質問者

お礼

tom04さま 丁寧なご回答ありがとうございます。 ならびにみなさんありがとうございます。 なんだか自分で質問している内容までおかしくなってしまっていました。 すみません。 もう一度整理して詳細をお送りします。 失礼かと思いますが今一度だけご回答をおねがいいたします。 画像をお送りアップしました。 写真の左側が元のデータの応募者です このデータをもとに 画面中央に『抽選者リスト』(除外グループを除いた) 画面左側に『除外者リスト』 と抽出したシートを作りたいところです。 ※ちなみにグループを指定している数字は読み方でいうと『まるいち』、『まるに』、『まるさん』...という整数ではありません。 除外グループの元の値はP1に入力しています。 大変もうしわけございませんがお時間があればご回答をお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

こんばんは! 横からお邪魔します。 VBAではないので、参考にならなかったら読み流してください。 ↓の画像の G2セル以外のデータを表示させるように関数でやってみました。 尚、配列数式になってしまいますので もし、この画面から数式をコピー&ペーストしただけではエラーになると思います。 貼り付け後、F2キーを押すか、数式バー内で一度クリックします。 編集可能になりますので Shift+Ctrl+Enterキーで確定すると、数式の前後に{ }マークが入り 配列数式になります。 D2セルに =IF(COUNT($A:$A)-COUNTIF($A:$A,$G$1)<ROW(A1),"",INDEX(A$2:A$1000,SMALL(IF($A$2:$A$1000<>$G$1,ROW($1:$999)),ROW(A1)))) という数式を入れ、配列数式にして 列方向と行方向にオートフィルでコピーすると 画像のような感じになります。 尚、数式は1000行まで対応できるようにしています。 以上、長々と失礼しました。m(__)m

moumoufish
質問者

お礼

tom04さま ありがとうございます。 関数でも抽出ができるんですね。 単独のテストではうまくいきましたが私の持っている表に関数を貼り付けて関数のセル番号等を変更しましたがうまく動きません。 ほかの方からもご指摘をうけましたが もう少し基本の部分を勉強しなければと反省しております。 なにしろ期限付きの資料提出がせまっていて自分ではどうにもならず、こちらに質問させていただいた次第です。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.3

>当方の行いたい手順としまして抽出前に除外グループの番号をセルに入力して、その後抽出するマクロを貼り付けたボタンを実行するというかたちで行いたいとおもっております。 もし、マクロで実行したいなら、皆さんからの回答例を見て、少なくともこの程度のコードの修正は自分でできないと、今後運用上で問題が出ると思います(まさに丸投げの質問となりますね)。 たとえば、私の回答なら自動記録されたコードの「2」の部分を、「Range("N59").Value」に変更すればうまくいくと思います。 ちなみに、ご希望の操作は、一般機能の「フィルタオプションの設定」という機能でセルに入力した値や数式を条件として、簡単に抽出できますので具体的方法を提示できますが、(ご自分では修正できなくても)どうしてもマクロにこだわる必要がありますか? #私の経験では、まずエクセルの一般機能を使いこなせるようになってから、VBAを勉強するという手順にしたほうがエクセルを効率的に学習できると思います。

全文を見る
すると、全ての回答が全文表示されます。
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.2

>エクセル初心者で少しずつ勉強しております。 初心者でしたら、まずエクセルの基本的な機能を理解してからマクロを利用するようにしましょう。 ご質問の、内容を実行するには以下のような操作をします(エクセルのバージョンが記載されいませんので2003で説明します)。 グループ番号のセルを選択し、「データ」「フィルタ」「オートフィルタ」にして、グループ番号のセルの右側にでてくる▼をクリックし「オプション」で「2」「と等しくない」と設定し、「OK」します。 このセル範囲を選択し、必要なら新規シートに貼り付ければ完成です。 もし、この操作をマクロで実行したいなら、上記の操作を新しいマクロの記録でコードを記録します。 「ツール」「マクロ」「新しいマクロの記録」で上記の手順を行い、他シートに抽出データを貼り付ける場合は、データ範囲を下方向に空白セルを含めて大きめに選択し、最後に元シートで「データ」「フィルタ」「すべて表示」でフィルタ操作を解除する操作まで行い、「記録終了」すれば完成です。

moumoufish
質問者

お礼

MackyNo1さま ご回答ありがとうございました。 オートフィルタでのマクロ記録は行いました。 当方の行いたい手順としまして 抽出前に除外グループの番号をセルに入力して、その後抽出するマクロを貼り付けたボタンを実行するというかたちで行いたいとおもっております。 こちらの言葉足らずで申し訳ございませんでした。 とても丁寧にご回答いただき感謝しております。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

全抽選者リストのデータがA列とB列の2行目からあるとして、それをD列とE列に抽出表示させるとしたら次のようなマクロでもよいでしょう。 Sub グループ抽出() Dim RowA As Integer Dim RowB As Integer RowA = 1 RowB = 1 Saku = 2 Do RowA = RowA + 1 If Cells(RowA, 1) <> Saku Then RowB = RowB + 1 Cells(RowB, 4) = Cells(RowA, 1) Cells(RowB, 5) = Cells(RowA, 2) End If Loop Until Cells(RowA, 1) = "" End Sub

moumoufish
質問者

お礼

KURUMITOさま ありがとうございました。 マクロの動作は確認できました。 行、列番号をお伝えするのを忘れておりました。 実際の列、行番号をお送りしますので今一度ご回答いただければ幸いです。 グループ番号 N列 氏名 O列として 作業手順 1.削除したいグループ番号は抽出をする前にセル(N58)に入力します。 2.抽出されたデータはN列の69行目以降に表示させたい。 除外したいグループ   <---------N58(セル番号)          (2)              <---------N59(セル番号) 全抽選者   グループ番号 氏名   <--N61 <--O61 1       田中      <--N62 <--O62   1       鈴木       | 3       池田       | 2       平田       | 3       根本       | 2       高木       <--N67 <--O67 抽出後            <--N69 <--O69    グループ番号 氏名    <--N70 <--O70 1       田中       | 1       鈴木       | 3       池田       | 3       根本       <--N74 <--O74 はじめからこのように質問をすればよかっと反省しております。 お時間が空いたときにでもご回答いただければ幸いです。 よろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excel マクロ 抽出 フィルタ 別シート

    マクロは記録しかできない初心者です。 たとえば、 田中 6月 ナシ 12 鈴木 4月 林檎 23 安部 5月 葡萄 34 田中 5月 イモ 12 鈴木 7月 エビ 23 というデータがあって、別シートに「田中」だけのデータを抽出したい場合はどのようなマクロを組めばよいですか。 田中 6月 ナシ 12 田中 5月 イモ 12 しかも、その検索するデータを入力すると検索できるようにしたいのですが。たとえば、 A1に田中←と入力するとそれ以下に 田中 6月 ナシ 12 田中 5月 イモ 12  と抽出されるようにしたいです。 マクロ初心者ですので、詳しく説明をいただければ幸いです

  • excelクロス抽出を一覧表示

    office2007、XPです。 エクセルでデータシートから別シートにクロス抽出した一覧を作成したいです。 データシートには以下のようなデータがあるとします。実際のデータはもっと多いのですが 地域 登録番号 氏名 日本語 英語 北京語 広東語 韓国朝鮮語 スペイン語 ポルトガル語・・・・ 横浜  01 Aさん 母語 流暢 日常 できない できない できない できない・・・・ 川崎  02   Bさん 流暢 少し 母語 できない できない できない できない・・・・ 東京  03 Cさん 日常 少し できない できない 母語 少し できない・・・・ 相模原 04 Dさん 流暢 できない できない できない できない できない 母語・・・・ ここから言語名とレベルで抽出して、地域、登録番号、氏名だけの一覧を作成したいのです。 たとえば“日本語””流暢”で抽出して 地域 登録番号 氏名 川崎  02   Bさん 相模原 04 Dさん さらに、同一シートに行を15行くらいずつずらして抽出先をあらかじめ設定しておき 3つの別シートから同一条件で抽出して同一シートに表示させたいです。 マクロでもかまいません。 関数やマクロでいろいろためしたのですが、 どうしてもうまくいきません。 お知恵を拝借させてください。

  • X個グループからY個ずつデータを抽出したい

    例:グループの数は100ぐらいがあって、グループごとのレコード数はそれぞれであり、毎回そのうちのX(例3)グループずつにデータを抽出します。そして1つのグループから最大Y個(例2)のデータを抽出します。 抽出したデータにフラグを立てて、次の抽出時に除外の条件として使います。 例:以下のテーブルがあって、毎回3グループから2個のデータを抽出します: group name flag ---------------------------------------------------------------------------- 1_group 田中A          0     1_group 佐藤A          0     1_group 林A           0     1_group 鈴木A           0     1_group 牧野A           0     2_group 平田B          0     2_group 小林B          0     ・・・ 3_group 高橋C          0     3_group 丹羽C          0     3_group 田中C          0     3_group 佐藤C          0     3_group 鈴木C          0     3_group 吉田C          0     ・・・ 4_group 高橋D          0     4_group 丹羽D          0     4_group 田中D          0     4_group 佐藤D          0     4_group 鈴木D          0     ・・・ (1)1回目の抽出の結果 group name flag ---------------------------------------------------------------------------- 1_group 田中A          0     1_group 佐藤A          0     2_group 平田B          0     2_group 小林B          0     3_group 高橋C          0     3_group 丹羽C          0     (2)2回目の抽出の結果 group name flag ---------------------------------------------------------------------------- 1_group 林A           0     1_group 鈴木A           0     3_group 田中C          0     3_group 佐藤C          0     4_group 高橋D          0     4_group 丹羽D          0     (3)3回目の抽出の結果 group name flag ---------------------------------------------------------------------------- 1_group 牧野A           0     3_group 鈴木C          0     3_group 吉田C          0     4_group 田中D          0     4_group 佐藤D          0     DBはSqlLiteです。 長いですが、ご教授頂ければ、ありがたいです

  • excelオートフィルタの検索条件をセルに入力したい

    以下のようなexcelのリストがあるとします。     A       B    C~ 1 佐藤・鈴木  Aタイプ 2 田中・山田  Bタイプ 3  佐藤     Aタイプ 4  田中     Cタイプ 5 山田・鈴木  Cタイプ A列の"田"が含まれる行を抽出したい場合 オートフィルタをかけ、オプションの抽出条件の指定で "田"を含む、で検索すれば良い、というのはわかります。 ですが、この動作をもうちょっと簡単にできないかと思っています。 具体的には、以下のようにセルに入力して検索・抽出するとはできないでしょうか。     A       B    C~ 1   田 2 3 4   A       B    C~ 6 田中・山田  Bタイプ 8  田中     Cタイプ 9 山田・鈴木  Cタイプ (1、2行目=検索用 3行目=空き 4行目以降=リスト) 過去の質問で、同じようにセルに入力して抽出する方法を 聞いていた方がいらっしゃったので参考にしようと思ったのですが 方法がVBAを使ったもので、VBAの知識がまったく無いために さっぱり理解することができませんでした。 何か良い方法がありましたら教えていただけないでしょうか。

  • Excelにおけるデーター抽出

    Excelのシートに記載されている内容は次の通りです。 (1) セルA5~A60の間に1~56の昇順の番号 (2) セルB5~B60には氏名 (3) セルC5~C60には○、×、△の記号 このシートからC列が ○ の記号が付与されている者だけの氏名を別のシートのB7~B**の間に抽出するのですが、抽出したシートの行に空白ができないようにするには式をExcel関数で作成することは可能でしょうか? 若し、不可能でしたらマクロで行う場合のプログラムを教えて下さい。

  • エクセルで、文字列の合計表示をするには

    エクセルで、文字列だけを入力して、その合計数を出すにはどうしたらようでしょうか。たとえば「田中」「柴田」「佐藤」と入れると「3」と表示できるような。  名簿を作成しており、氏名を入れるとその合計人数が出るようなものを作りたいと思っているのです。このばあい、氏名の前に番号表示をしないで、氏名のみの表示としたいのですが。 可能でしょうか。

  • ACCESS クエリの抽出項目をEXCELから

    Access2000のクエリの抽出項目をExcel2013の内容を抽出項目として指定するにはどうすればよいでしょうか。 Excelには、 佐藤 田中 鈴木 ......... のように縦に名前が最大18名分入っています。 この(最大)18名の名前をAccessの抽出項目とします(フィールドは10あってその6番目に抽出項目を18名分入力したいのです)。 18名を一人一人コピペしていたのですが、何とか簡素化できないものかな?と思っています。 できれば、マクロで一発で抽出項目を貼り付けたいのですが。 よろしくお願いします。

  • Excel Sheet を自動、セルにも自動でデー

    自動でできるのであれば、こういう事がしたいのですが、 初心者レベルでもできる方法があれば教えて頂けませんか。 <例> ・Sheet1:氏名、住所が書かれたリストがあります ・Sheet2:個人ファイル的な表があります ・Sheet2の表のセルに、Sheet1の氏名を自動で表示し、  Sheet1リストの氏名の数だけ、同じ表が書かれたSheetを自動作成したい。 ■Sheet1   A列   B列 1 田中  東京都 2 山田  神奈川県 3 鈴木  埼玉県 ■Sheet2  作成されている表のD3セルにSheet1のA1のデータ「田中」を自動で表記 ■Sheet3  Sheet2と同じ表のD3セルにSheet1の「山田」と自動表記された  新しいSheetが自動で作成されるようにしたい ■Sheet4  Sheet2と同じ表のD3セルにSheet1の「鈴木」と自動表記された  新しいSheetが自動で作成されるようにしたい Sheet1のリストと Sheet2の表が別のファイルで有る方が 対応が簡単ならでも別のファイルでもかまいません。 宜しくお願いします。

  • エクセル 検索した文字列の先頭に文字を挿入

    エクセル2010を使用しています。 田中・ 山本 広田 小林・ 杉田 佐々木・ というように氏名の最後尾に  ・  がついたリストがあります。 これを ・田中・ 山本 広田 ・小林・ 杉田 ・佐々木・   としようと思い、 文字列の最後に ・ がついている文字列を検索し、先頭に ・ をつけるような マクロを教えていただけないでしょうか? あちこちのサイトでヒントになりそうなものはあったのですが 基本知識に欠けるところがありうまくマクロが書けず自力は断念しました。 ぴったりくるマクロをお授けいただければ幸いです。

  • エクセルでシート1のセルに入力すると別シートのセルに表示させるには

    依頼されて会員証をエクセル2003で作っている最中です。 SHEET1に下記の様に会員証のベースを作ました。 [●●●の会] 会員番号 [SHEET2の会員番号列] 住所 [SHEET2の住所列] 氏名 [SHEET2の氏名列] 電話番号 [SHEET2の電話番号列] [管理社名] SHEET2にまだ空欄ですが、会員番号・住所・氏名・電話番号のリスト表を作りました。 ここからが課題でして、SHEET2に会員番号、住所とセルに打ち込んでいくと SHEET1のそれぞれに対応したセルに表示させる為に SHEET1のセルに、[=Sheet2!A3]と打ち込めば、 SHEET2のA3のセルが対応されますが、 これではそのセルしか対応しません。 SHEET2の1行目に会員番号、住所から打ち込んだものは、 単純にSHEET1の表示させたいセルに[=SHEET2!○○]を打ち込めば、 それが対応されます。 ただSHEET2の2行目は空白ですので、新たに打ち込んで対応させようとしても出来ません。 毎度毎度SHEET1の表示させたセルに[=SHEET2!○○]をしていくのは大変です。 新規にリストを打ち込むたびにSHEET1の会員証に 表示させる方法はどういったものがあげられるのでしょうか? 或いは、SHEET1の会員証ベースに打ち込んでいくとSHEET2のリストに 自動的に登録される仕組みの方がやりやすいのでしょうか? 数式も教えていただければ大変有難いです。 アクセスの方がやりやすいかもしれませんが、 依頼した方のPCにはアクセスは入っていないですし、 私自身もアクセスはイマイチの部分があります。 エクセルのマクロなるものを使えません。 年始早々に使用したいとの事ですので、 なんとか仕上げてあげたいとは思います。 宜しくお願い致します。

専門家に質問してみよう