Excel (一般機能)

Excelの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows XP Home Edition : Excel 2002)
名称が重複している列リストから、重複しない名称を取り出したい
投稿日時: 17/12/28 16:03:55
投稿者: ISBSGR

A列に重複した「名称」名のリストがあり、この中から重複しない名称のみC列に取り出したいのですが、うまく行きません。下記の配列数式をC3セルに入力して下にコピーしていますが、最後まで取り出し後に最初の名称が連続して表示されてしまいます。お知恵をよろしく。
 
   A        C
2
3 バナナ     バナナ
4 リンゴ     リンゴ
5 バナナ     玉子
6 玉子      大根
7 大根      人参
8 リンゴ
9 玉子
10
11 人参 
12 大根
13 バナナ
14
 
 
{=INDEX(名称,MIN(IF(COUNTIF(C$2:C2,名称)=0,ROW(名称)-2)))} 

回答
投稿日時: 17/12/28 20:19:57
投稿者: Mike

今現在、PCが傍にないので確認できないけど、Excel 2013 なら関数も不要で簡単に無重複リストが得られます。
確か、[表示]タブの配下に[重複の削除]なるコマンドがあったような。この機能でパツイチです。ご確認あれ!

回答
投稿日時: 17/12/28 21:22:28
投稿者: んなっと

Excel2002ということで、面倒ですね。
 
     A B    C
 3 バナナ   バナナ
 4 リンゴ   リンゴ
 5 バナナ    玉子
 6  玉子    大根
 7  大根    人参
 8 リンゴ      
 9  玉子      
10          
11  人参      
12  大根      
13 バナナ      
 
C3
=INDEX(A:A,MIN(INDEX(ROW(名称)+((名称="")+(COUNTIF(C$2:C2,名称)>0))*10^4,)))&""
下方向・↓

回答
投稿日時: 17/12/29 06:50:33
投稿者: Mike

んなっと さんのご回答のお蔭で、貴方の環境が「WinXP+Excel2002」であることに気付きました。(数年前の私の環境と同じ!)
行ラベルを「名称」名のリストとする、仮のピボットテーブルを作成してみてください。無重複のリストが一瞬で仕上がるので、それをコピーすれば好い。

投稿日時: 17/12/30 21:44:29
投稿者: ISBSGR

皆さんありがとうございます。んなっとさん提示の数式をそのままコピーして貼り付けたら、一発でバッチリできてしまい、感動しました。この数式は充分理解ができないのですが、できれば簡単な解説をいただけないでしょうか。なので、もう少し開いておきます。
MikeさんとMikeさんの提案は、操作しなければならないので、バージョンによって操作環境が変わってくるし、操作法を覚えなければならないし、他の人が使用する場合には無理があります。、

回答
投稿日時: 17/12/31 17:12:16
投稿者: んなっと

解説を作るのに少し時間がかかるので、しばらく待ってください。

回答
投稿日時: 18/01/01 12:55:16
投稿者: LMK

ISBSGR さんの引用:
MikeさんとMikeさんの提案は、操作しなければならないので、バージョンによって操作環境が変わってくるし、操作法を覚えなければならないし、他の人が使用する場合には無理があります。

 
すみません横から質問です。
Excel2002では、
[フィルタ オプションの設定] で
[指定した範囲] に
[重複するレコードは無視する] 条件でデータを抽出する機能はないんでしたっけ。
 
Excelは本来表計算ソフトなのです。
この質問のようなニーズは数式にはそぐわないので、普通は「操作」をします。
それを無理に数式でやろうとするから、んなっとさんにしわ寄せが来ているのですよね。
それこそ「無理」なのではないでしょうか?

回答
投稿日時: 18/01/01 15:51:25
投稿者: んなっと

C7の式は、
=INDEX(A:A,MIN(INDEX(ROW(名称)+((名称="")+(COUNTIF(C$2:C6,名称)>0))*10^4,)))&""
このうち
MIN(INDEX(ROW(名称)+((名称="")+(COUNTIF(C$2:C6,名称)>0))*10^4,))
がなぜ行番号11を返すのか考えます。
 
     A  B    C     D
 1              [1]
 2  名称       ROW(名称)
 3 バナナ   バナナ     3
 4 リンゴ   リンゴ     4
 5 バナナ    玉子     5
 6  玉子    大根     6
 7  大根   人参     7
 8 リンゴ   みかん     8
 9  玉子           9
