[XL2000] 複数の値をユーザー定義関数から取得する方法

文書番号: 213484 - 対象製品
すべて展開する | すべて折りたたむ

目次

概要

Microsoft Excel は、2 つさまざまな方法を使用してユーザー定義関数から複数値を返すことができます: 1 つのメソッドを可変サイズ配列を返し、その他のメソッドは固定サイズ配列を返します。

この資料ではサンプル Microsoft Visual Basic をこれらの方法のいずれかを示すアプリケーションの手順について説明します。

詳細

マイクロソフトは提供プログラミング言語の使用方法の一例としてのみ、姿表現または明示、黙示、黙示または商品性および特定目的に対する適合性に限らずなどです。 この資料は、例示されているプログラミング言語やプロシージャの作成およびデバッグに使用するツールについて理解されているユーザーを対象としています。 Microsoft Support 担当者は、特定のプロシージャの機能についての問い合わせにはお答えできますが、ユーザー固有の目的に合わせた機能の追加、プロシージャの作成などの内容変更は行っておりません。
プログラミング経験がいない場合、マイクロソフト アドバイザリー サービスのマイクロソフト認定パートナーを連絡することがあります。 詳細については、これらのマイクロソフト Web サイトを参照してください。

マイクロソフト認定パートナー - https://partner.microsoft.com/global/30000104

Microsoft のアドバイザリ サービス - http://support.microsoft.com/gp/advisoryservice

使用可能なサポート オプションおよびマイクロソフトに連絡する方法についての詳細については、次のマイクロソフト Web サイトを参照してください: http://support.microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMS

方法 1: 可変サイズの結果の配列を返す

このメソッドは、引数範囲に基づいて値の配列を返します。 結果の配列のサイズは、引数の配列の要素数によって異なります。

次の例ではサンプル ユーザー定義関数は、その引数として配列 (値の範囲) を受け取り、範囲の各値 100 を掛けます。
  1. Excel を起動し、次のスプレッドシートを作成します。
    a1: 5
    a2: 3
    a3: 1
    A4: 2
  2. Alt キーを押しながら F11、Visual Basic エディターを起動キーを押します。
  3. [ 挿入 ] の [ モジュール ] をクリックします。
  4. モジュール シートに、[次のカスタム関数を入力:
    Function Multiply_Range(myrange As Object) As Variant
       Dim temp As Variant
       Dim i As Integer, j As Integer
       temp = myrange.Value 'creates a copy of the values in myrange
       ' if more than one element then loop through both dimensions of
       ' the array and multiply each element by 100.
       ' if not more than one element then temp is multiplied by 100.
       If IsArray(temp) Then
          For i = 1 To UBound(temp, 1)
             For j = 1 To UBound(temp, 2)
                temp(i, j) = temp(i, j) * 100
             Next j
          Next i
       Else
          temp = temp * 100
       End If
       Multiply_Range = temp
    End Function
    					
  5. Alt キーを押しながら F11 Excel に戻るにはキーを押します。
  6. 範囲 B1:B4 を選択します。
  7. 数式バーに次の数式を入力します:
    =Multiply_Range(A1:A4)
  8. Ctrl キーを押しながら Shift + Enter キーを押して、配列数式として、数式を入力します。

    数式は、次のような結果を返します。
    b1: 500
    b2: 300
    b3: 100
    b4: 200

方法 2: 固定サイズの結果の配列を返す

この方法カスタム関数から複数の値を返すためでは、結果の配列に要素の数が固定があること。

次のカスタム関数は開始時刻と終了する時刻を受け取りを 1-列の配列で 3-行の間で時間、分、および秒の数を返します。
  1. Excel を起動し、次のスプレッドシートを作成します。
    a1: 1時 00分: 00
    a2: 6:49:34
  2. Alt キーを押しながら F11、Visual Basic エディターを起動キーを押します。
  3. [ 挿入 ] の [ モジュール ] をクリックします。
  4. モジュール シートに、[次のカスタム関数を入力:
    Function Elapsed_Time(start, finish As Date) As Variant
       Dim hours, minutes, seconds As Integer
       hours = Hour(finish - start)
       minutes = Minute(finish - start)
       seconds = Second(finish - start)
       Elapsed_Time = Application.Transpose(Array(hours, minutes, seconds))
    End Function
    					
  5. Alt キーを押しながら F11 Excel に戻るにはキーを押します。
  6. 列 (たとえば、A3:A5) 内の 3 つの連続したセルを選択します。
  7. 数式バーに次の数式を入力します:
    =Elapsed_Time(A1,A2)
  8. Ctrl キーを押しながら Shift + Enter キーを押して、配列数式として、数式を入力します。

    数式は、次のような結果を返します。
    a3: 5
    A4: 49
    a5: 34
: 垂直方向ではなく、セルの範囲に水平方向に関数を入力したい場合はように Elapsed_Time 行を変更します。
elapsed_Time = 配列 (時間、分、秒単位)

関連情報

配列、Visual Basic エディターでの使用方法の詳細については、 Microsoft Visual Basic のヘルプ のヘルプ ] をクリックして、 配列を使用して Office アシスタントまたは入力、アンサー ウィザードし 検索 して表示されるトピックを参照してください。

プロパティ

文書番号: 213484 - 最終更新日: 2006年11月23日 - リビジョン: 3.5
この資料は以下の製品について記述したものです。
  • Microsoft Excel 2000 Standard Edition
キーワード:?
kbhowto kbinfo kbprogramming kbdtacode kbmt KB213484 KbMtja
機械翻訳の免責
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。
英語版 KB:213484
Microsoft Knowledge Base の免責: Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。

フィードバック