jak rozdělit čísla oddělené čárkou a pomlčkou?

Programy pro práci v kanceláři (Word, Excel, Access…=>Office)

Moderátor: Mods_senior

Uživatelský avatar
atari
Level 6
Level 6
Příspěvky: 3348
Registrován: říjen 08
Pohlaví: Muž
Stav:
Offline

jak rozdělit čísla oddělené čárkou a pomlčkou?

Příspěvekod atari » 24 lis 2010 12:16

V přioženém souboru mám v buňce A1 čísla oddělená čárkou. Některé jsou oddělené pomlčkou, to znamená rozsah čísel od-do. Potřebuji tyto čísla rozdělit dle vzoru v řádku 3. S těma pomlčkama si nevím rady, má někdo tip jak to vyřešit?
EDIT: v souboru byla chyba, už je opravený
Přílohy
cisla.xls
(18 KiB) Staženo 106 x

Reklama
navstevnik
Level 4
Level 4
Příspěvky: 1142
Registrován: srpen 08
Pohlaví: Nespecifikováno
Stav:
Offline

Re: jak rozdělit čísla oddělené čárkou a pomlčkou?

Příspěvekod navstevnik » 24 lis 2010 13:24

Pokud bude struktura retezce obdobna jako v ukazce, pak reseni ve trech krocich pro jednorazove pouziti:
1. Uzivatelskou funkci Transformovat(bunka) transformovat retezec
2. Ctl+C a Upravy>Vlozit jinak>Hodnoty>OK
3. Funkci nabidka Data>Text do sloupcu, separator je "," (carka)

Pro vetsi pocet radku pouzit fci pro kazdy radek a kroky 2 a 3 hromadne.

UDF vloz v edotoru VBA do standardniho modulu:

Kód: Vybrat vše

Option Explicit

Function Transformovat(SCll As Range) As String
  Dim Tmp As String, Zn As String, SStr As String
  Dim i As Integer, j As Long
  Dim ValFrom As Long, ValTo As Long
  SStr = SCll.Value
  Tmp = vbNullString
  For i = 1 To Len(SStr)
    Zn = Mid(SStr, i, 1)
    If IsNumeric(Zn) Then
      Tmp = Tmp & Zn
    ElseIf Zn = "," Then
      Transformovat = Transformovat & Tmp & Zn
      Tmp = vbNullString
    ElseIf Zn = "-" Then
      ' pocatecni hodnota rozvoje rady
      ValFrom = CLng(Tmp)
      Tmp = vbNullString
      ' Transformovat koncovou hodnotu rozvoje rady
      Do
        i = i + 1
        Zn = Mid(SStr, i, 1)
        If Zn = "," Then
          ' koncova hodnota rozvoje rady
          ValTo = CLng(Tmp)
          Tmp = vbNullString
          ' rozvinout radu
          For j = ValFrom To ValTo
            Transformovat = Transformovat & j & Zn
          Next j
          Exit Do
        Else
          Tmp = Tmp & Zn
        End If
      Loop
    End If
  Next i
  Transformovat = Transformovat & Tmp
End Function


Retezec v A1, do cilove bunky: =Transformovat(A1)

Uživatelský avatar
atari
Level 6
Level 6
Příspěvky: 3348
Registrován: říjen 08
Pohlaví: Muž
Stav:
Offline

Re: jak rozdělit čísla oddělené čárkou a pomlčkou?

Příspěvekod atari » 24 lis 2010 15:37

Super!! :smile: Díky moc. Obdivuji rychlost řešení.

Uživatelský avatar
atari
Level 6
Level 6
Příspěvky: 3348
Registrován: říjen 08
Pohlaví: Muž
Stav:
Offline

Re: jak rozdělit čísla oddělené čárkou a pomlčkou?

Příspěvekod atari » 24 lis 2010 16:12

Tak jsem to dosadil do mých dat, a když je v řádku poslední zápis čísel s pomlčkou: 776-785, tak funkce dává chybu. Bylo by možné to nějak ošetřit? V tom kodu se totiž vůbec nevyznám. Děkuji

navstevnik
Level 4
Level 4
Příspěvky: 1142
Registrován: srpen 08
Pohlaví: Nespecifikováno
Stav:
Offline

Re: jak rozdělit čísla oddělené čárkou a pomlčkou?

Příspěvekod navstevnik » 24 lis 2010 17:20

když je v řádku poslední zápis čísel s pomlčkou: 776-785, tak funkce dává chybu

