• ベストアンサー

【Excel】該当データ表示方法について

Excelの表で、(A)列にデータ名、(B)列にデータ値が入力されているとして、 1.(C)列に(B)列のデータ値の種類を昇順で表示、 2.(D)列に(C)列のデータ値を持つ(A)列の文字を表示、 3.(E)列に(D)列のデータ種類の数を表示 という3つの内容を実現したいのですが、(1つでも) ご存知の方、教えて下さい。よろしくお願いしますm(__)m 【イメージ】   | (A) (B) (C)  (D)   (E) ――――――――――――――――――― (1)| A 10 10 A、D、E   3 (2)| B 20 20 B、G    2 (3)| C 30 30 C、F    2 (4)| D 10 (5)| E 10 (6)| F 30 (7)| G 20

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

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

(データ)A1: A列   B列   C列    D列   E列   G列 (空白行) A 10 1 10 A、D、E 3 B 20 2 20 B、G 2 C 30 3 30 C、F 2 D 10 50 H 1 E 10 F 30 G 20 H 50 4 (関数式)C列 C2に=IF(COUNTIF($B$2:B2,B2)=1,MAX($C$1:C1)+1,"") といれて、C3以下最下行まで式を複写する。 結果は上記C列の通り (関数式)D列 D2に=INDEX($B$2:$B$100,MATCH(ROW()-1,$C$2:$C$100,0),1)といれて、D3以下C列の最大値まで式を複写する。$B$100の100はデータ数より多ければよい。 結果上記D列の通り。 (関数式)F列 F2に=COUNTIF($B$2:$B$100,D2)といれf3以下にD列の最下行まで式を複写する。 結果上記F列の通り。 問題はE列だが、複雑になりそうなので、考えて出来れば、別回答にします。

katti178
質問者

補足

ご回答有難う御座います。もう一つ知りたいのですが、D列のデータは昇順に表示することは、出来ないのでしょうか。よろしくお願いします。m(__)m

その他の回答 (4)

回答No.5

ANo.2の続きです。 E列の1つのセルにA、D、Eなどと表示することはやっぱりマクロを使わないと出来ないようですが、G列以降に1列に1つずつ該当するデータの種類を表示することは可能です。 F1セルに以下の式を入力して、F2以下にコピーします。 =IF(E1>0,INDEX($A$1:$A$20,MATCH($C1,$B$1:$B$20,0),1),"") ifでE1セルの個数が1以上の場合に表示する判定をしています。あとはMATCH関数でC列の数値に合致するA列の種類を表示します。これで、最初の1つ目の種類は表示されます。上記の式では範囲を1~20行までのしていますので、必要に応じて設定してください。 次にG1セルに以下の式を入力し、G2以下および、H,I・・・と以降の列に予測される種類の数分だけコピーします。 =IF($E1-COUNTA($F1:F1)>0,INDEX(INDIRECT("$A$"&TEXT(MATCH(F1,$A$1:$A$20,0)+1,"###")&":$A$20"),MATCH($C1,INDIRECT("$B$"&TEXT(MATCH(F1,$A$1:$A$20,0)+1,"###")&":$B$20"),0),1),"") 少々式が複雑ですが、INDIRECT関数で自分より前にある種類をのぞいた残りの行でのF1セルと同じことをしています。 例えば、G1せるでは、F1セルにすでに"A"が表示されていますので、このAがある1行目+1から範囲をさだめて、 =IF($E1-COUNTA($F1:F1)>0,INDEX($A$2:$A$20,MATCH($C1,$B$2:$B$20,0),1),"") という式になります。 あとどうしてもE列に表示したいときは、F列以降の文字を連結する式をE列に書いておけば(例えば =F1&G1&H1&I1 とか)、ほぼ質問の内容になるかと思います。

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

