image

以前の記事では、さまざまなExcel関数の組み合わせを使用して範囲から一意の値を抽出する方法を学びました。それらは素晴らしく機能しますが、複雑でもありますが、これを否定することはできません。一意の値を頻繁に抽出する場合、それらの式は疲れる可能性があります。それらもファイルを重くて遅くします。

したがって、この記事では、引数として範囲を取り、その範囲から一意の値のみを返すユーザー定義関数を作成する方法を学習します。コードをファイルに直接コピーして、すぐに使用を開始できます。

一意の関数のVBAコード:

Function UNIQUES(rng As Range) As Variant()

Dim list As New Collection

Dim Ulist() As Variant

'Adding each value of rng to the collection.

On Error Resume Next

For Each Value In rng

'here value and key are the same. The collection does not allow duplicate keys hence only unique values will remain.

list.Add CStr(Value), CStr(Value)

Next

On Error GoTo 0

'Defining the length of the array to the number of unique values. Since the array starts from 0, we subtract 1.

ReDim Ulist(list.Count - 1, 0)

'Adding unique value to the array.

For i = 0 To list.Count - 1

Ulist(i, 0) = list(i + 1)

Next

'Printing the array

UNIQUES = Ulist

End Function

コードをExcelのVBエディターにコピーします。

UNIQUE関数の使用

上記の関数は `link:/ custom-functions-in-vba-create-vba-function-to-return-array [user-defined multi-cell arrayfunction]`です。つまり、一意のリストを印刷する範囲を選択してから、数式を記述し、CTRL + SHIFT + ENTERキーの組み合わせを押す必要があります。

上記のgifには、国のリストがあります。現在、リストには重複する国がたくさんあります。ユニークな国のリストのみを取得したいと思います。

これを行うには、一意のリストが必要な範囲を選択します。次の式を書いてください:

=UNIQUES(A2:B7)

Ctrl + Shift + Enterキーの組み合わせを押します。そして、それは行われます。選択した範囲にすべての一意の値が一覧表示されます。

注:* 選択した範囲が一意の値を超える場合、#N / Aエラーが表示されます。一意の値を終了するための指標として使用できます。リストの最後に#N / Aが表示されていない場合は、より一意の値がある可能性があることを意味します。

コードの説明

このUD関数では、VBAの2つの主要な概念を使用しました。

link:/ excel-macros-and-vba-how-to-use-vba-collections-in-excel [Collections]

および link:/ custom-functions-in-vba-create-vba-function-to-return-array [User Defined ArrayFunction]。まず、コレクションを使用して、指定された範囲から一意の値を取得しました。

for Each Value In rng

list.Add CStr(Value), CStr(Value) Next

next

コレクションをシートに印刷できないため、別の配列UListに転送しました。

for i = 0 To list.Count - 1

Ulist(i, 0) = list(i + 1) Next

next

注:* VBA配列のインデックスは0から始まり、コレクションのインデックスは1から始まります。これが、forループの配列の1を減算し、リストコレクションのインデックスに1を追加した理由です。

最後に、その配列をシートに印刷しました。

同じことを行う2016年のExcelでは利用できないUNIQUE関数があります。この関数はExcel2019で使用できます。インサイダーのプログラムのメンバーのみがその関数にアクセスできます。このテクニックを使用することで、MSの先を行くことをオフィスで自慢することができます。

そうですね、これで、一意の値を簡単に抽出する関数を作成できます。私はあなたがこれを理解するのに十分説明できたと思います。この質問またはその他のExcelVBA関連の質問に関して具体的な質問がある場合は、以下のコメントセクションで質問してください。

以下のリンクをクリックして、作業ファイルをダウンロードしてください:

`link:/wp-content-uploads-2019-12-UNIQUES-function.xls [__UNIQUES関数]

関連記事:

link:/ custom-functions-in-vba-create-vba-function-to-return-array [Create VBA Function to Return Array] |配列を返すユーザー定義の配列関数を作成する方法を学びます。

link:/ excel-array-formulas-arrays-in-excel-formula [ExcelFormulの配列] |どの配列がExcelにあるかを学びます。

link:/ vba-user-defined-function [VBAを使用してユーザー定義関数を作成する方法] | Excelでユーザー定義関数を作成する方法を学ぶ `link:/ custom-functions-userdefined-functions-from-other-workbooks-using-vba-in-microsoft-excel [Using a User Defined Function(UDF)from another workbook MicrosoftExcelのVBA] `| Excelの別のワークブックでユーザー定義関数を使用する `link:/ custom-functions-return-error-values-from-user-defined-functions-using-vba-in-microsoft-excel [ユーザー定義からエラー値を返すMicrosoftExcelでVBAを使用する関数] `|ユーザー定義関数からエラー値を返す方法を学ぶ