電子書籍の厳選無料作品が豊富!

こんにちは。
行に同じデータが入っていて、それを一つだけにする方法ってありますか?

 
1 2 3 4
1 2 3 4
2 3 4 5
2 3 4 5
とあったら、
1 2 3 4
2 3 4 5
と2行にして、要らない2行は消したいのですが。
並び替えても同じデータなため必ずそばにいて削除しづらいんです^^;
1万行とかあるので手作業はちょっと・・・。
よろしくお願いします。  

A 回答 (4件)

Excelのマクロが使えれば、こんな方法でも。


A列にデータがあると仮定します。

マクロの実行時には、ダブリのチェックを行いたい範囲を選択してから、マクロDblChkを実行してくださいね。

では。

Sub DblChk()

Dim aSelect As Variant
Dim aTemp() As Variant
Dim sAddr As String
Dim r As Long, c As Integer
Dim l As Long


'■■■ 範囲設定 ■■■
If Not IsArray(Selection) Then
MsgBox "ダブルチェックをしたい、正しい範囲を選択してください", vbInformation, "警告"
Exit Sub
End If

'■■■ 65000行以上のデータへの警告 ■■■
yesno = MsgBox("65000行以上のデータでは使えません!それ以下のデータですね?", vbYesNo, "警告")
If yesno = vbNo Then
Exit Sub
End If


'■■■ 並べ替えを行う(Keyは先頭列) ■■■
Selection.Sort _
Key1:=Selection.Cells(1, 1), Order1:=xlAscending, _
Header:=xlNo, OrderCustom:=1, MatchCase:=True, SortMethod:=xlStroke
'■■■ 選択範囲を待避 ■■■
aSelect = Selection
sAddr = Selection.Address
'■■■ 重複しない値の配列を作成する ■■■
If UBound(aSelect, 1) > 1 Then
ReDim aTemp(1 To UBound(aSelect, 1), 1 To UBound(aSelect, 2))
'1行目から最後の行-1までの判定
For r = 1 To UBound(aSelect, 1) - 1
If aSelect(r, 1) <> aSelect(r + 1, 1) Then
l = l + 1
For c = 1 To UBound(aSelect, 2)
aTemp(l, c) = aSelect(r, c)
Next c
End If
Debug.Print r
Next r
'最後の行を転記(後側のデータを残す場合)
l = l + 1
For c = 1 To UBound(aSelect, 2)
aTemp(l, c) = aSelect(r, c)
Next c
End If
Range(sAddr) = aTemp

End Sub
    • good
    • 0

 #1さんとよく似たやり方なので改めて書き込むのもちょっと気が引けるのですが...。



 まず現在の表を昇順・降順どちらでも並び替えをしておく。(これは#1さんの方法でも同じですね)

 元のデータの先頭が1行目にある場合は1行目に行を挿入して2行目からデータが始まるようにする。

 元データがA2から始まっているとして、B2に次の式を入れる。
=IF(A1<>A2,"",1)

 B2のセルを選択して、セル右下にカーソルを合わせてポインタが+になったらダブルクリック。これで最終行まで演算式がコピーされます。必要なデータのB列には空白、ダブりのデータのB列は1が入ります。

 表全体またはシート全体を選択→コピー→形式を選択して貼り付けで値のみを貼り付け

 もう一度B列をキーに並べ替えをするとB列に1が入っている行がかたまるのでこれを削除する。
    • good
    • 0

VBAですが


Sub Macro1()
d = Range("A56356").End(xlUp).Row '一番下の行数を得る
MsgBox d
'---A1:AdまでA列で、昇順ソート
Range(Cells(1, "A"), Cells(d, "A")).Select
Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
:=xlPinYin
'-----1行前のデータ
m = ""
j = 1 'Sheet2の書き出し初めの行
For i = 1 To d
If Cells(i, "A") = m Then '直前のデータと同じか
'同じ場合は何もしないで次行へ
Else
'----違うならSheet2に書き出し
Worksheets("sheet2").Cells(j, "A") = Worksheets("sheet1").Cells(i, "A")
m = Worksheets("sheet1").Cells(i, "A") '前のデータを変える
j = j + 1 'Sheet2の書き出し行を1行下へ
End If
Next i
End Sub
元シートをコピーして保存しておくこと。
列数がA列だけでない場合は
Worksheets("sheet2").Cells(j, "A") = Worksheets("sheet1").Cells(i, "A")を項目数(列数)-1だけコピーして,この行のすぐ下へ挿入貼りつけして、後
・・"A")=・・・"A")となっているところを
・・"B")=・・・"B")
・・"C")=・・・"C")
・・・
と修正してください。(「・・・」は変えなくてよい部分で表現を略した記しです。)
    • good
    • 0

A1からA10000にデータが入っていると仮定して聞いて下さい。


まず、A列を並べ替えて下さい。
B1に次の数式を入れて下さい。
=IF(A1=A2,"削除対象","")
これを10000行コピペする。
と、ダブっている行のB列に削除対象と表示される。
データ→フィルタ→オートフィルタを選択
B1の三角をクリック
削除対象を選ぶ
この段階で重複したデータのみが表示されます。
まとめて削除する。
で、うまくいくと思います。
    • good
    • 0

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