[[20230223153646]] 『重複していない行を削除』(おかもん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『重複していない行を削除』(おかもん)

日付と数値が入力された2列のデータがあり、その横に日付と別の数値が入力された2列のデータが並んでいます。
2つある日付の列は完全に同じものではなく、片方にはあるのにもう片方にはない日付があります。
その「重複していない日付とその横の数値」の行を削除して詰めることで、「日付、数値、左のと同じ日付、数値」のデータに直したいです。

検索すると、重複データの削除はヒットするのですが、重複していないデータを削除する方法はあるでしょうか。


日付 数値  日付 数値
2/10  3   2/10 4 
2/11  5   2/12 8
2/12  6   2/13 5

     ↓

日付 数値  日付 数値
2/10  3   2/10 4 
2/12  6   2/12 8
2/13  3   2/13 5

< 使用 Excel:Excel2019、使用 OS:Windows10 >


 Sub test()
     Dim i As Long
     For i = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
         If WorksheetFunction.CountIf(Range("C:C"), Cells(i, 1)) = 0 Then
             Cells(i, 1).Resize(, 2).Delete Shift:=xlUp
         End If
     Next
 End Sub
(フォーキー) 2023/02/23(木) 16:50:59

回答ありがとうございます。

マクロをいじったことがないので理解できません。
上の例と実際のブックとで違う部分もあるので、コードのどこを修正するかの検討がつかないです。

関数やアイコンを使った方法、あるいはコードの解説願えますか。
(おかもん) 2023/02/23(木) 17:04:17


 標準機能ではおそらく無理だと思います。
 関数は思いつかなかったので、コードの解説だけ。

 >上の例と実際のブックとで違う部分もあるので、
 セル番地などが違うと時間の無駄なので、実際のレイアウトを提示したほうが良いです。

 以下のレイアウトを使用しました。

    |[A]    |[B] |[C]    |[D] 
 [1]|日付   |数値|日付   |数値
 [2]|2月10日|   3|2月10日|   4
 [3]|2月11日|   5|2月12日|   8
 [4]|2月12日|   6|2月13日|   5
 [5]|2月13日|   3|       |    

 Sub test()
     Dim i As Long
     'A列の最下行から2行目まで順番にループ
     For i = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
         'A列の日付がC列に存在するか1行ずつ見ていく。
         If WorksheetFunction.CountIf(Range("C:C"), Cells(i, 1)) = 0 Then
             '日付がない場合、その行のA列とB列を上方向に削除する。
             Cells(i, 1).Resize(, 2).Delete Shift:=xlUp
         End If
     Next
 End Sub

(フォーキー) 2023/02/23(木) 17:28:43


ご丁寧に再度回答いただきありがとうございます。

実際には日付の先頭はB3から始まっていたり、
数値は日付の横に6列あったりと例で示したレイアウトとは異なっています。
今後質問させていただくときは実際の配置を提示させていただきます。

いただいたコードを少しいじってみて、実際のレイアウトでうまく動くか試してみます。
(おかもん) 2023/02/23(木) 18:22:30


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.