VBAサンプル集
重複の無いユニークなデータ作成

ExcelマクロVBAの実用サンプル、エクセルVBA集と解説
公開日:2013年5月以前 最終更新日:2013-02-18

重複の無いユニークなデータ作成


簡単な例で

シート「元データ」

A列に、1行目に見出し、2行目以降にデータが入っている

シート「ユニーク」

このA列に、シート「元データ」のA列をユニーク(一意)にして取り出します。



まずは、エクセルらしく、ワークシート関数とフィルターを使って


Sub sample1()
  Dim LastRow As Long
  With Worksheets("元データ")
    LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
    .Cells(1, 2) = "作業列"
    .Range(.Cells(2, 2), .Cells(LastRow, 2)) = "=COUNTIF($A$2:A2,A2)"
    .Cells(1, 1).AutoFilter Field:=2, Criteria1:=1
    .Range(.Cells(1, 1), .Cells(LastRow, 1)).SpecialCells(xlCellTypeVisible).Copy Destination:=Worksheets("ユニーク").Cells(1, 1)
    .Cells(1, 1).AutoFilter
    .Columns(2).Clear
  End With
End Sub

非常にエクセルらしい、素直な処理です。

これを使うかは別にして、このマクロは書けるようにしておいた方が良いでしょう。



では、イヤだ、自力で全部やりたいって人には


Sub sample2()
  Dim LastRow As Long
  With Worksheets("元データ")
    LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
    Worksheets("ユニーク").Cells(1, 1) = .Cells(1, 1)
    Call sample2sub(.Range(.Cells(2, 1), .Cells(LastRow, 1)), Worksheets("ユニーク").Cells(2, 1))
  End With
End Sub
Sub sample2sub(MyRange As Range, Target As Range)
  Dim i As Long
  Dim blnFind As Boolean
  Dim MyArray
  Dim MyCell As Range
  For Each MyCell In MyRange
    If Not IsArray(MyArray) Then
      ReDim MyArray(1 To 1, 1 To 1)
      MyArray(1, UBound(MyArray, 2)) = MyCell
    Else
      blnFind = False
      For i = LBound(MyArray, 2) To UBound(MyArray, 2)
        If MyArray(1, i) = MyCell Then
          blnFind = True
          Exit For
        End If
      Next i
      If blnFind = False Then
        ReDim Preserve MyArray(1 To 1, 1 To UBound(MyArray, 2) + 1)
        MyArray(1, UBound(MyArray, 2)) = MyCell
      End If
    End If
  Next
  Target.Resize(UBound(MyArray, 2), 1) = WorksheetFunction.Transpose(MyArray)
End Sub

ふふ、どうだ!!!

これが、さらーと書けるようなら、私のブログは、もう二度と見るなって事で(笑)

でも、これだと、

sample2sub

これは汎用性があるので、どこでも使えますね。



もうちょっとなんとかならないかって人には




Sub sample3()
  Dim LastRow As Long
  With Worksheets("元データ")
    LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
    .Range(.Cells(1, 1), .Cells(LastRow, 1)).AdvancedFilter _
      Action:=xlFilterCopy, _
      CopyToRange:=Worksheets("ユニーク").Cells(1, 1), _
      Unique:=True
  End With
End Sub

まあ、一番簡単ですよね。

ただ、

「フィルタオプションの設定」

これを使える人じゃないと、お勧めできないです。



これ以外にも、いろいろやり方はいっぱいありますが、

腕試しに、いろいろ挑戦してみるには、良い題材だと思います。


では、挑戦してみて下さい。




同じテーマ「マクロVBAサンプル集」の記事

日付の検索(配列の使用)
ストップウォッチ(1/100秒)(Timer)
ストップウォッチ改(1/100秒)(Timer)
重複の無いユニークなデータ作成
WEBデータの取得方法
右クリックメニューの変更(CommandBars)
エクセルのアイコン取得(FaceID)
素数を求めるマクロ
入力規則のリスト入力の妥当性判定
配色を使用したカラー設定を固定カラーに変更
指定セルに名前定義されているか判定する


新着記事NEW ・・・新着記事一覧を見る

AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