Taky jsi to mohl uvest do prikladu, neumim cist myslenky.
Co je na procedure (UDF) sloziteho? Ve smycce je prochazen po znacich vstupni retezec, pokud je oddelovac ",", jsou znaky skladany do vystupniho retezce. Pokud je oddelovac "-", je predchozi cast retezce povazovana za pocatecni hodnotu rozvoje rady 776-785 a je hledana koncova hodnota rozvoje po oddelovac "," nebo konec retezce a tehdy je rada rozvinuta a vlozena do vystupniho retezce.
Upravena procedura:

Kód: Vybrat vše

Option Explicit

Function Transformovat(SCll As Range) As String
  Dim Tmp As String, Zn As String, SStr As String
  Dim i As Integer, j As Long
  Dim ValFrom As Long, ValTo As Long
  SStr = SCll.Value
  Tmp = vbNullString
  For i = 1 To Len(SStr)
    Zn = Mid(SStr, i, 1)
    If IsNumeric(Zn) Then
      Tmp = Tmp & Zn
    ElseIf Zn = "," Then
      Transformovat = Transformovat & Tmp & Zn
      Tmp = vbNullString
    ElseIf Zn = "-" Then
      ' pocatecni hodnota rozvoje rady
      ValFrom = CLng(Tmp)
      Tmp = vbNullString
      ' ve smycce nacist koncovou hodnotu rozvoje rady
      Do
        i = i + 1
        Zn = Mid(SStr, i, 1)
        If Zn = "," Or i = Len(SStr) + 1 Then  ' oddelovac nebo konec retezce
          Zn = ","  ' vlozit "," , kdyz je konec retezce je Zn=""
          ' koncova hodnota rozvoje rady
          ValTo = CLng(Tmp)
          Tmp = vbNullString
          ' rozvinout radu
          For j = ValFrom To ValTo
            ' pridat prvek a oddelovac
            Transformovat = Transformovat & j & Zn
          Next j
          Exit Do
        Else  ' znak koncove hodnoty rozvoje
          Tmp = Tmp & Zn
        End If
      Loop
    End If
  Next i
  Transformovat = Transformovat & Tmp
  ' odstranit pripadny oddelovac na konci retezce
  If Right(Transformovat, 1) = "," Then _
      Transformovat = Left(Transformovat, Len(Transformovat) - 1)
End Function

Sub test()
Dim aa As String
aa = Transformovat(ActiveSheet.Range("a1"))
Debug.Print aa
End Sub

Uživatelský avatar
atari
Level 6
Level 6
Příspěvky: 3348
Registrován: říjen 08
Pohlaví: Muž
Stav:
Offline

Re: jak rozdělit čísla oddělené čárkou a pomlčkou?

Příspěvekod atari » 25 lis 2010 01:14

To se omlouvám, také jsem to nevěděl. Až když jsem to pustil na ostrá data, tak jsem si toho všimnul. Jinak ta procedura obsahuje některé příkazy a způsoby zápisu, které jsou pro mě nové, takže proto se v tom nevyznám. Ještě jednou děkuji

Uživatelský avatar
atari
Level 6
Level 6
Příspěvky: 3348
Registrován: říjen 08
Pohlaví: Muž
Stav:
Offline

Re: jak rozdělit čísla oddělené čárkou a pomlčkou?

Příspěvekod atari » 25 lis 2010 01:35

Ještě takový nedůležitý dotaz. Jakmile udělám krok 2 a 3 (vložím funkci a data rozdělím do sloupcú), tak mi Excel vloží automatický formát do nesouvisejícího sloupce A (při každém kroku vloží nějaký formát, když smažu sloupec E tak formáty zmizí.. :o ). Ne, že by mi to nějak vadilo (umim to zrušít) ale překvapuje mě, že si Excel sám něco "vymýšlí". Může to souviset nějak s tou funkcí?
Přikládám vzorek dat.
Přílohy
vzor.xlsm
(21.61 KiB) Staženo 49 x

navstevnik
Level 4
Level 4
Příspěvky: 1142
Registrován: srpen 08
Pohlaví: Nespecifikováno
Stav:
Offline

Re: jak rozdělit čísla oddělené čárkou a pomlčkou?

Příspěvekod navstevnik » 25 lis 2010 09:48

Je to vysledek automaticke formatovani - bohuzel to je bonus Excelu 2007, ktery je v nekterych pripadech otravny, takze zrus , nijak to nesouvisi s UDF.


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek

Zpět na “Kancelářské balíky”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 6 hostů