[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『複数銘柄の中から、銘柄別の抽出方法』(パシリ)
いろいろな銘柄の果物を果物別に一つだけ持っている人を抽出する方法があればご教授ください。
Aさん 青森りんご 2個
Aさん 津軽りんご 1個
Bさん 青森りんご 1個
Cさん 三ケ日みかん 2個
Cさん 青森りんご 1個
上記の表で、りんごだけ持っているAさんとBさんを抽出したいのです。
Aさん 青森りんご 3個
Aさん 津軽りんご 1個
Bさん 青森りんご 1個
という表ができればベストですが、AさんとBさんが該当するということがわかるだけでもかまいせん。
< 使用 Excel:unknown、使用 OS:unknown >
ピボットテーブル。 (GobGob) 2016/10/17(月) 12:59
あー。「りんごだけ」ってことね。
A B C D E F G H 1 Aさん りんご 2 1 Aさん りんご 2 2 Aさん りんご 1 2 Aさん りんご 1 3 Bさん りんご 1 3 Bさん りんご 1 4 Cさん みかん 2 5 Cさん りんご 1
D列作業列 D1 =IF(COUNTIFS(A:A,A1,B:B,"*りんご*")=COUNTIF(A:A,A1),ROW(),"")
F1 =IF(MAX($D:$D)<ROW(A1),"",INDEX(A:A,SMALL($D:$D,ROW(A1)))) 右下へコピー。
(GobGob) 2016/10/17(月) 13:12
> F1 =IF(MAX($D:$D)<ROW(A1),"",INDEX(A:A,SMALL($D:$D,ROW(A1))))
MAX じゃなく、COUNT では?
Excelのバージョンが不明だけど、2007以降を想定してるんだったら IFERROR 関数使ってもいいですけど。 (笑) 2016/10/17(月) 13:37
>いろいろな銘柄の果物を果物別に一つだけ持っている人を抽出 ということはたとえばCさんがみかんしか持っていなければCさんも抜き出し対象とするのでは?
つまり
Aさん 青森りんご 2個 Aさん 津軽りんご 1個 Bさん 青森りんご 1個 Cさん 三ケ日みかん 2個
だった場合
Aさん 青森りんご 2個 Aさん 津軽りんご 1個 Bさん 青森りんご 1個 Cさん 三ケ日みかん 2個 なのでは? (ねむねむ) 2016/10/17(月) 13:48
説明不足ですいません。りんごだけを持っているというのは、複数ある果物のうち、
りんごという果物、みかんという果物、バナナという果物を一種類だけ持っている人なのです。
しかも、りんごやみかんにはそれぞれ複数の銘柄(青森りんごや津軽りんご、三ケ日みかんや愛媛みかん など)
がある中で、銘柄にかかわらずりんごだけ持っている人、みかんだけ持っている人を抽出したいのです。
例えば、青森りんごと三ケ日みかんを持っている人を除いて、りんごだけ持っている人のリストを作り、
これからその人にみかんやバナナを売る、というのが趣旨です。
どうかよろしくお願いします。
なお、エクセルのバージョンは2010です。
(パシリ) 2016/10/17(月) 13:58
Aさん 青森りんご 2個 Aさん 津軽りんご 1個 Bさん 青森りんご 1個 Cさん 三ケ日みかん 2個 Cさん 青森りんご 1個
だった場合
Aさん 青森りんご 2個 Aさん 津軽りんご 1個 Bさん 青森りんご 1個
と、Cさんのように複数の果物を持っているの人を除きたいのです。
(パシリ) 2016/10/17(月) 14:03
『もしCさんがみかんしか持っていなかったら』Cさんも抜き出すのでは、と書いたのだが? (パシリさんの例題の書き方が「りんご」だけを対象にしているように見えるため) (ねむねむ) 2016/10/17(月) 14:09
Dim rg1 As Range, rg2 As Range, dic, k Set dic = CreateObject("scripting.dictionary") For Each rg1 In Sheets("果物一覧").UsedRange.Columns("A").Cells For Each rg2 In Sheets("Sheet1").UsedRange.Columns("A").Cells If rg2.Offset(, 1).Value Like "*" & rg1.Value & "*" Then If Not dic(rg2.Value) = rg1.Value Then If dic(rg2.Value) = Empty Then dic(rg2.Value) = rg1.Value Else dic(rg2.Value) = "NG(2種類以上持っている)" End If End If End If Next rg2 Next rg1 Sheets.Add after:=Sheets("Sheet1") Set rg1 = ActiveSheet.Range("A1") For Each k In dic.keys rg1.Value = k rg1.Offset(, 1).Value = dic(k) Set rg1 = rg1.Offset(1) Next k End Sub (mm) 2016/10/17(月) 14:11
趣旨がよく理解できてないけど、 果物を1種類しか持ってない人だけを抽出で、作業列を2列使ってもいいんだったら
G 1 りんご 2 みかん 3 バナナ
↑ のようにどこかに果物名を全部書き出しておく。
D1 =IFERROR(LOOKUP(1,0/FIND($G$1:$G$3,B1),$G$1:$G$3),"") E1 =IF(D1="","",IF(COUNTIFS(A:A,A1,D:D,D1)=COUNTIF(A:A,A1),ROW(),""))
D1とE1を下コピー
抽出したいところに
=IFERROR(INDEX(A:A,SMALL($E:$E,ROW(A1))),"")
右下コピー
とか? (笑) 2016/10/17(月) 14:18
笑さんの方法でサンプルデータではできました。
ただ、データが10万行あるので、遅々として計算は進まずですが・・・
(パシリ) 2016/10/18(火) 07:53
横から失礼します。
関数のことは詳しくないのですが、
>>ただ、データが10万行あるので、遅々として計算は進まずですが・・・
そうそうたる皆さんからの回答の式でも、遅いということであれば、もう、それは 関数で処理する限界というか、関数以外の方式(マクロとか)を検討する必要があるのかもしれません。
で、そういうこととは別に、現在の構想は、たとえば 「りんご」という文字列を与え データ内に「りんご」という文字列があるものは、きっと「りんご」だろう、ないものは「りんご」じゃないだろう。 こういうロジックですよね。
でも、品種ということであれば 「紅玉」もりんごですよね。 でも 「りんご」で検索してもマッチしない。 逆に、「グレープ」を抽出しようとすれば「グレープフルーツ」も「グレープ」だとみなされてしまう。
何を言いたいかというと、こうした「分析」処理をするにあたっては、データの中に「分析コード」(たとえば りんご なら 1 とか)を 持っておく必要があるだろうなということです。 明細データの一部として持つ形もありでしょうけど、通常は、マスタとして
青森りんご 1 紅玉 1 三ケ日みかん 2
こんなように持たせますね。
で、元データの品名を 分析コードとしての品種に置き換えて、Aさんの 1 が Aさんのすべてと同じ個数なら Aさんは りんごだけを持っている という判断ができると思います。
(β) 2016/10/18(火) 13:00
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.