• ベストアンサー

【エクセル】抽出データを上に詰めて表示させたい。

重複するデータを上に詰めて表示さセル方法が解らないです。 B列はA列の元データから重複分は表示しないようにしています。 C列はA列の元データから重複分の数を数えています。 │A │B    │C│ D │ 1│あああ │あああ │3│ 2│いいい │いいい │2│ 3│あああ │     │ │ 4│ええ  │ ええ  │2│ 5│おおお │おおお │1│ 6│ええ  │   │ │ 7│いいい │  │ │ 8│あああ │  │ │ 9│うううう│うううう│1│ ・ ・ 上記のような表で、A列が元データで、 B列にはセルB1から、=IF(COUNTIF($A$1:A1,A1)>1,"",A1)という関数を オートフィルで下まで伸ばしています。 C列は、=IF(COUNTIF($A$1:A1,A1)>1,"",COUNTIF($A$1:$A$100,A1))と いう関数を使用しています。 そこで、B列C列の何も表示されていないセルを詰めて、上に詰めて 表示させたいです。マクロは良くわからないのでなるべく関数で お願いします。ちなみに、今使用している関数も、こうしたほうが いいというのがありましたら。訂正してもらえると助かります。 解りづらいところがありましたら、補足します。 宜しくお願いします。

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

  • ベストアンサー
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.3

B列にはセルB1から、=IF(COUNTIF($A$1:A1,A1)>1,"",A1)という関数を オートフィルで下まで伸ばしています。 の部分の作業に2行使います。 B列は =IF(COUNTIF($A$1:A1,A1)>1,"",ROW(A1)) にして作業列にして使います。(必要なデータのみ その行番号を出しておきます) C列に =INDEX($A$1:$A$100,SMALL($B$1:$B$100,ROW(A1)),1) エラー処理入れると =IF(ISERROR(SMALL($B$1:$B$100,ROW(A1))),"",INDEX($A$1:$A$100,SMALL($B$1:$B$100,ROW(A1)),1) で大丈夫かと思います。 C列は、=IF(COUNTIF($A$1:A1,A1)>1,"",COUNTIF($A$1:$A$100,A1))と は D列に、=IF(C1="","",COUNTIF($A$1:$A$100,C1))

aisenyou
質問者

お礼

回答ありがとうございます。出来ました。 さらに式も直していただき、スマートになってとても感謝です!

その他の回答 (2)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

では、D1に =IF(B1="","",COUNTA($B$1:B1)-COUNTBLANK($B$1:B1)) と入れて、下にオートフィル E1に =IF(ROW(E1)<=MAX($D$1:$D$100),INDEX(B$1:B$100,MATCH(ROW(E1),$D$1:$D$100,0)),"") と入れて、下にオートフィル E列をF列にオートフィル これでB列C列のデータが上詰でE列とF列に表示されます。 D列がじゃまなら非表示にして下さい。

aisenyou
質問者

お礼

回答ありがとうございます。 見事に思い通りのものができました。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

少なくともC列だけでもオートフィルタを設定して、「空白以外のセル」を選択、という方法ではだめですか? 別解ですが、普段このような場合には、別に行番号列を設け、「データの並べ替え」で空白行を取り除き、再度「行番号」で元の順にしています。

aisenyou
質問者

お礼

早速の回答ありがとうございます。 説明不足ですいません。オートフィルタを使わない方法で出来ればと 思っています。宜しくお願いします。

関連するQ&A