VisualBasic2008ExpressEditionでプログラムしています。


(以前した質問の内容が不完全でしたので、再質問します)

Module1.vb内に、次のような処理をしてくれるPublic Functionを作りたいです。

つきましては、コードをご教示ください。

0. Public Functionの名前はAaaとする
1. 各種パラメータを受け取る
  1-1. strGiven As String
  1-2. strFind As String
  1-3. strResult As String
2. strGivenの中に、strFindに格納されているのと同じ文字列が含まれているかどうか判定する
3. strResultに結果を代入する
  3-1. もし含まれていたら、strResultに"Exist"を代入する
  3-2. もし含まれていなかったら、strResultに"NotExist"を代入する
4. strResultを返す

回答の条件
  • 1人2回まで
  • 登録:2009/10/26 22:20:21
  • 終了:2009/10/26 23:05:47

ベストアンサー

id:Mook No.1

Mook回答回数1312ベストアンサー獲得回数3912009/10/26 22:37:34

ポイント100pt

呼び出し側は

    Dim strGiven As String
    strGiven = "ABC DEF GHI"
    Dim strResult As String
    Dim res As String
    res = Aaa( strGiven, "DEF", strResult)
    msgBox( "引数の結果 = " & strResult ) 
    msgBox( "関数の結果 = " & res ) 

のように使用します。どちらも同じものが返ってくるので、通常このような実装はしませんが・・・。


Module Module1
    Const AAA_NoDirection As Integer = 0
    Const AAA_ToBackward As Integer = 1
    Const AAA_ToForward As Integer = 2

    Public Function Aaa(ByRef strGiven As String, ByVal strFind As String, ByRef strResult As String) As String
        Const searchDirection As Integer = AAA_NoDirection '検索方向
        Const deleteDirection As Integer = AAA_NoDirection '削除方向

        If InStr(strGiven, strFind) > 0 Then
            strResult = "Exist"
            Aaa = "Exist"
        Else
            strResult = "NoExist"
            Aaa = "NoExist"
            Exit Sub
        End If

        Dim strPos As Integer
        Select Case searchDirection
            Case AAA_ToBackward
                strPos = InStr(strGiven, strFind)
            Case AAA_ToForward
                strPos = InStrRev(strGiven, strFind)
            Case Else
                Exit Sub
        End Select

        Select Case deleteDirection
            Case AAA_ToBackward
                strGiven = Right(strGiven, Len(strGiven) - Len(strFind) - strPos + 1)
            Case AAA_ToForward
                strGiven = Left(strGiven, strPos - 1)
                Exit Sub
        End Select
    End Function
End Module
id:jjkkjpjjkkjp

ありがとうございました。

2009/10/26 23:05:33
  • id:Mook
    関数の結果として返すのであれば、StrResult は引数にする必要はないとおもいますが、
    両方に結果を返したいということでしょうか。

    Function で結果を返すには、関数名に代入をします。

    今回の場合は関数内で
    Aaa = "Exist" か Aaa="NoExists"
    とすれば、呼び出し側は結果を受けることができます。
  • id:jjkkjpjjkkjp
    >両方に結果を返したいということでしょうか。

    その通りです。名前を統一したいもので・・・
  • id:jjkkjpjjkkjp
    すみませんが、もう一度お願いできますか。
  • id:Mook
    有るか無いかの確認の最低限の機能でしたら下記です。

     Public Function Aaa(ByRef strGiven As String, ByVal strFind As String, ByRef strResult As String) As String
        If InStr(strGiven, strFind) > 0 Then
          strResult = "Exist"
          Aaa = "Exist"
        Else
          strResult = "NoExist"
          Aaa = "NoExist"
        End If
     End Function

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません