0

私はこのように文字列を持っています

"東京からの車 5 33:53:03 時間に到着 13:56:39 オーストリアからの車 5 33:53:07 時間に到着 13:56:43 にインドからの車 5時間 13:56:39"

エクセルの同じセル。

文字列のこれらの部分をat 13:56:39 at 13:56:43 13:56:39別々のセルに表示する必要があります。

助けてください

4

3 に答える 3

2

式を使用して、別のアプローチがあります。

ここに画像の説明を入力

列 B は次の式を使用します。

B1=IFERROR(SEARCH("at ??:??:??",A$1,1),"")
B2=IFERROR(SEARCH("at ??:??:??",A$1,B1+11),"")

列 C は次の式を使用します。

C1=IFERROR(PART(A$1,B1,11),"")

これらは、多数のオカレンスに対して機能します。

于 2012-11-12T13:04:49.397 に答える
1

データが単一の列にある場合Regexp、バリアント配列を使用するのが理にかなっていると思います。

しかし、より柔軟なオプションとして、次の UDF を配列として使用できます - 入力された式で文字列を分割します

文字列が say in でA1、最大 5 つの一致が予想される場合

  1. 選択するB1:F1
  2. 数式バーに追加=AtTime(A1)
  3. を一緒に押します

ここに画像の説明を入力

余分な不一致には #N/A が付きます

コード

updated to handle single matches

 Function AtTime(strIN As String) As Variant
    Dim objRegex As Object
    Dim objRMC As Object
    Dim strOut() As String
    Dim lngCnt As Long
    Set objRegex = CreateObject("vbscript.regexp")
    With objRegex
        .Global = True
        .Pattern = "at \d{2}:\d{2}:\d{2}"
        If .test(strIN) Then
            Set objRMC = .Execute(strIN)
            If objRMC.Count > 1 Then
                ReDim strOut(1 To objRMC.Count)
                For lnGCnt = 1 To UBound(strOut)
                    strOut(lnGCnt) = objRMC(lnGCnt - 1)
                Next
            Else
                'handle single matches
                ReDim strOut(1 To 2)
                strOut(1) = objRMC(0).Value
                strOut(2) = "#N/A"
            End If
            AtTime = strOut
        Else
            AtTime = "no match"
        End If
    End With
End Function
于 2012-11-12T11:24:30.747 に答える
0

ダウンおよびダーティな文字列操作:

Option Explicit

Sub Test()
    Dim cellValue As String
    Dim newCellArray() As String
    Dim valueYouWant As String
    Dim cellCounter As Integer
    Dim x As Integer
    Dim myRange As Range
    Const SEPERATOR_VALUE = "at "
    Const ASCII_A = 65

    For cellCounter = 1 To 10 '10 represents the last row...there are ways to set this dynamically if needed

        cellValue = Sheet1.Range("A" & cellCounter)
        newCellArray = Split(cellValue, "at ")

        'Array is zero-based, but we want to start at first split value
        For x = 1 To UBound(newCellArray)
            valueYouWant = Trim$(Left$(newCellArray(x), InStr(1, newCellArray(x), " "))) 'You could prefix this with "at " if you really needed it
            Sheet1.Range(Chr$(ASCII_A + x) & cellCounter).Value = valueYouWant
        Next x
    Next cellCounter

End Sub
于 2012-11-12T17:56:38.133 に答える