• 締切済み

EXCELで抽出

A列に型番が書いてあり、B列にそれに対するリストが書いてあります。 A001ならばノート、消しゴム、ホチキス、ボールペンで、この内容は増えることも無ければ減ることもありません。 セルE2に「B001」と書いたときに、B002のリストの内容だけが表示されるようにするにはどうすればいいのでしょうか? また、続けてセルE9に「A001」と書いたときにはA001の内容のリストが表示されるようにしたいです。

みんなの回答

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

まだ開いているので、関数を使う方法の1つの、最終版を挙げてみます。 例データ A,B列 A1:B23 A列は上からA001.B001,C001,D002,E003でF004は、そこで止め、のマークです。 A001 X1 x2 x3 B001 y1 y2 y3 y4 y5 y6 C001 Z1 z2 Z3 Z4 Z5 D002 S1 S2 S3 E003 T1 T2 T3 T4 T5 F004 <ーーー最終行の次には、何でもよいから、文字列を入れておいてください。 ーーー 答えの部分は D1:I9 開始行番号 4 10 15 18    <--第1行目  <ーー関数で出します 行数 6 5 3 5      <--第2行目 <ーー関数で出します B001 C001 D002 E003 <--第3行目 <ーーこの部分は、ほしい型番の文字列を当初各列に手入力 y1 Z1 S1 T1 y2 z2 S2 T2 y3 Z3 S3 T3 y4 Z4 T4 y5 Z5 T5 y6 関数式  E1 =MATCH(E3,$A$1:$A$1000)  その後、右方向に式を複写  E2 = MATCH(0,INDEX(0/(OFFSET($A1,MATCH(E$3,$A:$A,0),0,1000,1)<>""),),0) 右方向に式を複写  E4 =IF(ROW()-3>E$2,"",INDEX($B$1:$B$1000,E$1+ROW()-4)) 下方向に式を複写  F4 =IF(ROW()-3>F$2,"",INDEX($B$1:$B$1000,F$1+ROW()-4)) 下方向に式を複写  G4 =IF(ROW()-3>G$2,"",INDEX($B$1:$B$1000,G$1+ROW()-4)) 下方向に式を複写   H4 =IF(ROW()-3>H$2,"",INDEX($B$1:$B$1000,H$1+ROW()-4)) 下方向に式を複写  E4->F4 ->G4 ->H4・・の式は式複写で作成できると思う。 第1、第2行が、独立したセルデータになっているのは、E4:H・・・の式が長く複雑にならないように 中間データ的に独立させたもの。 === 結構苦労した。特に第3行目に出している、該当行数の算出です。 同じようなものを作るのにVBAなら10行程度で済むように思う。それというのも、VBAでは、変数が使えることと、繰り返し処理をプログラムできるからです。

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.8

#2です。関数で考えましたが、途中ですが記してみます。 例データ A1:B17 A001,B001などが型番データでA列、それ以外はB列にあるデータとします。 A001 X1 x2 x3 B001 y1 y2 y3 y4 y5 y6 C001 Z1 z2 Z3 Z4 Z5 D002 S1 S2 S3 ーーー G1:H7 G1:H1は指定型番で、当初入力されているとする。 B001 C001 y1 Z1 y2 z2 y3 Z3 y4 Z4 y5 Z5 y6 上記では目視で式の複写を止める行を決めたが、不完全です。 ーー https://qiita.com/tacoyaky/items/4f1093607bffe1794800 【Excel関数】指定範囲で空白でない最初のセル位置を取得したい という記事がある(そういう方法がある)ので B001の場合 = MATCH(0,INDEX(0/(A5:A100<>""),),0) で、「6」という行数が得られるので、関数を入れている行数(行番号)が、この6を超えると空白を返す関数を組み立ててください。 6は y1 y2 y3 y4 y5 y6 の6です。 ーーー 回答を締め切られる時期なので、自分でやってみてください。 でも予想通り、式が長くなり、複雑ですっきりしない課題だと思う。 既に関数による回答も出ているので、そっちがすっきりしたものなら、そちらをどうぞ。

全文を見る
すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率65% (1636/2481)
回答No.7

No6の補足です。 E列にデータを入力したときにその右のF列にデータがあるとデータの書き替えはしません。既入力データの上書き防止です。 質問の画像の状態になっている場合(F8までデータがある状態)だと E8より上にデータを入力しても何も起こりません。 E9以降にデータを入力したときには該当するデータをF列に書き込みます。

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

該当シートのシートモジュールに以下で試してみてください。 Private Sub Worksheet_Change(ByVal Target As Range) Dim FRng As Range, buf As Range Dim LastRow As Long If Target.Column <> Columns("E:E").Column Or _ Target.Row < Rows("2:2").Row Or _ Selection.Count <> 1 Then Exit Sub End If If Target.Offset(0, 1).Value <> "" Then Exit Sub End If Application.EnableEvents = False LastRow = Cells(Rows.Count, "B").End(xlUp).Row Set FRng = Range(Cells(1, "A"), Cells(LastRow + 1, "A")) _ .Find(What:=Target.Value, LookIn:=xlValues, LookAt:=xlWhole) If Not FRng Is Nothing Then Set buf = Range(Cells(FRng.Row + 1, "A"), Cells(LastRow + 1, "A")) _ .Find(What:="*", LookIn:=xlValues, LookAt:=xlWhole) If Not buf Is Nothing Then Target.Offset(0, 1).Resize(buf.Row - FRng.Row, 1).Value = Cells(FRng.Row, "A").Offset(0, 1).Resize(buf.Row - FRng.Row, 1).Value Else Target.Offset(0, 1).Resize(LastRow - FRng.Row + 1, 1).Value = Cells(FRng.Row, "A").Offset(0, 1).Resize(LastRow - FRng.Row + 1, 1).Value End If Else MsgBox "該当データがありません", vbCritical End If Set FRng = Nothing Set buf = Nothing Application.EnableEvents = True End Sub

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

F2: =IF(OR(AND(E2="",INDEX(A:A,MATCH(LOOKUP("ー",E$2:E2),A:A,0)+ROW()-MATCH(LOOKUP("ー",E$2:E2),E:E,0))>""),AND(E2="",F1="")),"",INDEX(B:B,MATCH(LOOKUP("ー",E$2:E2),A:A,0)+ROW()-MATCH(LOOKUP("ー",E$2:E2),E:E,0)))&"" 下へコピペ。

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

[No.3]の続きです。 添付図参照(Excel 2019) ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

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

質問を一読して、Excel に装備されている類似の機能(データの入力規則)を思い浮かべました。 貴方は「A列に対するB列のリスト」の使用目的を説明されぬままだけど、ひょっとしたら役立つかも知れないので、参考までに[データの入力規則]を簡単に説明しておきます。 丸でMicrosoft社のお得意な“小さな親切、大きなお世話”だなぁと思うなら、どうぞ無視してください。 添付図に示すリストから、3種類のカテゴリの一つをA列に入力したとき、それに対するリストをB列に表示させ(て、その中の一つを選択す)る、という機能です。 各リスト下部の空白部に、後でデータを追加しても構いません。 続いての投稿で、A列B列のリスト選択結果を添付します。

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

回答はエクセル関数で求めておるのか?質問者のVBAはできないなどの、自分の技量を説明して質問するもんだ。 関数では、抜出しタイプの処理は、複雑になり易く、むつかしいことが多い。 本件は、上行と同じ型番の意味で空白にしている。しかしデータベース(アクセスなど学べば判る)のデータの持ち方の禁避に当たるやり方であろう。 こんなことを考える・するとは、初心者だろう。 それで、関数でも、VBAでも難しくなる。 A列がB001などで埋まっておるデータであれば、フィルタで簡単に、ビールーコーヒーが抜き出せるが。 ーー また1型番だけを抜き出すなら良いが、普通は B001 C001 D002 例にはない ・・ を並べて出したいとかのニーズが多いかと思う。 そういうことは質問に書いてない。 B列該当は不定数だろうから、どういう質問設定にするかいろいろあり得る。 E列にB001を入れて、F列に関数を入れて、適当に複写を該当行数を、目測で止めるとかの手もあるが、 普通ではない。 ーー VBAでは1つだけの場合は、End(xlDown)  等を使いたくなる。 Sub test01() x = Range("D2") rs = Range("A1:A10000").Find(x).Row MsgBox rs re = Cells(rs, 1).End(xlDown).Row - 1 MsgBox re Range("B" & rs & ":B" & re).Copy Range("E2") End Sub のようなのも1つのやり方だろうが、型番が2つ3つの場合は、VBAを変える必要がある。

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

>セルE2に「B001」と書いたときに、B002のリストの内容 >続けてセルE9に「A001」と書いたときにはA001の内容 B002であっていますか? あっているなら+1するのでしょうか? Aは足さないのでしょうか? ケアレスミスだと思いますが、 コンピュータ(プログラマー)には意味がわかりません。

yuki-dream
質問者

補足

B001です。 B002なんて無いですね。 ケアレスミスです。

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

