- ベストアンサー
重複確認 初歩
初歩的な質問ですいません下記のようなVBAを作成したいのですが、下記A列ですが、は可変にしたい場合どうしたらいいかわかりません。ActiveCellでやるのでしょうか?よろしくお願いします。 A 1 りんご 2 みかん 3 あんず 4 あんず 5 みかん 6 めろん ↓ A 1 りんご 2 みかん 3 あんず 4 めろん
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
B列をワークエリアに使ってよろしいでしょうか。 B列に番号を振って並べ替え、同じものを削除して、もとにもどす方法です。 ' Sub Macro1() ' ' Macro1 Macro ' Dim iy1 As Integer Dim iye As Integer ' Aplication.ScreenUpdating = False '実行速度を上げる ' iye = [A1].End(xlDown).Row ' For iy1 = 1 To iye Cells(iy1, "B") = iy1 Next iy1 ' [A:B].Sort Key1:=[A1] ' For iy1 = iye - 1 To 1 Step -1 If Cells(iy1, "A") = Cells(iy1 + 1, "A") Then Cells(iy1 + 1, "A").Range("A1:B1").Delete Shift:=xlUp End If Next iy1 ' [A:B].Sort Key1:=[B1] [B:B].ClearContents ' End Sub ’ B列か使えないならご記入ください。(方法はありますが、実行速度は下がります) また、ダブりを削除できたら、並び順はどうでもいいのならもご記入ください。B列が必要なくなり、実行速度が上がります。 また、このプログラムはデータが2件以上ないと、誤動作をします。その可能性がある場合ご記入ください。
その他の回答 (2)
- kkkkkm
- ベストアンサー率66% (1734/2604)
重複の削除ですね。最終行が可変ということでしたら Cells(Rows.Count, "A").End(xlUp) が最終行のセルになりますので以下のコードでいかがでしょう。 Sub Example() Range(Cells(1, "A"), Cells(Rows.Count, "A").End(xlUp)).RemoveDuplicates Columns:=1, Header:=xlNo End Sub
- imogasi
- ベストアンサー率27% (4737/17069)
したいことを実現するために考えることが、ずれていると思う。 どういう風にロジックを考えて、実現するか、まずコードを考える前に勉強すべきなんだ。 そのロジックとは、 (1)ソート法 A列でソートすると同じ果物は隣接した行に集まるから、まえ直前の行と同じかをチェックを続けて、同じなら2番目出現以後は、削除するか、他の重複なし集約シートに持っていかない (2)Find法、 今までの(前行までの)行に同じデータがないかFindで探し、あれば削除か 他の重複なし集約シートに持っていかない (3)フィルタ法 エクセルの機能を使う前提で、データーフィルター重複するレコードは無視する、の機能をVBAで行う。 (4)エクセル関数で、現在行までにCOUNTIF関数を使って現在行のデータの件数を出し、1であれば初出なので残すようにする。Application.WorksheetFunction.Counif(・・ (5)SQLを使いSELECT文でDISTINCTを使う (6)1行前までの全行で、同じ値がないかIF文で聞く まだ他のやり方があると思う。 ーー そういうことを勉強すべきだ。上記の方法は、素直なアイデアで、重複をチェックする方法も多い。 >ActiveCellでやるのでしょうか なんのことに引っかかっているのか推測できない。 ーー (3)あたりを勧める。 Googleで「VBA Filter」ででも照会すれば、VBAコード例はすぐわかる。質問コーナーに質問するまでもない。 フィルタの操作があるのを知らないのにVBAをやるというのは、本末転倒的だと思う。
お礼
すごい為になるお言葉感謝します。一体どこから勉強したらいいかわからなくVBA入門を見ましたが、実現のイメージへの道が出来なく困っていました