2016-08-26 6 views
2

私は、たとえば、あなたが行うことができますどのように言及しています: Excel VBA:カスタムメソッドでカスタム関数を作成できますか?

Range().Select 

どこ「レンジ()」関数であり、「選択する」方法です。

たとえば、三角形の辺の長さを表す3つの2倍を取って、最大角度をラジアンで吹き出したいと思った機能があったとします。

getAngle(3、4、5).degrees:90.0

getAngle(3、4、5).rads:「0.5π

Public Function getAngle(a as Double, b as Double, c as Double) 

    .degrees = 'some equation to determine degrees as a double 
    .rads = 'some equation to determine radians as a string 

End Function 

したがって、次のような結果になるだろう"

+0

カスタムタイプやクラスを使用して、それを返すことができますがあなたの機能から。 –

答えて

4

クラスを作成します。この例の名前はclsTrigです。

Option Explicit 

'/ Class Name : clsTrig 

Private m_ddegrees As Double 
Private m_drads As Double 

Public Property Get degrees() As Double 
    degrees = m_ddegrees 
End Property 

Public Property Let degrees(val As Double) 
    m_ddegrees = val 
End Property 

Public Property Get rads() As Double 
    rads = m_drads 
End Property 

Public Property Let rads(val As Double) 
    m_drads = val 
End Property 


Public Function doCalc(a1 As Double, a2 As Double) As Double 

    '/ You do the math here. This is just a sample and not actual trigonometery 

    m_ddegrees = a1 + a2 
    m_drads = a1 - a2 


End Function 

次に標準モジュールでは、あなたがこのようなご希望の動作を取得:

タイプ使用
Public Function getAngle(a As Double, b As Double) As clsTrig 
    Dim oTrig As New clsTrig 

    Call oTrig.doCalc(a, b) 
    Set getAngle = oTrig 
End Function 

Sub test() 
    MsgBox getAngle(30, 20).degrees 
    MsgBox getAngle(30, 20).rads 
End Sub 
1

Option Explicit 

Type cType 
    Degrees As Double 
    rads As Double 
End Type 


Sub tester() 

    Dim a As cType 

    a = getAngle(1, 2, 3) 

    Debug.Print a.Degrees, a.rads 

End Sub 


Public Function getAngle(a As Double, b As Double, c As Double) As cType 
Dim rv As cType 

    rv.Degrees = 88 'for example 
    rv.rads = 99  'for example 

    getAngle = rv 

End Function 
関連する問題