10秒目をつむったら…

A〜P列まで1行毎にデータが入っているワークシートがあります。
1行目はヘッダーです。
M列には日付が、24-Mayと表示されており
N列には時間が、23:21:08と表示されています。
MとN列、どちらも重複している行を1行は残して残りの重複した行をvbaで削除したいのですが、どなたか教えて頂けませんか。

A 回答 (4件)

こんにちは



Range("A1").Resize(Cells(Rows.Count, 13).End(xlUp).Row, 16).RemoveDuplicates Array(13, 14), xlYes

とかではいかが?
    • good
    • 1

日付・時間の入力方法でセル値を比較した場合異なる結果が出ます。


仮に手入力で「5/24」「23:21:08」と入力しているとします。
削除する行は重複するどちらの行でも可とします。そしてデータシートは1行の空白行があるとします。またデータ行の1列目に値が入力されているとします。(条件が多くなってすみません。)
-----
Sub 重複行削除()
  Dim l As Integer ' 重複を調べる行
  '
  l = 2
  Do While Cells(l, 1) <> "" ' 第1列のデータが無くなるまで繰り返す
   If (Cells(l, 13) = Cells(l + 2, 13)) And _
     (Cells(l, 14) = Cells(l + 2, 14)) Then ' M,N 列の値を比較する
    ' 同じなら調べている行の次の2行を削除する
    Range(Cells(l + 2, 1), Cells(l + 3, 16)).Delete
   Else
    ' 日時が異なれば次の2行目へ移動する
    l = l + 2
  End If
 Loop
End Sub
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます!
なかなかトリッキーですね!!

お礼日時:2022/06/12 16:51

「マクロの記録」で、重複を取り除く作業を記録してみましょう。


「データ」リボンにある「データツール」の「重複の削除」の一連の捜査を記録するんです。

自分ならO列を挿入して、そこに
M列の値とN列の値を「足した」結果を表示させます
そしてO列に対して重複する行を削除します。
さらに重複した行を削除したら、挿入したO列も削除。

するとこんなのができる。

Sub Macro1()
'
' Macro1 Macro
'

'
 Columns("O:O").Select
 Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
 Application.CutCopyMode = False
 ActiveCell.FormulaR1C1 = "=RC[-2]+RC[-1]"
 Columns("O:O").Select
 Range("O2").Activate
 Selection.FillDown
 ActiveSheet.Range("$M:$O").RemoveDuplicates Columns:=3, Header:=xlNo
 Columns("O:O").Select
 Selection.Delete Shift:=xlToLeft
End Sub

※ 無駄にすべての行に対して作業してるため処理が非常に遅いので注意してください。

このように一つずつ手作業の手順を記録して、どのような記述になるのかを確認し、
そこから学び取るようにしてみましょう。
1年もすれば「マクロの記録」を使うことなく大半のマクロ作成ができるようになってますよ。
    • good
    • 3

UNIQUE関数でできそうですが、


VBAでないとだめなのかなぁ。
    • good
    • 1

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