#3です。 #3で予告した、質問のD列の回答を上げます。 式が長くなって、いっそVBAでやりたい誘惑に駈られますが。 (データ) A列   B列   C列   D列  E列 (空白行)#3と合わす為でなくても良いが式が変わる A 10 10001 10 A D E B 20 20001 20 B G C 30 30001 30 C F D 10 10002 50 H E 10 10003 F 30 30002 G 20 20002 H 50 50001 (関数式)C列 C2に=B2&LEFT("00",3-LEN(COUNTIF($B$2:B2,B2)))&COUNTIF($B$2:B2,B2) といれて最下行まで式を複写する。結果は上記C列の通り。 (D列) #3で回答した方法で出す。 (関数式)E列以右 E2に=IF(ISERROR(INDEX($A$1:$A$100,MATCH($D2&TEXT(COLUMN()-4,"000"),$C$1:$C$100,0),1)),"",INDEX($A$1:$A$100,MATCH($D2&TEXT(COLUMN()-4,"000"),$C$1:$C$100,0),1)) といれる。適当に右方向に式を複写する。Z列まで複写した とすると、E2:Z2を範囲指定して、Z2で+ハンドルを出し D列の最下行まで引っ張る。 結果は上記のE,F、G列・・の通り。 B列の10,20,30・・の出現回数は999回以下の仮定となっています。001とかの連番を振る仕組みのため。9999回とかまでにも容易に変えられます。

katti178
質問者

補足

ご回答有難う御座います。教えて頂いた『#3』はできたのですが、『#4』のD列の設定で、D2に【=INDEX($B$2:$B$100,MATCH(ROW()-1,$C$2:$C$100,0),1)】を入力したのですが、#N/Aと表示されてしまいます。勝手なお願いで申し訳ないですが、原因を教えて頂けないでしょうかm(__)m

回答No.2

質問の1.および3.は下記の方法で可能です。 2.については再帰できる関数というものがないので、関数ではかなり難しいと思います。これだけは#1で回答されているようにマクロを使うしかないと思いますが。 3.について 参照の都合上、こちらを先に書きます。 まず、E1セルにsmall関数を使って最小値を探し、それと同じ数値をcountif関数で数えます。 具体的には、 =COUNTIF([範囲],SMALL([範囲],1)) です。[範囲]にはデータのあるB列を指定してください。例→ B1:B7 とか、 E2は、 =COUNTIF([範囲],SMALL([範囲],SUM($E$1:E1)+1)) として、これをデータ数分だけ下にコピーしてください。small関数は第2引数で指定した順位のデータを返す関数なので、第2引数にすでにカウントした分+1を設定しています。 1.について C1セルについては、最小値を得ればいいので、 =SMALL([範囲],1) とします。 C2セルは、 =IF(E2=0,"",SMALL([範囲],SUM($E$1:E1)+1)) として、C3以下にコピーします。 if関数はエラーを表示させないためだけに使っています。 D列については、先に書きましたように関数では難しいと思います。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

マクロを作ってみました Public Sub 処理() Dim base As Range, i, pos Dim NumList, max, min, wk Set NumList = CreateObject("Scripting.Dictionary") max = -999999999 min = 999999999 Set base = Range("A1") i = 0 Do While (base.Offset(i).Value <> "") If Not NumList.Exists(base.Offset(i, 1).Value) Then '始めてでてくる数値を登録 NumList.Add base.Offset(i, 1).Value, base.Offset(i).Value If max < base.Offset(i, 1).Value Then max = base.Offset(i, 1).Value If min > base.Offset(i, 1).Value Then min = base.Offset(i, 1).Value Else '重複する場合、連結する NumList.Item(base.Offset(i, 1).Value) = NumList.Item(base.Offset(i, 1).Value) & "," & base.Offset(i).Value End If Range(base.Offset(i, 2), base.Offset(i, 4)).ClearContents i = i + 1 Loop pos = 0 For i = min To max Do Until NumList.Exists(i) i = i + 1 If i > max Then Exit Sub Loop base.Offset(pos, 2).Value = i base.Offset(pos, 3).Value = NumList.Item(i) wk = Split(NumList.Item(i), ",") base.Offset(pos, 4).Value = UBound(wk) + 1 pos = pos + 1 i = i + 1 Next End Sub

関連するQ&A

  • [Excel2000]データの参照と抽出方法

    A列はC列のデータの一部を抽出したものです。 A列のデータと同じデータがC列の中にあったら、すぐ隣のD列のデータを B列に表示させたいです。(C列とD列は隣同士セットになっています。) この場合、関数はどうすればよいですか? 心ある方、ぜひ教えてください。 ◎実行前 (A列) C列) (D列) 1000-1 1000-1 D0001 1002-1 1001-1 E0001 1003-1 1002-1 F0001   ◎実行後 (A列) (B列)  (C列) (D列) 1000-1 D0001  1000-1  D0001 1002-1 F0001  1001-1   E0001

  • excel2000 ある列の項目名をカウントしその件数表示をする

    エクセルで表10行×5列の表があります。1列目にあるデータが入っております。その項目名をカウントし多い順に別の表にその項目名と件数を表示させたい。できるだけ自動的におこなうためにはどうすればよいでしょうか。 例 :ある表 1列 A B c B c A D E F B 結果 別の表 項目 件数 B   3 A   2 C   2 D   1 E   1 F   1

  • 指定した3つのセルのデータを抽出し別表を作成する

    A表(A~F列、1~7行)のうちB、D、F列にデータが入力表示されたデータを抽出して別のB表(A,B,C列、1~7行)を作成するためのエクセル関数をご教授下さい。下図のとおり、F列は同じデータですのでVLOOK関数で表示できるのですが、B,D列にデータが入力されていない場合は、表示しないようにしたいのです。よろしくお願いします。 また、3つのうち一つでもデータがない場合は、表示させない方法でも結構ですよろしくお願いします。 [A表]    A    B    C    D    E   F 1  5    8     9    12    2   ○ 2  4                       ○ 3       7          10       ○   4                          ○ 5  3    4     10    5       ○ 6                          ○ 7                          × [B表]    A    B     C 1  8    12    ○ 2  7    10    ○ 3  4     5    ○ 4 5 6 7

  • [Excel2000] データの移動について

    A列~F列までの文字データを以下のようにA列とB列の2列に移動させたいのですが、いくら考えてもわかりません。データが1000件以上あり、手作業ではミスをしかねないので、何かよい方法はないでしょうか?よろしくお願いします。 (手順) (1)B~D列のデータを縦に並べる。(B~Fには文字データが入ります。すべての列にデータがあるとは限りませんが、少なくとも、B列には必ずデータがあり、B、C、Dの順にデータが入っています。) (2)その左側にA列のデータを並べる。 (A列)   (B列) (C列) (D列) (E列) (F列) 000001    10      15    20 000002    5 000003    15     10    5    3     1 ↓ (A列) (B列)  000001  10 000001   15 000001   20 000002   5 000003  15 000003  10 000003   5 000003   3 000003   1

  • Excel複数テーブルのマッチング処理について

    実現したいことは、以下のような形式で3つの表があり、A列をキーとして添付の結果1、結果2のような出力を別シートに行なうことです。 マッチング処理なのですがなかなか考えがまとまりません。 おそらく関数では難しくVBAで処理するのだろうかと思いますが、経験が浅く手詰まり状態です。 恐れ入りますがご指南のほどよろしくお願いします。 要件と致しましては、 1.A列がキー項目となります。 2.表1、2、3とも列数は固定です。 3.表1はキー(A1、A2)に対し行が一意です。(マスター) 4.表2、3はキー(A1、A2)に対し行が複数行存在します。(必ず1行以上は存在します) 5.上記の場合、添付結果1または結果2のように表示したい。 ・A列は値が重複しても同じ値を表示します。 ・A列以外は値が重複した場合空欄を表示します。 ・列の長さは同一キー項目で一番行数が多いものとなります。 5番の要件で苦慮しています。どうかよろしくお願い致します。 ----------------------------- 表1 A列、B列、C列、D列、E列 A1 ,B1 ,C1 ,D1 ,E1 A2 ,B2 ,C2 ,D2 ,E2 表2 A列、F列、G列 A1 ,F1 ,G1 A1 ,F11 ,G11 A2 ,F2 ,G2 A2 ,F22 ,G22 A2 ,F222 ,G222 表3 A列、H列 A1 ,H1 A1 ,H11 A1 ,H111 A2 ,H2 A2 ,H22 A2 ,H222

  • Excel2列の重複チェック(左右逆も)

    1 A B 2 C D 3 E F 4 G H 5 D H 6 B A 7 A B 8 Z N 9 A C ExcelのA列B列に上記のようにアルファベットが記載されているとします。 このときに列ごとに重複が無いかをチェックする関数をご教授頂きたく思います。 単純な重複だけではなく、 ABもBAも同じとして認識するような関数を希望しております。 データの結果として 1 A B 2 C D 3 E F 4 G H 5 D H 6 B A 重複 7 A B 重複 8 Z N 9 A C このように記載されるか 1 A B 2 C D 3 E F 4 G H 5 D H 6 7 8 Z N 9 A C このようにデータが消えるかのどちらかのデータがでる形だと助かります。 関数で実現できるのかどうか色々調べましたがまったくわからず、こちらの 方々に助けていただければ幸いです。

  • EXCEL2007 情報抽出 関数

    A~E列それぞれの一つのセルに"1"を入力し、F列にある情報を抽出、 G列のセルに表示させたいです。 行が多いので、IF関数などは使用できませんでした・・・ 何を使用すればよろしいでしょうか・・・? 例) A1~A20 B1~B20 C1~C20 D1~D20 E1~E20 それぞれの列の一つだけに1を入力します。 ・A 5に1を入力 → F5の情報をG1に表示 ・B15に1を入力 → F15の情報をG2に表示 ・C 2に1を入力 → F2の情報をG3に表示 ・D18に1を入力 → F18の情報をG4に表示 ・E9 に1を入力 → F9の情報をG5に表示 行数が多く、複数の関数を試してみても、数の制限にひっかかるのか うまくいかず困っています。どうぞよろしくお願いします。

  • エクセルのデータから一致するデータを出したい

    エクセルの表から一致するデータに対応する指定列のデータを表示させたいのですがどの関数で設定すればよいのか教えて下さい。 A2からDの30までの表(実際には4000列以上) 1行は見出し A列は1~のナンバリング B列は商品コード(同じコードが複数ある)    ・昇順に並べてある C列は日付け    ・2番目に優先で昇順に D列は文字列 探したい商品コードをB1入力、それに対応するD列の文字列の昇順のトップをD1に表示させたい この内容で伝わるでしょうか オートフィルターで選ぶのも考えたのですが、入力した時その列のある列のデータが瞬時に見たいのです。 よろしくお願いします。

  • Excel関数です。指定のセルから、n番目おきに数値を表示する方法につ

    Excel関数です。指定のセルから、n番目おきに数値を表示する方法につきまして。 Sheer1に元となる表   A    B    C    D 1 番号 開始年 周期 金額 2  1  2000    4   100 3  2  2005    3   200 4  3  2001    5   300 5  4  2004    2   400 ・ ・ Sheet2に反映させる表     A     B    C    D    E    F    G 1  番号  2000  2001  2002  2003  2004  2005  (←こちらの数値はyyyyで表した年です) 2  1 3  5 4  3 5  1 Sheet2 A列に任意の Sheet1 A列の番号を入力すると、 Sheet2 B2以降に Sheet1表の対応する年度から、 C列で指定した周期ごとにD列の金額が反映されるような表を作成したいと考えています。 例えば、Sheet1元表の「4」をSheet2 A列に入力すると、 2000年から2003年までは 0 2004年に 400 2005年に  0 以降、2年おきに400を表示。 無理やりE1からn年目(n番目)という項目を設け、開始年を考えずに E2 =IF((ROUND(E1/$C$2,0)-E1/$C$2)=0,1*$D$2,0)と Sheet1に作成は出来たのですが、  A   B    C   D   E   F ・・・・・ 1番号 開始年 周期 金額   1   2   3   4   5  6 2 1 2000  4   100 3 2 2005  3   200 4 3 2001  5   300 5 4 2004  2   400 ・ ・ 開始年度から、別シートでとなると どのように計算させて良いのかわかりません。 分かり難い質問で申し訳ございませんが、どうぞよろしくお願いします。

  • Excel関数で一致した条件を合計する方法

    Excelの関数を使って、E2:E4のセルにF列の「A」~「D」に 一致した場合、G列の「8」または「9」を加算する方法を教えて下さい。 例えば、スギの場合だと...... スギの1日目が「A」の時、F1:G4の表をもとに、「8」になり スギの2日目が「C」の時「7」になり スギの3日目が「A」の時「8」になり、 E2の合計は「8+7+8」と加算されるということです。 スギの合計は23、 マツの合計は25、 サクラの合計は28というふうになればいいのですが・・・。 どなたか教えて下さい。お願いします。   A   B   C   D   E    F  G   1     1日  2日  3日 合計  A  8 2 スギ  A   C   A       B  9 3 マツ  C   D   A       C  7 4 サクラ B   B   D       D  10

専門家に質問してみよう