image

タイトルが示すように、配列を返すユーザー定義関数をExcelで作成する方法を学習します。 `link:/ vba-user-defined-functions [VBAでユーザー定義関数を作成する]`の方法はすでに学びました。だから、時間を無駄にすることなく、チュートリアルを始めましょう。

配列関数とは何ですか?

配列関数は、使用時に配列を返す関数です。これらの関数はCTRL + SHIFT + ENTERキーの組み合わせで使用されるため、CSE関数および数式として配列関数または数式を呼び出すことをお勧めします。

エクセル配列関数は、多くの場合、マルチセル配列数式です。一例として、「link:/ mathematical-functions-excel-transpose-function [TRANSPOSEfunction]」があります。

VBAでUDF配列関数を作成する

したがって、シナリオは、関数ThreeEven()関数を使用して最初の3つの偶数を返したいというものです。

コードは次のようになります。

Function ThreeEven() As Integer()

'define array

Dim numbers(2) As Integer

'Assign values to array

numbers(0) = 0

numbers(1) = 2

numbers(2) = 4

'return values

ThreeEven = numbers

End Function

ワークシートでこの関数を使用してみましょう。

imageYou can see that, we first select three cells (horizontally, for vertical we have to use two-dimensional array. We have it covered below.). Then we start writing our formula. Then we hit CTRL+SHIFT+ENTER. This fills the selected cells with the array values.

注:

  • 実際には、必要なセルの数はわかりません。その場合、常に予想される配列の長さよりも多くのセルを選択してください。この関数はセルを配列で埋め、余分なセルは#N / Aエラーを表示します。

  • デフォルトでは、この配列関数は水平配列で値を返します。

垂直セルを選択しようとすると、すべてのセルに配列の最初の値のみが表示されます。

どのように機能しますか?

配列関数を作成するには、この構文に従う必要があります。

Function functionName(variables) As returnType()

dim resultArray(length) as dataType

'Assign values to array here

functionName =resultArray

End Function

関数宣言は上記で定義されたとおりでなければなりません。これは、それが配列関数であることを宣言しました。

ワークシートで使用するときは、CTRL + SHIFT + ENTERキーの組み合わせを使用する必要があります。それ以外の場合は、配列の最初の値のみを返します。

垂直配列を返すVBA配列関数

UDF配列関数を垂直方向に機能させるために、多くのことを行う必要はありません。配列を2次元配列として宣言するだけです。次に、最初のディメンションで値を追加し、他のディメンションは空白のままにします。これがあなたのやり方です:

Function ThreeEven() As Integer()

'define array

Dim numbers(2,0) As Integer

'Assign values to array

numbers(0,0) = 0

numbers(1,0) = 2

numbers(2,0) = 4

'return values

ThreeEven = numbers

End Function

これは、ワークシートでの使用方法です。

===

imageUDF Array Function with Arguments in Excel* In the above examples, we simply printed sum static values on the sheet.

関数がrange引数を受け入れ、それらに対していくつかの操作を実行して、結果の配列を返すようにしたいとします。

例範囲内のすべての値に「-done」を追加します

これは簡単に実行できることはわかっていますが、ユーザー定義のVBA配列関数を使用して問題を解決する方法を示しています。

したがって、ここでは、引数として範囲を取り、範囲内のすべての値に「-done」を追加する配列関数が必要です。これは、 `link:/ Tips-concatenate-formula-in-microsoft-excel [concatenation function]`を使用して簡単に実行できますが、ここでは配列関数を使用します。

Function CONCATDone(rng As Range) As Variant()

Dim resulArr() As Variant

'Create a collection

Dim col As New Collection

'Adding values to collection

On Error Resume Next

For Each v In rng

col.Add v

Next

On Error GoTo 0

'completing operation on each value and adding them to Array

ReDim resulArr(col.Count - 1, 0)

For i = 0 To col.Count - 1

resulArr(i, 0) = col(i + 1) & "-done"

Next

CONCATDone = resulArr

End Function

説明:

上記の関数は引数として範囲を受け入れ、範囲内の各値に「-done」を追加します。

ここでVBAコレクションを使用して配列の値を保持し、次に各値に対して操作を実行して、それらを2次元配列に追加し直したことがわかります。

image

そうですね、これが、配列を返すことができるカスタムVBA配列関数を作成する方法です。それが十分に説明的だったと思います。この記事に関して質問がある場合は、下のコメントセクションに記入してください。

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

`link:/wp-content-uploads-2019-12-Create-VBA-Function-to-Return-Array-1.xls [__ Create VBA Function to Return Array]

関連記事:

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を使用する関数] `|ユーザー定義関数からエラー値を返す方法を学ぶ

人気の記事:

link:/ keyboard-formula-shortcuts-50-excel-shortcuts-to-increase-your-productivity [生産性を高めるための50のExcelショートカット]

link:/ forms-and-functions-introduction-of-vlookup-function [ExcelのVLOOKUP関数]

link:/ Tips-countif-in-microsoft-excel [COUNTIF in Excel 2016]

link:/ excel-formula-and-function-excel-sumif-function [ExcelでSUMIF関数を使用する方法]