ぼくらの研究

ぼくらのための研究をしていきます。

【VBA】セル内の重複データ(重複行)を削除する

      2017/02/26

VBA

 

コードの説明

セル内で

りんご
みかん
バナナ
りんご
りんご
バナナ

というように改行でデータが区切られている時に、重複しているデータ(内容が重複している行)を削除するマクロです。

今回のマクロではセルAにある重複データを削除したものをセルBに表示します。

りんご
みかん
バナナ
りんご
りんご
バナナ
りんご
みかん
バナナ

こんな感じですね。

セル内の改行を区切りとしてデータ分け、重複削除するマクロはネット上を探してもパッと見た感じあまり無かったので備忘録も兼ねてまとめてみました。まぁいちおう何個か見つかったんですけど条件によって上手くいったりいかなかったりしたので、かい摘んで改良しました

なお今回は使い勝手や諸々の理由により、VBAだけではなくワークシートセルの数式も使います。マクロで関数を組む&ワークシートセルの数式を使うの二刀流です。

 

コード内容

標準モジュール部

Function myfFiltUniq(ByVal Source As String, Delimiter As String, _
 Optional Compare As VbCompareMethod = vbBinaryCompare)
 Dim vArr As Variant
 Dim sTmp As String
 vArr = Split(Source, Delimiter)
 If UBound(vArr) < 1 Then
 myfFiltUniq = Source
 Exit Function
 End If
 Do
 If vArr(0) = "" Then
 vArr(0) = vbNullString
 Else
 sTmp = sTmp & Delimiter & vArr(0)
 End If
 vArr = Filter(vArr, vArr(0), False, Compare)
 Loop While -1 < UBound(vArr)
 myfFiltUniq = Mid$(sTmp, 2)
End Function
&#91;/vb&#93;

<h3>ワークシートセル数式部</h3>
A列にセルA1から下にずらっとデータが並んでいるとして、セルB1に以下の式を入力します。


=myfFiltUniq(A1,CHAR(10))

後はB2以降ずぃっと下に展開していけばOK。

これでA列の同一セル内で重複しているデータ(改行区切り)を削除した状態のものがB列のセルに表示されます。

以上、ご参考まで。

注意書き

このマクロを使ったことで何か損害や不利益を被ったとしてもこちらで責任は負いかねます。そこは利用者個人の責任で何卒お願いしたく候。

あと個別のサポートとかも対応することはできません。あしからず。

参照設定

デフォルトのままでOKです。いじる必要無し。

VBAのIE操作を覚えるのに一番良いと思う本(ぼくはこれで覚えました)