Dizi eklemek için bir dize ayrıştırma


0

Diyelim ki bir hücrede uzun bir ip var

A: 1/2/15 Okul Köpeği 9/20/19

B: (3 boşluklar) 1/8/16 School Cat 10/10/10

1/2/15 ve 1/8/16 yakalamak istiyorum

Problem ilk dize 1 boşluk ile ayrılır, ikinci dize 3 boşluk ile ayrılır

Yani benim için

myStringArr = Split(myString,” “) 
MsgBox myStringArr(1)

myStringArr(1) = 1/2/15

İkinci dizge için sadece ilk dizge için çalışır

Dizeyi ayrıştırmak ve her seferinde 1. tarihi yakalamak için “tek boşluk” koşulu yerine ne kullanabilirim?


Tarih verileriyle başlayan dizeleriniz olduğunu varsayarsak, dizelerdeki baştaki boşlukları kaldırmak için Trim VBA işlevini kullanabilir ve ardından yaklaşımınızı takip edebilirsiniz.
patkim

Ayrıca kamera bunun için düzenli ifadeler kullanır. stackoverflow.com/questions/22542834/…
Máté Juhász

Yanıtlar:


1

Bu sadece, dizgenin yapısı böyle ise basit bir şekilde basittir.

dim tmp() as Variant
dim left_date, right_date as string
for each DatesinString in StringArray
    tmp = split(LTrim(DatesinString), " ")
    left_date = tmp(0)
    right_date = tmp(Ubound(tmp))

next DatesinString

0

İşte Regex kullanarak bir VBA çözümü. Kullanıcı tanımlı fonksiyon iki parametre alır: hücre referansı ve eşleşme numarası. Regex Execute yöntemi tüm eşleşen desenleri döndürür ve işlev istenildiği gibi uygun eşleşmeyi döndürür (ikinci tarihi giriş dizesinde döndürmek istemeniz durumunda). Eşleşen tarih, bir tarih değeri olarak döndürülür, ancak bu, CDate () işlevini kaldırarak bir dizge olarak geri döndürülmek üzere değiştirilebilir.

Function ExtractDate(rng As Range, matchNum As Integer) As Variant
    Dim matches As Object
    Dim target As Variant
    Dim regex As Object

    Set regex = CreateObject("VBScript.RegExp")

    With regex
        .Pattern = "(0?[1-9]|1[012])\/(0?[1-9]|[12][0-9]|3[01])\/[0-9]{2}"
        .Global = True
    End With

    Set matches = regex.Execute(rng.Value)

    If matchNum > 0 And matchNum <= matches.Count Then
        target = CDate(matches.Item(matchNum - 1).Value)
    Else
        target = CVErr(xlErrNA)
    End If

    ExtractDate = target
End Function

Örnek kullanım: =ExtractDate(A1,2)

Bu, A1 hücresindeki dizgede bulunan ikinci tarihi döndürür

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.