2013-08-01 12 views
7

Chcę funkcji w programie Excel, które można wywołać i przekazać komórkę do. Wprowadzanie:Łańcuch podzielony przez VBA spacjami

Firstname   Lastname  [email protected]  
Firstname  midname  Lastname  [email protected] 

Liczba spacji pomiędzy nimi jest losowa. Wyjście powinno być po prostu tablicą. Tablica może mieć dowolną długość, ponieważ nie wiem, jak wyglądają napisy. Wyjście powinno być:

Firstname, Lastname, [email protected]  
Firstname, midname, Lastname, [email protected] 

będę wywołać funkcję z jednej komórki jak =MySplitFunction(A1), i że należy położyć Book Nazwa w A1, nazwisko w B1 i [email protected] w C1. I stworzył nowy moduł i próbowałem następujący kod:

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

co daje mi wyjście

Firstname 

jak mogę to oddać cały wachlarz? Czy możliwe jest nawet napisanie funkcji w jednej komórce, która umieszcza rzeczy w komórkach w pobliżu?

EDIT:

enter image description here

Odpowiedz

10
  • Wprowadź wam dane wejściowe w A1
  • Wybierz B1: zakres D1
  • Wpisz swój wzór =MySplitFunction(A1)
  • uczynić go formułę tablicową, naciskając klawisz CTRL + SHIFT + ENTER zamiast po prostu ENTER.

Aby usunąć wielokrotne spacje, można zmienić swój kod tak (nie bardzo skuteczne, ale działa):

Function MySplitFunction(s As String) As String() 
    Dim temp As String 

    Do 
     temp = s 
     s = Replace(s, " ", " ") 'remove multiple white spaces 
    Loop Until temp = s 

    MySplitFunction = Split(Trim(s), " ") 'trim to remove starting/trailing space 
End Function 
+0

Ten rodzaj działa, ale nie pozbywam się wszystkich dodatkowych białych przestrzeni. Jakieś pomysły? – Goatcat

+0

Chyba chcę zrobić coś, co zamieni wszystkie wielokrotne białe spacje na JEDEN pojedynczy biały obszar, a następnie uruchom Split (s, "") na nim. Myśli? – Goatcat

+0

@Goatcat Zobacz moją zmianę. – assylias

5

rozwiązaniem alternatywnym jest:

  1. użyć wyrażenia regularnego jako pierwszy krok, aby usunąć wszystkie spacje
  2. Podziel wynik pierwszego kroku na podstawie pojedynczych spacji po lewej
  3. co więcej, ponieważ musisz zwraca inny element tekstu w różnych komórkach, niż rozwiąże to dodatkowy parametr funkcyjny.

to proponowaną funkcję:

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 

i jest to zrzut ekranu prezentuje jak to działa:

enter image description here

Ważne! podczas wywoływania funkcji w programie Excel należy używać przecinka do oddzielania parametrów (zamiast przedstawionego średnika ze względu na lokalną wersję programu Excel używam).

+0

Wprowadzam formułę dokładnie tak jak w B2, ale pojawia się błąd "Nie można zmienić części tablicy". – Goatcat

+0

co z przecinkiem a średnikiem, o którym wspomniałem w ostatniej uwadze na końcu mojej odpowiedzi? –

+0

Sprawdź edytowanie oryginalnego wpisu. Nie sądzę, że powinienem używać przecinka. Zwykle zawsze używam średnika. – Goatcat