[[20221205000220]] 『RemoveDuplicatesで重複した「列」を削除したい』(列) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『RemoveDuplicatesで重複した「列」を削除したい』(列)

シート2のセルC3からD3,E3,F3と横方向に並んだ日付、最終列までの範囲で重複セルを削除したいのですが下記コードの「Selection.RemoveDuplicates Columns:=a, Header:=xlNo」で実行時エラー'1004'アプリケーション定義またはオブジェクト定義のエラーでできません。解決策を教えてください。

Sub test1()
  Dim a As Variant

    a = Worksheets(2).Cells(3,Columns.Count).End(xlToLeft).Column
    Selection.RemoveDuplicates Columns:=a, Header:=xlNo        
End Sub

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


重複削除は行方向(縦)にしかできないみたい。
2007の場合

どこか作業セルに行列入れ替えて張り付けてから重複削除後元に戻す?
(コメン) 2022/12/05(月) 00:39:08


 365ならUNIQUE関数が使えると思います。
 私は持っていないので、Dictionaryを使ってみました。

    Sub test2()
        Dim dic As Object
        Dim rng As Range, r As Range
        Set dic = CreateObject("scripting.dictionary")
        With Worksheets(2)
            Set rng = .Range("C3", .Cells(3, Columns.Count).End(xlToLeft))
        End With
        For Each r In rng
            If Not dic.exists(r.Value) Then
                dic.Add r.Value, ""
            End If
        Next
        With rng
            .ClearContents
            .Cells(1).Resize(, dic.Count) = dic.keys
        End With
    End Sub

 似たような質問がありますね。
 こちらの続きだとするなら、最初に重複削除してから転記するとか?
[[20221204184519]]
(酢飯) 2022/12/05(月) 07:15:21

ありがとうございます。横方向は無理そうなので前行程の縦方向で重複削除することとします。
(列) 2022/12/05(月) 16:00:58

 酢飯さんも提案されているUNIQUE関数を使ったコード例

 Sub test3()
    Dim rng As Range
    With Worksheets(2)
        Set rng = .Range("C3", .Cells(3, Columns.Count).End(xlToLeft))
    End With
    Dim a
    a = WorksheetFunction.Unique(rng, True)
    rng.ClearContents
    rng.Resize(, UBound(a)).Value = a
 End Sub
(hatena) 2022/12/05(月) 16:20:19

コメント返信:

[ 一覧(最新更新順) ]


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