Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
ID tematu: 64021 Skopiuj do schowka Funkcja Split - dzielenie części
Autor Wiadomość
gajus21
Exceloholic


Posty: 114
Wysłany: 03-02-2019, 18:06   Funkcja Split - dzielenie części

Cześć,
Mam takie dwa pytania odnośnie funkcji split:
1) Chciał bym zapisać poszczególne wyniki do danych komórek ale na razie mam tylko informację w okienku
2) Jak mógł bym zrobić żeby był rozdział tylko np. po 5 znaku "-"

Kod:
Sub rozdział()
'Rozdziela tekst na podstawie "-"
Dim TextStrng As String
Dim Result() As String
Dim DisplayText As String
'TextStrng = Cells(1, 1)
Result = Split(Cells(1, 1), "-")
For i = LBound(Result()) To UBound(Result())
Cells(i, 2) = Result(i) ' ta część nie chce działać

DisplayText = DisplayText & Result(i) & vbNewLine
Next i
MsgBox DisplayText
End Sub
ID posta: 361876 Skopiuj do schowka
 
 
dm 
Excel Expert


Pomógł: 404 razy
Posty: 1186
Wysłany: 03-02-2019, 19:13   

Spróbuj tak
Kod:
Sub rozdział()
'Rozdziela tekst na podstawie "-"
Dim TextStrng As String
Dim Result As Variant
Dim DisplayText As String
'TextStrng = Cells(1, 1)
Result = Split(Cells(1, 1), "-")
Result = Application.Transpose(Result)
  Range("A2").Resize(UBound(Result, 1)) = Result
End Sub

Ad 2. Ma rozdzielać po 5 znaku czy po 5 myślniku?
ID posta: 361877 Skopiuj do schowka
 
 
gajus21
Exceloholic


Posty: 114
Wysłany: 03-02-2019, 19:16   

Po piątym myślniku.
ID posta: 361878 Skopiuj do schowka
 
 
OShon 
Excel Expert



Zaproszone osoby: 383
Wersja: Win Office 365
Pomógł: 1631 razy
Posty: 8319
Wysłany: 03-02-2019, 19:33   

Split wycina znak dodając elementy pośrednie do tablicy. Aby je potem należy ponownie przelecieć po tej tablicy i uzupełnić braki jeśli chcesz zwrócić całość lub większą cześć. Może łatwiej będzie ci użyć funkcji MID() i w pętli po jednym znaku odliczyć sobie 5 znaków "-" ?

Kod:
Const slowo$ = "Ala-ma-kota-a-kot-ma-Ale"
Dim s1$, s2$, x%, ile%
For x = 1 To Len(slowo)
      If Mid(slowo, x, 1) = "-" Then ile = ile + 1
      If ile < 5 Then s1 = s1 & Mid(slowo, x, 1) Else s2 = s2 & Mid(slowo, x, 1)
Next
Debug.Print s1 & "/" & Right(s2, Len(s2) - 1)
_________________
Oskar Shon - MVP Office System/Development 11/20r, 3x MCC
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA
Sprawdź promocje na polskie dodatki do MS Office w VBATools.pl
Ostatnio zmieniony przez OShon 03-02-2019, 19:34, w całości zmieniany 1 raz  
ID posta: 361879 Skopiuj do schowka
 
 
ąćęłńóś
Excel Expert


Pomógł: 202 razy
Posty: 960
Wysłany: 03-02-2019, 19:34   

gajus21 napisał/a:
Po piątym myślniku

Np. tak:
w 'A1' tekst: 0-1-2-3-4-5-6-7-8-9
Kod:
Option Explicit

Sub rozdzial_2()
    Dim TextStrng As String
    Dim Result
   
    Cells(1, 1).Value = "0-1-2-3-4-5-6-7-8-9"
    TextStrng = Trim(Cells(1, 1).Value)
    Result = Split(TextStrng, "-", -1, 1)
    Cells(1, 2).Resize(UBound(Result) + 1, 1).Value = Application.Transpose(Result)
    Cells(1, 3).Resize(5, 1) = Application.Transpose(Application.Index(Result, 1, Array(6, 7, 8, 9, 10)))
    Cells(1, 4).Resize(1, 5) = Application.Index(Application.Transpose(Result), Array(6, 7, 8, 9, 10), 1)
    Range("b1:h10").Select
    MsgBox Join(Result, vbNewLine)
End Sub


Ps.: No i mało szukałeś na forum ... np: tutaj:

http://www.excelforum.pl/...kra-vt63710.htm