関連するQ&A

  • エクセルの表から抽出

    エクセルについて教えてください。 表の列と行を指定して(セル番地と言う意味ではないです。)一致しているセルの文字列を表示したいのですが方法がわかりません。   1 2 3 4 A あ か さ た B い き し ち C う く す つ D え け せ て E お こ そ と 上記のような表で2-Bなら「き」と表示させたいのです。 分かりにくいかも知れませんが 宜しくお願いします。

  • エクセルで検索にひっかかったものを抽出したい

    エクセル2003です。 A列にURLリストが並んでいます。 リストの中で「cgi」という文字列が含まれている セルだけを抽出して、B列に貼り付けたいのですが、 方法がわかりません。 よろしくお願いします。

  • Excelでの複数結果抽出がわかりません

    商品の日毎受注個数の一覧表をExcelで作成しています。 A列には日付 B列にはその日の受注個数 が並んでいます。 そしてB列中の最大値、最小値をE1、E2に関数で表示させています。 B列からE1、E2セル参照で最小値を検索し、隣A列の日付をE1の右隣セルから右方向に並べて複数抽出したいのですが、(該当する日付をすべて表示)どのような関数、マクロを書けば良いでしょうか?

  • excel vba データリストからの抽出

    excel vbaで、以下のような事をしたいと思っています。 【sheet1】データ   A  B C D E  1 あ い う え お 2 か き く け こ 3 あ き く せ そ 4 さ  し す せ そ 5 あ し す け こ 【sheet2】検索 A1を検索条件セルにする ※検索キーはsheet1のA列に登場するテキストのみです。   A  B  C  D  E 1 あ い う え お 2   き く せ そ 3    し す け こ 4 5 ※A2、A3に"あ"と表示されてしまってもよいのですが、  出来れば表示なしが望ましいです。 sheet2のA1は、sheet3に、sheet1のA列に登場したテキストをデータとしてリストしておき、 「データの入力規則」でリストから選択できるようにしようと考えています。 説明が下手でうまく伝わらないかも知れませんが、うまいやり方があれば どうかご教示下さい。 宜しくお願い致します。

  • エクセルにバーコード出力

    以下の様なリストを作成し、別シートのA1セルに、バーコードで"11"と読み込むと 同じA1セルに"E"を表示することは可能でしょうか? (同様に"22"と読み込むと"F"を表示、"33"を読み込むと"G"を表示) 別セルに表示することは出来ますが、同じセルに表示をすることに困っています。 名前の管理・関数などを応用したやり方があると助かります。 (マクロやアクセスは使ったことがありませんので) 【リスト】    A列 B列 1行 11  E 2行 22  F 3行 33  G ※Excel2010を使用 よろしくお願いします。

  • エクセルでのリストの抽出

    セルG1:H10にリストデータがあります G列に都道府県名 H列に人口 が入力されています A1に"北海道"と入力した場合、B1に北海道の"人口"、A2に"青森"と入力した場合、B2に青森の"人口" そして、 A1に"東京"と入力した場合、B1に東京の"人口" というように、B列には、A列で入力した都道府県の人口をリストデータより選択して表示する、という事をしたいのですが、 どのような関数を使用すればよいのでしょうか エクセル標準の関数で出来ますでしょうか よろしく御願いします

  • エクセルマクロ重複した列を削除した結果を抽出したい

    お世話になります。 各行で、重複したセルを除いた文字列を結合してA列へ表示させたいのですが、全然わからず困っています。宜しくお願い致します。 【抽出前】 セルB2:あいうえお セルC2:かきくけこ セルD2:さしすせそ セルE2:あいうえお セルB3:たちつてと セルC3:らりるれろ セルD3:たちつてと         ・         ・         ・ 【抽出後】 ※重複した部分を除いた抽出結果を、A列に表示させたい セルA2:あいうえおかきくけこさしすせそ セルA3:たちつてとらりるれろ         ・         ・         ・ 【補足】 ※列数は決まっていません。値が入っているところ迄、となります。例では最長E列迄になっておりますが、もっと長い場合もあれば、B列だけの場合もあります。 ※行数は、数100行あります。こちらも値が入っているところ迄、抽出結果をA列のA2から順番に表示させたいです。

  • エクセルの順位抽出について

    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の内容も更新されている のが希望です) よろしくお願いします。

  • Excelで文字を抽出したい

    A列に文字がはいっており(IかHかOかPを含む文字 23~25文字)、B列にはA列中の一文字(IかHかOかP)だけを表示させたいんです。 つまり、 ●もしA1セルに****I***・・・が入っていたら→B1セルにはI ●もしA2セルに****H***・・・が入っていたら→B2セルにはH、 というふうにしたいです。 この場合、B列にはどういった関数を入れればいいんでしょうか? 尚、***の部分にIかHかOかPは1文字しか入りえません。

  • Excel! リストから選択!

    Excelの「リストから選択」で質問です。 次のようにA1~B5セルにデータが入っています。       A   B   1  大変よい  (1)   2  良い    (2)   3  普通    (3)   4  もう少し  (4)   5  悪い    (5) これらを別のセルにて「リストから選択」をするとA列が表示され、 選択するとセルにはB列が表示されるという設定はできるのでしょうか。 この例の場合、リスト表示をさせると   大変よい     良い       普通       もう少し     悪い     が表示され、「大変よい」を選択すると、「(1)」が表示されるような仕組みです。 どなたか教えていただけませんでしょうか。よろしくお願いいたします。

専門家に質問してみよう