• ベストアンサー

エクセルで複数ある同じ数値の行を1つだけにしたい

初めて質問させて頂きます。 エクセルについての質問です。 バージョンは2002です。 複数ある行の中で、同じ数値がいくつかある場合、それを1行だけにする方法はありますでしょうか? 同じデータが複数ではなく1つだけにしたいのです。 ___A____B____C___ 1│330│220│520│ _________________ 2│330│ 80│890│ _________________ 3│330│ 72│ 69│ _________________ この様な場合、A列に同じ数値が入っている場合 1行のみ残したいのです。 何か良い方法ありましたら教えてください。

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

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

やり方として (1)VBA (2)関数+ソート(手作業)削除 (3)フィルタ の回答が出てます。 関数だけでやる方法を述べます。 重複削除とは=>初出をとる=>では「初出」をどう捕らえるか 結果で飛び行が出ないよう=>初出に連番を振り 連番だけ別のところに取り出す。 ●捨てる・消す発想でなく、該当のものを別のところに抜き出す感覚。 簡単例で説明します。 A2:A13にデータがあるとします。文字列でも 同じです。 1 6 2 7 4 2 3 5 3 4 1 2 B1に0 B2に式=IF(COUNTIF($A$1:A2,A2)=1,MAX($B$1:B1)+1,"") をいれB13まで式複写。 結果B1:B13は 0 1 2 3 4 5 6 7 これで初出行に連番が振れました。 F2セルに =INDEX($A$2:$A$13,MATCH(ROW(A2)-1,$B$2:$B$13),0) といれて、7+1行まで式を複写する。 E2:E8に 1 6 2 7 4 3 5 がでます。 上記E2:E8は別シートにもってくるのも可能です。 また元データが3列のデータであってもINDEX関数の第3引数を1,2にして、もってこれます。 このタイプの問題は過去に私が何度も答えています。

その他の回答 (5)

回答No.5

(1) ___A____B____C___ 1│330│220│520│ _________________ 2│ │ 80│890│ _________________ 3│ │ 72│ 69│ _________________ 上記のようにしたいのでしたら、 1. D1に=IF(COUNTIF(A$1:A1,A1)=1, A1, "")と入力してA列のデータ分下へコピー 2.D列をコピーしてA列に値の貼付け 空白を上に詰めたければ、A列で昇順に並べ替え (2) ___A____B____C___ 1│330│220│520│ _________________ 2│ │ │ │ _________________ 3│ │ │ │ _________________ のように、A列が重複していればB・C列も削除するのであれば、 1. D1に=IF(COUNTIF($A$1:$A1,$A1)=1, A1, "")と入力してE, F列にコピー。3列とも、A列のデータ分下へコピー 2.D~F列をコピーしてA~C列に値の貼付け ...これではダメでしょうか?

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1198519
noname#95859
noname#95859
回答No.4

1行を残すというのを、次のように理解しました。 A列について評価して、その結果、行全体を削除する。 A列のセルに対しての削除ではない。 Advance filter、すいません、英語版を使っています。 Data/Filter/AdvancedFilter をそのA列の範囲に適用します。 対象エリヤと、比較エリヤを同じにして、 かつ、重複を削除を選びます。重複を削除はチェックマークを入れます。これが味噌です。 これで、期待通りの出力が一見得られます。 続いて全セル選択をして、別シートにペーストをすれば、最終的な出力となります。 (AdvancedFilterは、単に行を隠しただけです。これを 本当にいらない行を削除するには、小生は、上記のようにして実現していますが、それは、小生のPCの設定がそうなっているからなのかは、わかっていません。隠しただけの行を削除する件に関しては・・・・)

回答No.3

Sheet1のタブを右クリックして、コードの表示画面で次のコードコピー。 A列の同じ値を見つけて、最初を残し行削除します。 A列のデータがなくなったら、終了。 なお、もとの表が変わりますので、コピーした物で実行してください。 Sub GyouDelete() Dim i, j As Integer Dim X, Y, L As String i = 1 X = "Dummy" While X <> "" X = Worksheets("Sheet1").Cells(i, 1).Value Y = Worksheets("Sheet1").Cells(i + 1, 1).Value While X = Y L = (i + 1) & ":" & (i + 1) Rows(L).Select Selection.Delete Shift:=xlUp Y = Worksheets("Sheet1").Cells(i + 1, 1).Value Wend i = i + 1 X = Worksheets("Sheet1").Cells(i, 1).Value Y = Worksheets("Sheet1").Cells(i + 1, 1).Value Wend End Sub

noname#105277
noname#105277
回答No.2

 泥臭いですが、私は以下のような方法で処理しております。  なお、A 列が重複チェックしたい列だと仮定しています。 1. A 列でソートします。 2.「2」行目の任意の空列に以下の数式を入れ、オートフィルで他列へも適用します。 --------- =IF(A2=A1,"★", " ") ---------  前行の A 列と比較して、同じであれば★印でマークするわけです。 3. 数式を入れた列をコピーし、[形式を選択して貼り付け] で値のみ上書き張付けします。 4. 数式を入れた列 (今は値だけになっていますが) でソートすれば、不要行が一定範囲に固まりますので、行の範囲指定で一括削除します。  元データの順番を崩したくない場合は、「1.」の作業の前に、各行へ連番を振っておき、「4.」の後でソートし直せばよいかと思います。  なお、老婆心ですが、Excel は操作ミスで直ぐにデータがくちゃくちゃになってしまいますので、バックアップは当然ですが、ご注意して作業下さい。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

安直ですが以下の方法は如何でしょうか。 データの並び替えをA列基準で行い、不要な行を行削除する。 ・A1セルをポイントし、データ⇒並び替え⇒最優先されるキーをA列で実行 但し、範囲先頭行がデータの場合、データをチェックして下さい。

keijikeiji
質問者

お礼

ありがとうございます。 このやり方で今までやっていたんですが、時間が掛かってしまって。。。 データの量がかなりあるもので。 でもありがとうございました!

関連するQ&A

専門家に質問してみよう