• 締切済み

エクセルで抽出、重複は無し、ゼロ以外の

0 A 0 0 N 0 0 0 B 0 0 0 0 K 0 0 0 J 0 0 0 K 0 0 0 A 0 0 0 J 0 0 以下抽出行として(0は無視) N A B K  J という重複無しの抽出を教えて下さいませんか?

みんなの回答

  • maron--5
  • ベストアンサー率36% (321/877)
回答No.4

    A   B   C   D 1   0   A   0   0 2   N   0   0   0 3   B   0   0   0 4   0   K   0   0 5   0   J   0   0 6   0   K   0   0 7   0   A   0   0 8   0   J   0   0 9 10 11   N   A 12   B   K 13       J A11=IF(ROW(A1)>COUNT(INDEX(1/(MATCH(A$1:A$10,A$1:A$10,)=ROW(A$1:A$10)),))-(COUNTIF(A$1:A$10,0)>0),"",INDEX(A:A,SMALL(INDEX(SUBSTITUTE((MATCH(A$1:A$10&"",A$1:A$10&"",)=ROW($1:$10))*(A$1:A$10<>0),0,10^5)*ROW($1:$10),0),ROW(A1)))) ★右と下にコピー ◆式が長くなりましたが

yasai-sarada
質問者

お礼

回答者さま有難う御座います。 私ももう少し考えたいと思います。

yasai-sarada
質問者

補足

回答者さま、おしい感じがします、でもうまいことなりませんでした。 ゼロは""で空白にしてみようと思います。セルに文字が入った場合ができたらお願いしたいのですが。。    A    B    C    D 1  1回   2回   3回   4回  ←頻度数です 2        東芝    3   日立  4   富士通 5        NEC    6        松下 7        NEC 8       東芝 9        松下 10 11 12 13 14 15   日立  東芝 16   富士通 NEC 17       松下

  • kuma56
  • ベストアンサー率31% (1423/4528)
回答No.3

A B C D E F G H 10 A 0 0 2N 0 0 0 3B 0 0 0 40 K 0 0 50 J 0 0 60 K 0 0 70 A 0 0 80 J 0 0 とするのなら、E1セルににIF関数式で =IF(A1=0,"",IF(COUNTIF($A$1:A1,A1)=1,A1,"")) っと入れてやってE1セルのコピーを取ってそれをE1セル~H1セルまで選択して貼り付ける。 すると、F1セルには =IF(B1=0,"",IF(COUNTIF($A$1:B1,B1)=1,B1,"")) っとなるので $A$1 の部分を $B$1 に直す。 同様にG1セルは $C$1 に、H1セルは $D$1 になおしてから E1セル~H1セルのコピーをとり、下方向へ貼り付ける。 すると0は表示されず、それ以外の文字も一番最初(上)のセルにあるものは表示して二番目以下は表示されなくなります。 それらをコピーして値で貼り付けて文字に直してから、各列ごとにソートしてやれば表示された文字だけをまとめる事ができます。 この作業をマクロ化すれば、自動でできるようになるでしょう。 しかし、表示される順番はソートするのでアルファベット順に変わってしまします。

yasai-sarada
質問者

お礼

回答者さま、有難うございます。 マクロでも試みようとおもいます。 でも数式にもう少しこだわりたいとおもっています。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

A,B,C,D列それぞれに対して重複無しの抽出をするとして、 1案 列見出しを与え、抽出条件 <>0 をどこかで与える必要がありますが、フィルターオプションで、重複カットし、別の場所に抽出を、列毎に実施する。 2案 マクロで行う例(昨日からDictionaryに凝っているので) Sub test() Dim targetRange As Range Dim myDic As Object Dim i As Long Set targetRange = Selection Set myDic = CreateObject("Scripting.Dictionary") For i = targetRange.Cells.Count To 1 Step -1 With targetRange.Cells(i) If .Value = 0 Then .Delete shift:=xlUp Else If Not myDic.exists(.Value) Then myDic.Add .Value, "" Else .Delete shift:=xlUp End If End If End With Next i Set myDic = Nothing End Sub 選択範囲の0と重複をカットします。下から処理するので順番が変わってしまうのが難。他の場所に出力するなら、上から処理できますので、必要なら改造してください。

yasai-sarada
質問者

お礼

回答者さま有難う御座います。 マクロを改造できるほどの力が無いものですから、 もう少し検討してみます。

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.1

抽出する規則をご提示願います。

yasai-sarada
質問者

補足

0以外の文字を下に抽出させたいのです。 重複はさせないで、関数式をと思ったのですが、 考えても関数式がでてきません。 どなたかお願いします。

関連するQ&A

専門家に質問してみよう