
vbaエクセルマクロについて
RemoveDuplicatesを使わずに、重複行を削除すらマクロを作りたいです。
次のような処理をしたいです。
RemoveDuplicatesメソッドだと
WorkSheet(1).Range("A:Z").RemoveDuplicates Columns:=Array(1, 3),Header:=xlYes
このようになります。
この処理をRemoveDuplicatesを使わずに、他のメソッドでマクロを作る方法はありますか?
No.2ベストアンサー
- 回答日時:
Sub RemoveDuplicateRows()
Dim lastRow As Long
Dim i As Long, j As Long
Dim rowToDelete As Boolean
lastRow = Cells(Rows.Count, "A").End(xlUp).Row ' データが入力されている最終行を取得
For i = lastRow To 2 Step -1 ' 最終行から順に各行をチェック
rowToDelete = False ' 初期値は削除しない
For j = i - 1 To 1 Step -1 ' 以前の行と比較
If Cells(i, "A").Value = Cells(j, "A").Value And _
Cells(i, "B").Value = Cells(j, "B").Value Then ' 重複がある場合
rowToDelete = True ' 削除フラグをセット
Exit For ' 以前の行との比較を終了
End If
Next j
If rowToDelete Then Rows(i).Delete ' 削除フラグがセットされていれば、行を削除
Next i
Range("A1:B" & lastRow).Select ' 更新されたセル範囲を選択
End Sub
このマクロでは、各行を順にループして、以前に出現したことがあるかどうかをチェックしています。もし重複がある場合は、削除フラグをセットして、最後に削除します。最後に、更新されたセル範囲を選択します。
注意: このマクロを実行する前に、必ずバックアップを作成してください。また、データを編集する前に、マクロの動作を確認するためにサンプルデータで試してください。
回答たすかります_(._.)_
注意書きまでそえていただき、親身にありがとうございます。
とても勉強になりました。
参考にさせていただきます!
No.3
- 回答日時:
こんばんは
どのような事でRemoveDuplicatesメソッドがダメなのか分かりませんけれどRemoveDuplicatesメソッドは大変高速に処理が出来るメソッドだと思いますので
少し汎用性を加味して少しでも早い処理をと考えた 例です
Sub example_01() '実行プロシージャ
'WorkSheet1.Range("A:Z").RemoveDuplicates Columns:=Array(1, 3), Header:=xlYes
Dim c As Variant
Dim c1 As Long, c2 As Long
c1 = 1: c2 = 26 'A=1 Z=26
For Each c In Array(1, 3)
Call myRemoveDuplicates(Worksheets(1), c1, c2, CLng(c), 2)
Next
End Sub
Sub myRemoveDuplicates(sht As Worksheet, c1 As Long, c2 As Long, colm As Long, n As Integer)
Dim Dic As Object
Set Dic = CreateObject("Scripting.Dictionary")
Dim rng As Range
Dim i As Long
With sht
For i = n To .Cells(Rows.Count, colm).End(xlUp).Row
If Not Dic.Exists(.Cells(i, colm).Value) Then
Dic.Add (.Cells(i, colm).Value), 0
Else
If rng Is Nothing Then
Set rng = .Cells(i, c1)
Else
Set rng = Union(rng, .Cells(i, c1))
End If
End If
Next
End With
'.EntireRow
If Not rng Is Nothing Then rng.Resize(, c2).Delete Shift:=xlUp
Set Dic = Nothing
Set rng = Nothing
End Sub
Deleteを書いていますのでコピーファイルなどで試してください
引数を変更して
Delete Shift:=xlUpをSelectに変更してブレークポイントを設定すると
対象範囲が理解できるかも知れません
また、.Cells(i, colm).Value を.Textなどで試す必要があるかも知れません
回答ありがとうございます!
すごいですね。
これだと早く処理ができるのですね。
なぜRemoveDuplicatesメソッド以外でと質問したかといいますと、
現在、他で質問しているような現象が起きるからなのです。
もしよろしければ、そちらについても考えられることを教えていただけますとたすかります!_(._.)_
No.1
- 回答日時:
重複行を削除するマクロを作成するには、次の手順を実行する必要があります。
データが入力されているセル範囲を選択します。
重複した行を削除するために、各行をループして、その行が以前に出現したことがあるかどうかをチェックします。
以前に出現したことがある場合は、その行を削除します。
ループが終了したら、更新されたセル範囲を選択します。
以下は、この手順を実行するVBAマクロの例です。例として、データがA列からB列にある場合を想定しています。必要に応じて、範囲を変更してください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 1 2023/02/27 22:21
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて 重複したものがあれば行を削除するとい 1 2023/02/27 18:49
- Visual Basic(VBA) RemoveDuplicatesメソッドについて教えてください。 シート1にシート2から値をもってく 1 2023/02/28 22:43
- Visual Basic(VBA) vbaエクセルマクロについて あるデータを作成し、デスクトップに.xlsx形式で保存するマクロを作成 2 2023/03/02 18:54
- Visual Basic(VBA) vbaエクセルマクロについて あるデータを作成し、デスクトップに.xlsx形式で保存するマクロを作成 6 2023/03/03 18:05
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/10 11:34
- PowerPoint(パワーポイント) エクセルのマクロについて教えてください。 1 2022/03/25 17:03
- Visual Basic(VBA) エクセルのマクロについて教えてください。 5 2023/06/02 08:44
- Excel(エクセル) エクセル VBA実行中のApplication.ScreenUpdatingについて 3 2023/07/13 21:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで特定の列が0表示の場...
-
特定のPCだけ動作しないVBAマク...
-
Excel_マクロ_現在開いているシ...
-
Excel・Word リサーチ機能を無...
-
メッセージボックスのOKボタ...
-
Excel マクロ VBA プロシー...
-
エクセルに張り付けた写真のフ...
-
Excel VBAからAccessマクロを実...
-
一つのTeratermのマクロで複数...
-
ExcelVBAでPDFを閉じるソース
-
Word VBA 表中の空白行を削除す...
-
マクロの連続印刷が突然不可能...
-
TERA TERMを隠す方法
-
Excel マクロでShearePoint先の...
-
ExcelのVBA。public変数の値が...
-
EXCELマクロでのThisisWor...
-
VBAにて別ワークブック上の実行...
-
Excelのマクロボタンをダブルク...
-
エクセルで別のセルにあるふり...
-
Excelのセル値に基づいて図形の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定のPCだけ動作しないVBAマク...
-
Excel・Word リサーチ機能を無...
-
エクセルで特定の列が0表示の場...
-
Excel_マクロ_現在開いているシ...
-
一つのTeratermのマクロで複数...
-
メッセージボックスのOKボタ...
-
Excel マクロ VBA プロシー...
-
ExcelのVBA。public変数の値が...
-
エクセルで別のセルにあるふり...
-
エクセルに張り付けた写真のフ...
-
Excel マクロでShearePoint先の...
-
TERA TERMを隠す方法
-
Excelのセル値に基づいて図形の...
-
Excel VBAからAccessマクロを実...
-
ExcelVBAでPDFを閉じるソース
-
マクロ実行時、ユーザーフォー...
-
オートフィルターとExcelマクロ...
-
wordを起動した際に特定のペー...
-
特定文字のある行の前に空白行...
-
エクセルで縦に並んだデータを...
おすすめ情報