1

以下を含むセル A1 に可変テキスト フィールドがあります。

テキスト;#数値;#テキスト;#数値

  • この形式は繰り返し続けることができますが、パターンは常に Text;#Number です。
  • 数字は 1 桁から n 桁まで変更できます (最大 7)。

例:

元の値

MyName;#123;#YourName;#3456;#HisName;#78

必須の値:

123, 3456, 78

私の理解では、このフィールドは Excel の数式には可変性が高すぎます。

を使ってみましたが、コーディングに関しては初心者です。コードを説明テキストで分解できれば、非常にありがたいです。

以下の提案のいくつかを試してみましたが、完全に機能します。もう1つ質問です。

テキストから数値を分割できるようになったので、以下のコードを利用して、数値を x セルに分割する別のレイヤーを追加する方法はありますか。

たとえば、関数を実行すると、同じセルに 1234、567 が表示される場合、関数はセル B2 に 1234、セル C2 に 567 を配置します。これにより、文字列が関数から取得されたすべての数値を使い果たすまで、同じ行のすべてのセルが更新され続けます。

ありがとう

4

4 に答える 4

2

これは、John Coleman が推奨する方法です。

Public Function GetTheNumbers(st As String) As String
    ary = Split(st, ";#")
    GetTheNumbers = ""

    For Each a In ary
        If IsNumeric(a) Then
            If GetTheNumbers = "" Then
                GetTheNumbers = a
            Else
                GetTheNumbers = GetTheNumbers & ", " & a
            End If
        End If
    Next a
End Function
于 2016-05-02T21:57:25.673 に答える
2

パターンが固定されていて、数字の位置が変わらない場合、数字は文字列の偶数の場所にあると想定できます。これは、ソース文字列の分割の配列結果で、結果の配列の奇数インデックスを使用できることを意味します。たとえば、この文字列 "Text;# Number ;#Text;# Number " 配列インデックス 1、3 は数字 ("Text(0);# Number(1) ;#Text(2);# Number(3)」)。この方法は、データ型を検証する必要がないため、パターンが実際に修正されている場合に使用する方が簡単で安全だと思います。

Public Function GetNums(src As String) As String
    Dim arr
    Dim i As Integer
    Dim result As String
    arr = Split(src, ";#") ' Split the string to an array.
    result = ""
    For i = 1 To UBound(arr) Step 2 ' Loop through the array, starting with the second item, and skipping one item (using Step 2).
        result = result & arr(i) & ", "
    Next
    If Len(result) > 2 Then
        GetNums = Left(result, Len(result) - 2) ' Remove the extra ", " at the end of the the result string.
    Else
        GetNums = ""
    End If
End Function
于 2016-05-02T23:17:09.837 に答える