10               10
11  人参          11
12  大根           12
13               13
14 みかん           14
15 リンゴ           15
 
【1】
(名称="")(COUNTIF(C$2:C6,名称)>0)は、除外すべきものを式にあらわしたものです。
ワークシートの演算では、TRUEは1,FALSEは0と評価されるので、
下の表で1が[2][3]のどちらかにある行は除外すべきものです。
 
     A  B    C     D      E                F
 1              [1] [2]空白除外 [3]C列すでに上にあるもの除外
 2  名称       ROW(名称)  (名称="")    (COUNTIF(C$2:C6,名称)>0)
 3 バナナ   バナナ     3      0                1
 4 リンゴ   リンゴ     4      0                1
 5 バナナ    玉子     5      0                1
 6  玉子    大根     6      0                1
 7  大根         7      0                1
 8 リンゴ           8      0                1
 9  玉子           9      0                1
10               10      1                0
11  人参           11      0                0
12  大根           12      0                1
13               13      1                0
14 みかん           14      0                0
15 リンゴ           15      0                1
 
【2】
[2]と[3]をたして、とても大きい数、例えば10^4をかけます。
 
     A  B    C  D    E    F        G
 1           [1] [2]空白 [3]自上[4]悪い子はおしおき
 2  名称                   ([2]+[3])*10^4
 3 バナナ   バナナ  3    0    1      10000
 4 リンゴ   リンゴ  4    0    1      10000
 5 バナナ    玉子  5    0    1      10000
 6  玉子    大根  6    0    1      10000
 7  大根      7    0    1      10000
 8 リンゴ        8    0    1      10000
 9  玉子        9    0    1      10000
10            10    1    0      10000
11  人参        11    0    0        0
12  大根        12    0    1      10000
13            13    1    0      10000
14 みかん        14    0    0        0
15 リンゴ        15    0    1      10000
 
これで[2]と[3]の情報を[4]にまとめることができました。
[4]に10000のような大きい数が来ている行こそ除外すべきものです。
[4]に0が来ている行は、残したいものです。
 
【3】
最後に[1]の行番号と[4]をたします。
どうですか。
除外すべきもの10003,10004,...となって、はるか彼方に飛ばされてしまいました。
あとは残った11,14の中で最小値をとれば、目的のA列の行番号「11」が取得できます。
 
     A  B    C  D    E    F        G    H
 1           [1] [2]空白 [3]自上 [4]おしおき     
 2  名称                   ([2]+[3])*10^4 [1]+[4]
 3 バナナ   バナナ  3    0    1      10000  10003
 4 リンゴ   リンゴ  4    0    1      10000  10004
 5 バナナ    玉子  5    0    1      10000  10005
 6  玉子    大根  6    0    1      10000  10006
 7  大根      7    0    1      10000  10007
 8 リンゴ        8    0    1      10000  10008
 9  玉子        9    0    1      10000  10009
10            10    1    0      10000  10010
11  人参        11    0    0        0    11 ←最小値
12  大根        12    0    1      10000  10012
13            13    1    0      10000  10013
14 みかん        14    0    0        0    14
15 リンゴ        15    0    1      10000  10015

回答
投稿日時: 18/01/01 16:51:02
投稿者: Mike

ISBSGR さんの引用:
Mikeさんの提案は、操作しなければならないので、バージョンによって操作環境が変わってくるし、操作法を覚えなければならないし、他の人が使用する場合には無理があります。
簡単な操作より、「充分理解ができない」数式がお好みなマニアックな人とは露知らず、出しゃばり過ぎました。サヨナラ。

投稿日時: 18/01/03 00:11:39
投稿者: ISBSGR

んなっとさん、大変丁寧な説明を戴き、恐縮するとともに大感謝しています。この数式は、マンションの管理に利用します。当マンションは、所有者が度々変わるだけでなく、複数の部屋を所有している人も多く、部屋面積が異なるので、総会での議決件数がそれぞれに異なります。平穏な場合は問題ありませんが、裁判沙汰になると、大問題になり、所有者数が何人か、一所有者の議決件数が幾つかの把握が必要になるので、重複しない氏名リストが必要です。もちろん、平穏な場合でも、誰が賛成か、反対かを明確に提示すれば、所有者は安心できます。この数式により、誰でも簡単に把握できるので、これらの問題が解決できます。ありがとうございました。