10

セルを呼び出して渡すことができるExcelの関数が必要です。入力:

Firstname          Lastname      email@mail.com       
Firstname      midname     Lastname      email@mail.com

間のスペースの数はランダムです。出力は単なる配列でなければなりません。文字列がどのように見えるかわからないため、配列の長さは任意です。出力は次のようになります。

Firstname, Lastname, email@mail.com       
Firstname, midname, Lastname, email@mail.com

のように 1 つのセルから関数を呼び出すと=MySplitFunction(A1)、Firstname が A1、Lastname が B1、email@mail.com が C1 になります。新しいモジュールを作成し、次のコードを試しました。

Function MySplitFunction(s As String) As String()
    MySplitFunction = Split(s, " ")
End Function

出力が得られます

Firstname

配列全体を返すにはどうすればよいですか? あるセルに関数を記述して、それに近いセルに物を入れることさえ可能ですか?

編集:

ここに画像の説明を入力

4

2 に答える 2

6

別の解決策は次のとおりです。

  1. 最初のステップとして正規表現を使用して、すべてのスペースを削除します
  2. 残っている単一のスペースに基づいて最初のステップの結果を分割する
  3. さらに、追加の関数パラメーターよりも異なるセルにテキストの異なる要素を返す必要があるため、それは解決されます。

これは提案された関数です:

Public Function MySplitFunction(sMark As String, nTh As Integer) As String

On Error GoTo EH
    'regexp declaration
    Dim objRegExp As Object
    Set objRegExp = CreateObject("vbscript.regexp")

    Dim tmpTXT As String
    Dim tmpArr As Variant
    With objRegExp
        .Global = True
        .Pattern = "\s+"

        tmpTXT = .Replace(sMark, " ")
    End With

    tmpArr = Split(tmpTXT, " ")
    MySplitFunction = tmpArr(nTh - 1)

Exit Function
EH:
    MySplitFunction = ""

End Function

これは、それがどのように機能するかを示すスクリーンショットです。

ここに画像の説明を入力

重要!Excelで関数を呼び出すときは、パラメータを区切るためにコンマを使用します(私が使用しているローカルバージョンのExcelのためにセミコロンを提示する代わりに)。

于 2013-08-01T12:39:54.520 に答える