< návrat zpět
MS Excel
Téma: Názvy ulic a čísla popisná 
Zaslal/a KH98 17.1.2025 11:04
Dobrý den, 
prosím o radu. V excelu se moc neorientuju a budu ráda, pokud se dopátráme řešení. 
Potřebuji ve sloupci rozdělit názvy ulic a číslo popisné. Např. Susilovo namesti 26 = Aby bylo pouze "Susilovo namesti" v jednom sloupci a "26" ve druhém sloupci. Jedná se o sloupce D a R.
Pročítala jsem si diskuze a pomocí vzorce 
=ČÁST(D484;NAJÍT("#";DOSADIT(D484;" ";"#";DÉLKA(D484)-DÉLKA(DOSADIT(D484;" ";""))))+1;1000)
se mi povedlo rozdělit jednotlivá čísla od textu. Bohužel jsem si neuvědomila, že ve sloupci, ze kterého jsem hodnoty brala zůstanou nezměněná - tj. Název ulice + č.p. a ulice bez čísel budou zaznamenané jako "HODNOTA".
Existuje způsob, kterým bych mohla přímo rozdělit text od čísla (kromě "text do sloupců"), který by mi přetáhnul č.p a zachoval názvy ulic? Opravená data budeme dále importovat do SAPu, tak taky zároveň nevím, jestli nebude problém, že je v excelu vložený vzorec?
Moc díky!
Příloha:  57172_bez-nazvu.png (47kB, staženo 30x)
57172_bez-nazvu.png (47kB, staženo 30x)

 
  
  
  

Dobrý den, 
tady bych raději použil makro.
Option Explicit
Sub RozdelAdresy()
Dim ws As Worksheet
Dim posRdk As Long
Dim i As Long
Dim ulice As String
Dim popisne As String
Dim regEx As Object
Dim matches As Object
' Nastavení listu, kde jsou data
Set ws = ThisWorkbook.Sheets(1) ' Změň číslo listu, pokud je potřeba
 With ws
 ' Najde poslední řádek ve sloupci D
 posRdk = .Cells(.Rows.Count, "D").End(xlUp).Row
 
 ' Vytvoření RegEx objektu
 Set regEx = CreateObject("VBScript.RegExp")
 regEx.Global = True
 regEx.Pattern = "^(.*?)(\d.*)$"
 
 ' Prochází všechny řádky ve sloupci D
 For i = 2 To posRdk ' Předpokládáme, že hlavička je na řádku 1
 If .Cells(i, "D").Value <> "" Then
 ' Zpracuje adresu pomocí RegEx
 If regEx.Test(.Cells(i, "D").Value) Then
 Set matches = regEx.Execute(.Cells(i, "D").Value)
 ulice = Trim(matches(0).SubMatches(0))
 popisne = Trim(matches(0).SubMatches(1))
 Else
 ulice = .Cells(i, "D").Value
 popisne = ""
 End If
 
 ' Zapíše rozdělené části do sloupců D a R
 .Cells(i, "D").Value = ulice
 .Cells(i, "R").Value = popisne
 End If
 Next i
 End With
 
 MsgBox "Rozdělení adres dokončeno!", vbInformation
End SubcitovatKH98(23.1.2025 8:45)#057192 
Dobrý den, moc díky, funguje to. :) 
€Ł мσşqμΐτσ napsal/a:
Dobrý den, 
tady bych raději použil makro.
Option Explicit
Sub RozdelAdresy()
Dim ws As Worksheet
Dim posRdk As Long
Dim i As Long
Dim ulice As String
Dim popisne As String
Dim regEx As Object
Dim matches As Object
' Nastavení listu, kde jsou data
Set ws = ThisWorkbook.Sheets(1) ' Změň číslo listu, pokud je potřeba
 With ws
 ' Najde poslední řádek ve sloupci D
 posRdk = .Cells(.Rows.Count, "D").End(xlUp).Row
 
 ' Vytvoření RegEx objektu
 Set regEx = CreateObject("VBScript.RegExp")
 regEx.Global = True
 regEx.Pattern = "^(.*?)(\d.*)$"
 
 ' Prochází všechny řádky ve sloupci D
 For i = 2 To posRdk ' Předpokládáme, že hlavička je na řádku 1
 If .Cells(i, "D").Value <> "" Then
 ' Zpracuje adresu pomocí RegEx
 If regEx.Test(.Cells(i, "D").Value) Then
 Set matches = regEx.Execute(.Cells(i, "D").Value)
 ulice = Trim(matches(0).SubMatches(0))
 popisne = Trim(matches(0).SubMatches(1))
 Else
 ulice = .Cells(i, "D").Value
 popisne = ""
 End If
 
 ' Zapíše rozdělené části do sloupců D a R
 .Cells(i, "D").Value = ulice
 .Cells(i, "R").Value = popisne
 End If
 Next i
 End With
 
 MsgBox "Rozdělení adres dokončeno!", vbInformation
End Sub