Faktem jest, że trudno tu trafić, ale jak się człowiek zaaaaaprze .... uff ... to da radę ... :->
Ostatnio zmieniony przez ąćęłńóś 03-02-2019, 19:52, w całości zmieniany 1 raz  
ID posta: 361880 Skopiuj do schowka
 
 
gajus21
Exceloholic


Posty: 114
Wysłany: 03-02-2019, 19:45   

Dziękuję za pomoc popróbuję z różnymi możliwościami i zobaczę która będzie najlepsza.
ID posta: 361881 Skopiuj do schowka
 
 
Artik 



Wersja: Win Office 365
Pomógł: 2659 razy
Posty: 8828
Wysłany: 04-02-2019, 14:02   

To jeszcze jedna droga do Rzymu. :-)
Kod:
Sub rozdzial_3()
    Dim Result    As Variant
    Dim i As Long
    Dim LenTxt As Long
    Dim strTxt As String
    Dim strNaLewo   As String
    Dim strNaPrawo  As String
     
    Const NrZnaku  As Long = 5
   
  strTxt = Cells(1, 1).Value
 
  'podziel łańcuch
  Result = Split(strTxt, "-")
 
  'Split ZAWSZE zwraca tablicę o dolnym indeksie = 0
  'zlicz długość pięciu elementów
  For i = 0 To NrZnaku - 1
    LenTxt = LenTxt + Len(Result(i))
  Next i
 
  'wyciągnij tekst na lewo od piątego "-"
  'jl. bez myślnika na końcu to +4
  strNaLewo = Left(strTxt, LenTxt + NrZnaku) 'lub (...) + NrZnaku-1)
 
  'jeszcze raz podziel łańcuch, ale we fragmencie po piątym "-"
  strNaPrawo = Mid(strTxt, LenTxt + NrZnaku + 1)
  Result = Split(strNaPrawo, "-")
 
  'transponuj z poziomu do pionu
  'do funkcji weszła tablica o dolnym indeksie=0, a wyszła o indeksie=1
  Result = Application.Transpose(Result)
 
  'wypisz do komórek
  Cells(1, 3).Value = strNaLewo
  Cells(2, 3).Resize(UBound(Result)).Value = Result
 
End Sub

Artik
_________________
Persistence is a virtue in the world of programming.
ID posta: 361920 Skopiuj do schowka
 
 
Maciej Gonet 
Excel Expert


Wersja: Win Office 2016
Pomógł: 1303 razy
Posty: 4486
Wysłany: 04-02-2019, 15:36   

Ja to zrozumiałem trochę inaczej: że podział ma być na 2 części w miejscu piątego myślnika.
Kod:
Sub rozdziel_4()
  Dim strTxt As String
  Dim Result As Variant
  Dim strNaLewo   As String
  Dim strNaPrawo  As String
     
  Const NrZnaku  As Long = 5 + 1
   
  strTxt = Cells(1, 1).Value
 
  'podziel na 6 części
  Result = Split(strTxt, "-", NrZnaku)
 
  'szósta część osobno
  strNaPrawo = Result(NrZnaku - 1)
   
  'połącz 5 pierwszych części
  ReDim Preserve Result(NrZnaku - 2)
  strNaLewo = Join(Result, "-")
   
  'wypisz do komórek
  Cells(1, 4).Value = strNaLewo
  Cells(2, 4).Value = strNaPrawo
 
End Sub


Podziel_tekst.xlsm
Pobierz Plik ściągnięto 16 raz(y) 16.11 KB

ID posta: 361927 Skopiuj do schowka
 
 
J_B 
Excel Expert


Pomógł: 273 razy
Posty: 778
Wysłany: 04-02-2019, 16:11   

A ja jeszcze inaczej :-)
Kod:

Sub rozdział()
    'Rozdziela tekst na podstawie "-"
    Dim Result, Dl As Integer, ile As Integer, x As Integer
    ile = 5
    Result = Split(Cells(1, 1), "-")
    For x = 0 To ile-1
        Dl = Dl + Len(Result(x))
    Next
    Cells(1, 2) = Left(Cells(1, 1), Dl + ile )
    Cells(2, 2) = Replace(Cells(1, 1), Left(Cells(1, 1), Dl + ile ), "")

End Sub

ID posta: 361932 Skopiuj do schowka
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.marketingNET.pl

Archiwum

Strona używa plików cookies.

Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przeglądarce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.
Sprawdź, w jaki sposób przetwarzamy dane osobowe