アプリ版:「スタンプのみでお礼する」機能のリリースについて

初めて質問させて頂きます。
エクセルについての質問です。
バージョンは2002です。
複数ある行の中で、同じ数値がいくつかある場合、それを1行だけにする方法はありますでしょうか?
同じデータが複数ではなく1つだけにしたいのです。

___A____B____C___
1│330│220│520│
_________________
2│330│ 80│890│
_________________
3│330│ 72│ 69│
_________________

この様な場合、A列に同じ数値が入っている場合
1行のみ残したいのです。
何か良い方法ありましたら教えてください。

A 回答 (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にして、もってこれます。
このタイプの問題は過去に私が何度も答えています。
    • good
    • 0

(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
    • good
    • 0

1行を残すというのを、次のように理解しました。


A列について評価して、その結果、行全体を削除する。
A列のセルに対しての削除ではない。

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

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
    • good
    • 0

 泥臭いですが、私は以下のような方法で処理しております。


 なお、A 列が重複チェックしたい列だと仮定しています。

1. A 列でソートします。

2.「2」行目の任意の空列に以下の数式を入れ、オートフィルで他列へも適用します。
---------
=IF(A2=A1,"★", " ")
---------
 前行の A 列と比較して、同じであれば★印でマークするわけです。

3. 数式を入れた列をコピーし、[形式を選択して貼り付け] で値のみ上書き張付けします。

4. 数式を入れた列 (今は値だけになっていますが) でソートすれば、不要行が一定範囲に固まりますので、行の範囲指定で一括削除します。

 元データの順番を崩したくない場合は、「1.」の作業の前に、各行へ連番を振っておき、「4.」の後でソートし直せばよいかと思います。
 なお、老婆心ですが、Excel は操作ミスで直ぐにデータがくちゃくちゃになってしまいますので、バックアップは当然ですが、ご注意して作業下さい。
    • good
    • 0

安直ですが以下の方法は如何でしょうか。



データの並び替えをA列基準で行い、不要な行を行削除する。

・A1セルをポイントし、データ⇒並び替え⇒最優先されるキーをA列で実行
但し、範囲先頭行がデータの場合、データをチェックして下さい。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/06/03 19:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています